お世話になっております。
早速質問なんですが、よろしくお願いします。
例えば、Form1上にPanel1を貼り付け、Panel1上にGroupBox1を貼り付け、GroupBox1内にButton1を貼り付けたとします。
Button1のクリックイベントで、Button1が属するForm1を自動判別するには、どうすればよいのでしょうか?
なお、Buttonの配置は場合によって変化します。
よろしくお願いいたします。
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Caption := Button1.Owner.Name;
end;
jokさん、ありがとうございます。
教えていただいたサンプルソースで、Formの名前を取得できる事は確認できました。
実際にやりたかった事は、Form1からForm2を表示する際に、Form1の表示位置からOffset分ずらして表示したかったのでした。
const
intOffset: integer = 20;
procedure TForm1.Button1Click(Sender: TObject);
begin
//ShowMessage((Sender as TButton).Owner.Name); <-確認済み
Form2 := TForm2.Create(Self);
try
with Form2 do
begin
Position := poDesigned;
Top := TForm((Sender as TButton).Owner).Top + intOffset;
Left:= TForm((Sender as TButton).Owner).Left+ intOffset;
ShowModal;
end;
finally
Form2.Free;
end;
end;
> Form1からForm2を表示する際に、Form1の表示位置からOffset分ずらして表示したかったのでした。
Button1Click イベントハンドラは TForm1 のメソッドですから、そのインスタンス
を参照するときは self が使えますよ。こんな感じです。
const
intOffset: integer = 50;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2 := TForm2.Create(Application);
try
with Form2 do
begin
Position := poDesigned;
Top := self.Top + intOffset;
Left:= self.Left+ intOffset;
ShowModal;
end;
finally
Form2.Free;
end;
end;
追加情報ありがとうございます。
ご提示していただいたコードの方が汎用性がありますね。
大変勉強になります。
ありがとうございました。
ツイート | ![]() |