我正在创建一个从 TCustomControl 派生的自定义控件,例如:
type
TMyCustomControl = class(TCustomControl)
private
FText: string;
procedure SetText(const Value: string);
protected
procedure Paint; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Text: string read FText write SetText;
end;
请注意,为了保持示例的简短和简单,以上内容是不完整的。
无论如何,在我的控制中,我有一个 Paint 事件,它FText
使用 Canvas.TextOut 显示文本(来自字段)。
当我的组件被添加到 Delphi 表单设计器时(在用户可以对组件进行任何更改之前),我希望 TextOut 显示组件的名称 - TButton、TCheckBox、TPanel 等是带有标题属性的示例。
如果我尝试在构造函数中将组件的名称分配给 FText,它会返回空,例如''
;
constructor TMyCustomControl.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FText := Name; //< empty string
ShowMessage(Name); //< empty message box too
end;
如果我更改FText := Name
它FText := 'Name';
确实将文本输出到我的组件,所以我知道这在实际代码中不是问题,但显然这输出“名称”而不是实际的组件名称,如 MyCustomControl1、MyCustomControl2 等。
所以我的问题是,如何从它的构造函数事件中获取组件的名称?