GuiForms.pas
上传用户:ctlcnc
上传日期:2021-12-10
资源大小:4933k
文件大小:5k
源码类别:

2D图形编程

开发平台:

Delphi

  1. unit GuiForms;
  2. //---------------------------------------------------------------------------
  3. interface
  4. //---------------------------------------------------------------------------
  5. uses
  6.  Types, Vectors2px, AsphyreTypes, AsphyreFonts, GuiShapeRep, GuiTypes, GuiUtils,
  7.  GuiObjects, GuiControls;
  8. //---------------------------------------------------------------------------
  9. type
  10.  TGuiForm = class(TGuiControl)
  11.  private
  12.   FDragShape : string;
  13.   DragClick  : TPoint2px;
  14.   DragInit   : TPoint2px;
  15.   Dragging   : Boolean;
  16.   FCaptRect  : TRect;
  17.   FCaptColor : TColor2;
  18.   FCaptFont  : string;
  19.   FCaptHAlign: THorizontalAlign;
  20.   FCaptVAlign: TVerticalAlign;
  21.   FCaption   : string;
  22.   FCaptOpt   : TFontOptions;
  23.   procedure DrawText(const DrawPos: TPoint2px);
  24.   function GetCaptOpt(): PFontOptions;
  25.  protected
  26.   procedure DoMouseEvent(const Pos: TPoint2px; Event: TMouseEventType;
  27.    Button: TMouseButtonType; SpecialKeys: TSpecialKeyState); override;
  28.   procedure DoDraw(const DrawPos: TPoint2px); override;
  29.   procedure DoDescribe(); override;
  30.   procedure WriteProperty(Code: Cardinal; Source: Pointer); override;
  31.  public
  32.   property DragShape : string read FDragShape write FDragShape;
  33.   property CaptHAlign: THorizontalAlign read FCaptHAlign write FCaptHAlign;
  34.   property CaptVAlign: TVerticalAlign read FCaptVAlign write FCaptVAlign;
  35.   property CaptRect  : TRect read FCaptRect write FCaptRect;
  36.   property CaptColor : TColor2 read FCaptColor write FCaptColor;
  37.   property CaptFont  : string read FCaptFont write FCaptFont;
  38.   property CaptOpt   : PFontOptions read GetCaptOpt;
  39.   property Caption   : string read FCaption write FCaption;
  40.   procedure SetFocus(); override;
  41.   constructor Create(AOwner: TGuiObject); override;
  42.  end;
  43. //---------------------------------------------------------------------------
  44. implementation
  45. //---------------------------------------------------------------------------
  46. const
  47.  PropBase = $1000;
  48. //---------------------------------------------------------------------------
  49. constructor TGuiForm.Create(AOwner: TGuiObject);
  50. begin
  51.  inherited;
  52.  FCaptHAlign:= haCenter;
  53.  FCaptVAlign:= vaCenter;
  54.  Dragging   := False;
  55.  FCaptOpt.Reset();
  56. end;
  57. //---------------------------------------------------------------------------
  58. function TGuiForm.GetCaptOpt(): PFontOptions;
  59. begin
  60.  Result:= @FCaptOpt;
  61. end;
  62. //---------------------------------------------------------------------------
  63. procedure TGuiForm.DoMouseEvent(const Pos: TPoint2px; Event: TMouseEventType;
  64.  Button: TMouseButtonType; SpecialKeys: TSpecialKeyState);
  65. begin
  66.  if (Event = metDown)and(Button = mbtLeft)and
  67.   (PointInside(FDragShape, Pos))and(not Dragging) then
  68.   begin
  69.    DragInit := Origin;
  70.    DragClick:= Pos;
  71.    Dragging := True;
  72.   end;
  73.  if (Dragging)and(Button = mbtLeft)and(Event = metUp) then Dragging:= False;
  74.  if (Dragging)and(Event = metMove) then
  75.   Origin:= DragInit + Pos - DragClick;
  76. end;
  77. //---------------------------------------------------------------------------
  78. procedure TGuiForm.DrawText(const DrawPos: TPoint2px);
  79. var
  80.  Font: TAsphyreNativeFont;
  81. begin
  82.  Font:= GuiFonts.Font[FCaptFont];
  83.  if (Font = nil) then Exit;
  84.  Font.Options^:= FCaptOpt;
  85.  Font.TextRect(FCaption, MoveRect(FCaptRect, DrawPos),
  86.   FCaptHAlign, FCaptVAlign, FCaptColor);
  87. end;
  88. //---------------------------------------------------------------------------
  89. procedure TGuiForm.SetFocus();
  90. begin
  91.  inherited;
  92.  BringToFront();
  93. end;
  94. //---------------------------------------------------------------------------
  95. procedure TGuiForm.DoDraw(const DrawPos: TPoint2px);
  96. begin
  97.  if (FCaptFont <> '')and(FCaption <> '') then DrawText(DrawPos);
  98. end;
  99. //---------------------------------------------------------------------------
  100. procedure TGuiForm.DoDescribe();
  101. begin
  102.  inherited;
  103.  Describe(PropBase + $0, 'Caption',    gdtString);
  104.  Describe(PropBase + $1, 'CaptOpt',    gdtFontOpt);
  105.  Describe(PropBase + $2, 'CaptFont',   gdtString);
  106.  Describe(PropBase + $3, 'CaptColor',  gdtColor2);
  107.  Describe(PropBase + $4, 'CaptRect',   gdtRect);
  108.  Describe(PropBase + $5, 'CaptHAlign', gdtHAlign);
  109.  Describe(PropBase + $6, 'CaptVAlign', gdtVAlign);
  110.  Describe(PropBase + $7, 'DragShape',  gdtString);
  111. end;
  112. //---------------------------------------------------------------------------
  113. procedure TGuiForm.WriteProperty(Code: Cardinal; Source: Pointer);
  114. begin
  115.  case Code of
  116.   PropBase + $0:
  117.    FCaption:= PChar(Source);
  118.   PropBase + $1:
  119.    FCaptOpt:= PFontOptions(Source)^;
  120.   PropBase + $2:
  121.    FCaptFont:= PChar(Source);
  122.   PropBase + $3:
  123.    FCaptColor:= PColor2(Source)^;
  124.   PropBase + $4:
  125.    FCaptRect:= PRect(Source)^;
  126.   PropBase + $5:
  127.    FCaptHAlign:= THorizontalAlign(Source^);
  128.   PropBase + $6:
  129.    FCaptVAlign:= TVerticalAlign(Source^);
  130.   PropBase + $7:
  131.    FDragShape:= PChar(Source);
  132.   else inherited WriteProperty(Code, Source);
  133.  end;
  134. end;
  135. //---------------------------------------------------------------------------
  136. end.