Виртуальная библиотека Delphi - [20]

Шрифт
Интервал

>  rTemp := CreateEllipticRgn(0, 0, Width, Height);

>  rTemp2 := CreateEllipticRgn((Width DIV 4), (Height DIV 4),

>    3*(Width DIV 4), 3*(Height DIV 4));

>  CombineRgn(rTemp, rTemp, rTemp2, RGN_DIFF);

>  SetWindowRgn(Handle, rTemp, True);

>  DeleteObject(rTemp2);

>  rTitleBar  := CreateEllipticRgn(4, 4, Width-4, Height-4);

>  rTemp := CreateEllipticRgn(CapY, CapY, Width-CapY, Height-CapY);

>  CombineRgn(rTitleBar, rTitleBar, rTemp, RGN_DIFF);

>  Vertices[0] := Point(0,0);

>  Vertices[1] := Point(Width, 0);

>  Vertices[2] := Point(Width DIV 2, Height DIV 2);

>  rTemp := CreatePolygonRgn(Vertices, 3, ALTERNATE);

>  CombineRgn(rTitleBar, rTitleBar, rTemp, RGN_AND);

>  DeleteObject(rTemp);

>  RL := ArcTan(Width / Height);

>  RR := -RL + (22 / Center.X);

>  X := Center.X-Round((Center.X-1-(CapY DIV 2))*Sin(RR));

>  Y := Center.Y-Round((Center.Y-1-(CapY DIV 2))*Cos(RR));

>  SB1 := TSpeedButton.Create(Self);

>  WITH SB1 DO

>    BEGIN

>      Parent     := Self;

>      Left       := X;

>      Top        := Y;

>      Width      := 14;

>      Height     := 14;

>      OnClick    := Button1Click;

>      Caption    := 'X';

>      Font.Style := [fsBold];

>    END;

>end;

>procedure TForm1.Button1Click(Sender: TObject);

>begin

>  Close;

>End;

>procedure TForm1.WMNCHITTEST(var Msg: TWMNCHitTest);

>begin

>  Inherited;

>  WITH Msg DO

>    WITH ScreenToClient(Point(XPos,YPos)) DO

>      IF PtInRegion(rTitleBar, X, Y) AND

>       (NOT PtInRect(SB1.BoundsRect, Point(X,Y))) THEN

>        Result := htCaption;

>end;

>procedure TForm1.WMNCActivate(var Msg: TWMncActivate);

>begin

>  Inherited;

>  TitleBar(Msg.Active);

>end;

>procedure TForm1.WMSetText(var Msg: TWMSetText);

>begin

>  Inherited;

>  TitleBar(Active);

>end;

>procedure TForm1.TitleBar(Act: Boolean);

>VAR

>  TF      : TLogFont;

>  R       : Double;

>  N, X, Y : Integer;

>begin

>  IF Center.X = 0 THEN Exit;

>  WITH Canvas DO

>    begin

>      Brush.Style := bsSolid;

>      Brush.Color := TitlColors[Act];

>      PaintRgn(Handle, rTitleBar);

>      R  := RL;

>      Brush.Color := TitlColors[Act];

>      Font.Name := 'Arial';

>      Font.Size := 12;

>      Font.Color := TxtColors[Act];

>      Font.Style := [fsBold];

>      GetObject(Font.Handle, SizeOf(TLogFont), @TF);

>      FOR N := 1 TO Length(Caption) DO

>        BEGIN

>          X := Center.X-Round((Center.X-6)*Sin(R));

>          Y := Center.Y-Round((Center.Y-6)*Cos(R));

>          TF.lfEscapement := Round(R * 1800 / pi);

>          Font.Handle := CreateFontIndirect(TF);

>          TextOut(X, Y, Caption[N]);

>          R := R - (((TextWidth(Caption[N]))+2) / Center.X);

>          IF R < RR THEN Break;

>        END;

>      Font.Name := 'MS Sans Serif';

>      Font.Size := 8;

>      Font.Color := clWindowText;

>      Font.Style := [];

>    end;

>end;

>procedure TForm1.FormPaint(Sender: TObject);

>begin

>  WITH Canvas DO

>    BEGIN

>      Pen.Color := clBlack;

