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;
上記は、例を短く単純にするために不完全であることに注意してください。
とにかく、私のコントロールには、FText
Canvas.TextOutを使用して(フィールドからの)テキストを表示するPaintイベントがあります。
コンポーネントが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';
と、テキストがコンポーネントに出力されるため、実際のコード内で問題がないことはわかりますが、明らかにこれは「Name」を出力し、MyCustomControl1、MyCustomControl2などの実際のコンポーネント名は出力しません。
だから私の質問は、コンストラクターイベントからコンポーネントの名前をどのように取得できるかということです。