【发布时间】:2013-01-12 03:09:58
【问题描述】:
我正在创建一个从 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 事件,它使用 Canvas.TextOut 显示文本(来自 FText 字段)。
当我的组件被添加到 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 等。
所以我的问题是,如何从其构造函数事件中获取组件的名称?
【问题讨论】: