Firemonkey 组件节省设计时间大小

Posted

技术标签:

【中文标题】Firemonkey 组件节省设计时间大小【英文标题】:Firemonkey component save design time size 【发布时间】:2019-02-01 05:15:50 【问题描述】:

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

当我编译并运行程序时,我得到了这个:

为什么?

如果我设置 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 事件中设置更多内容吗?

【问题讨论】:

您说您的控件发布了所有属性,但您没有将它们全部包含在您的问题中。不可能说缺少什么。 我已经包含了所有属性 您似乎缺少 FMX 控件所需的 published property Size; 【参考方案1】:

您需要添加Size 属性,因为它负责处理组件的尺寸。它返回TControlSize,这正是您所需要的。来自文档:

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

只需在已发布部分添加此代码:

property Size;

如果你查看它的实现,你会发现

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

【讨论】:

以上是关于Firemonkey 组件节省设计时间大小的主要内容,如果未能解决你的问题,请参考以下文章

使用 FireMonkey 构建优秀专业 Android 应用的10点提示

Firemonkey:如何定义一个包含另一个组件的组件?

在 Firemonkey 组件中旋转时如何避免重复图像?

Delphi FireMonkey 存储来自组件的信息

Firemonkey 调整 MainMenu 字型大小 (D10)

[函數] Firemonkey Android 取得系统参数设定的字型大小