delphi - Firemonkey组件节省设计时间大小

标签 delphi firemonkey

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

enter image description here

当我编译并运行该程序时,我得到:

enter image description here

为什么?

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

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

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

最佳答案

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

A TControlSize object is used for managing the size of the component. This can be specified through the Size, Width, Height, and PlatformDefault attributes.

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

property Size;
<小时/>

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

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

关于delphi - Firemonkey组件节省设计时间大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52026224/

相关文章:

delphi - dll 中的 FireMonkey 表单,从 VCL 应用程序加载

ios - Firemonkey在iOS中不显示希伯来文字

listview - 如何使用 DynamicAppearance 将项目添加到 TListView?

listview - Delphi中如何同步两个ListView?

delphi - 使用 Devexpress VCL 13.1.2 时出现 Stackoverflow 错误(无限循环)

Delphi VCL使元素 "transparent"点击

delphi - Delphi XE2 Starter Edition 有哪些(未公开的)限制(如果有)?

delphi - 在Delphi中播放视频文件的最佳方式是什么?

delphi - Firemonkey TButton 样式,具有两个不同的文本

delphi - DataSetProvider - DataSet 到 ClientDataSet