>      Brush.Style := bsClear;

>      Pen.Width := 1;

>      Pen.Color := clWhite;

>      Arc(1, 1, Width-1, Height-1, Width, 0, 0, Height);

>      Arc((Width DIV 4)-1, (Height DIV 4)-1,

>        3*(Width DIV 4)+1, 3*(Height DIV 4)+1, 0, Height, Width, 0);

>      Pen.Color := clBlack;

>      Arc(1, 1, Width-1, Height-1, 0, Height, Width, 0);

>      Arc((Width DIV 4)-1, (Height DIV 4)-1,

>        3*(Width DIV 4)+1, 3*(Height DIV 4)+1, Width, 0, 0, Height);

>      TitleBar(Active);

>    END;

>end;

>end.

Как получить короткий путь файла если имеется длинный ("c:\Program Files" ==> "c:\progra~1")

>GetShortPathName()

Как создать свою кнопку в заголовке формы (на Caption Bar)

Непосредственно такой функции вроде нет, но можно изловчиться. Нарисовать там кнопку вручную и обрабатывать команды нажатия мышки на Caption Bar.

Пример.

>unit Main;

>interface

>uses

>  Windows, Buttons, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

>type

>  TForm1 = class(TForm)

>    procedure FormResize(Sender: TObject);

>  private

>    CaptionBtn : TRect;

>    procedure DrawCaptButton;

>    procedure WMNCPaint(var Msg : TWMNCPaint); message WM_NCPaint;

>    procedure WMNCActivate(var Msg : TWMNCActivate); message WM_NCACTIVATE;

>    procedure WMSetText(var Msg : TWMSetText); message WM_SETTEXT;

>    procedure WMNCHitTest(var Msg : TWMNCHitTest); message WM_NCHITTEST;

>    procedure WMNCLButtonDown(var Msg : TWMNCLButtonDown); message WM_NCLBUTTONDOWN;

>  public

>   { Public declarations }

>  end;

>var

>  Form1: TForm1;

>implementation

>const

>  htCaptionBtn = htSizeLast + 1;

>{$R *.DFM}

>procedure TForm1.DrawCaptButton;

>var

>  xFrame,  yFrame,  xSize,  ySize  : Integer;

>  R : TRect;

>begin

>  //Dimensions of Sizeable Frame

>  xFrame := GetSystemMetrics(SM_CXFRAME);

>  yFrame := GetSystemMetrics(SM_CYFRAME);

>  //Dimensions of Caption Buttons

>  xSize  := GetSystemMetrics(SM_CXSIZE);

>  ySize  := GetSystemMetrics(SM_CYSIZE);

>  //Define the placement of the new caption button

>  CaptionBtn := Bounds(Width - xFrame - 4*xSize + 2,

>                       yFrame + 2, xSize - 2, ySize - 4);

>//Get the handle to canvas using Form's device context

>  Canvas.Handle := GetWindowDC(Self.Handle);

>  Canvas.Font.Name := 'Symbol';

>  Canvas.Font.Color := clBlue;

>  Canvas.Font.Style := [fsBold];

>  Canvas.Pen.Color := clYellow;

>  Canvas.Brush.Color := clBtnFace;

>  try

>    DrawButtonFace(Canvas, CaptionBtn, 1, bsAutoDetect, False, False, False);


Еще от автора Неизвестный Автор
Галчонок

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Призраки ночи

В книге собраны предания и поверья о призраках ночи — колдунах и ведьмах, оборотнях и вампирах, один вид которых вызывал неподдельный страх, леденивший даже мужественное сердце.


Закат  вечности

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


mmmavro.org | День 131, Победа

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Песнь о Нибелунгах

…«Песнь о Нибелунгах» принадлежит к числу наиболее известных эпических произведений человечества. Она находится в кругу таких творений, как поэмы Гомера и «Песнь о Роланде», «Слово о полку Игореве» и «Божественная комедия» Данте — если оставаться в пределе европейских литератур…В. Г. Адмони.


mmmavro.org | День 132, Поэт

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Рекомендуем почитать
Графика DirectX в Delphi

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Вторая жизнь старых компьютеров

Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.


DirectX 8. Начинаем работу с DirectX Graphics

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.