Firemonkey组件可节省设计时间

时间:2018-08-26 12:23:06

标签: delphi firemonkey

关于this问题,我已经能够创建一个FMX组件,该组件是一个带有黑色边框的白色矩形,可以使用鼠标的光标在其中绘制该边框(如MS Paint)。

enter image description here

当我编译并运行程序时,我得到以下信息:

enter image description here

为什么?

例如,如果我设置Align属性,它将起作用(客户端将其与客户端对齐)。如果我将组件与Center对齐,则它位于中心,但尺寸较小(如图所示)。

似乎它没有“保存”我在对象检查器上设置的宽度和高度。我的组件具有以下相关代码:

type
  Test = class(TControl)
  strict private
    FLineFill: TStrokeBrush;
  protected
    procedure Paint; override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Align;
property Anchors;
property ClipChildren;
property ClipParent;
property Cursor;
property Enabled;
property Locked;
property Height;
property HitTest;
property Opacity;
property Margins;
property Position;
property Visible;
property Width;
property OnClick;
property OnDblClick;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnMouseWheel;
property OnMouseEnter;
property OnMouseLeave;
property OnPainting;
property OnPaint;
property OnResize;
property OnResized;
end;

这是实现:

constructor Test.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FLineFill := TStrokeBrush.Create(TBrushKind.Solid, $FF222222);
  //more...
end;

destructor Test.Destroy;
begin
  FLineFill.Free;
  inherited;
end;

procedure Test.Paint;
var
begin
  Canvas.Stroke.Assign(FLineFill);
  Canvas.ClearRect(ClipRect, TAlphaColorRec.White);

  Canvas.Stroke.Color := TAlphaColorRec.Black;
  //more code...
end;

我看了一下TPlotGrid的源代码,它是一个简单的组件,它基本上完成了我正在做的事情。我是否需要在Paint事件中设置更多内容?

1 个答案:

答案 0 :(得分:2)

您需要添加Size属性,因为它是照顾组件尺寸的属性。它返回TControlSize,它完全满足您的需求。来自文档:

  

TControlSize对象用于管理组件的大小。   可以通过大小,宽度,高度和   PlatformDefault属性。

只需在发布的部分中添加以下代码:

property Size;

如果您查看其实现,就会发现

property Width: Single read GetWidth write SetWidth stored StoreWidthHeight;
property Height: Single read GetHeight write SetHeight stored StoreWidthHeight;