子フォームから親フォームに関連付けするには?

解決


ZOIDS  2003-10-20 13:18:23  No: 5305

子フォームから親フォームの関連付けしたいんですけど、うまくいきません。。。
procedure TMDIChild.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
       TMainForm(ActiveMDIChild).StatusBar.Panels[2].text := 'MousePoint(' + IntToStr(X) + ',' + IntToStr(Y) + ')';
end;
こんな感じでやったんですけどダメでした。


Halbow  2003-10-20 17:20:51  No: 5306

Halbow です。

> TMainForm(ActiveMDIChild).StatusBar.Panels[2].text := 

TMainForm というクラスはないですよね。また、ActiveMDIChild は
子フォームなので、キャストしても親フォームにアクセスできません。

uses
  Unit1;//親フォームのユニット

procedure TForm2.Button1Click(Sender: TObject);
begin
  TForm1(Application.MainForm).Caption := 'Hello!';
end;

のように、Application.MainForm を実際の親フォームの型でキャスト
します。


masayan  2003-10-20 21:36:57  No: 5307

メインフォームがTForm1だとした場合...

procedure TMDIChild.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
       TForm1(ActiveMDIChild.Owner).StatusBar.Panels[2].text := 'MousePoint(' + IntToStr(X) + ',' + IntToStr(Y) + ')';
end;

ってな感じでどうでしょうか?
TFormのOwnerプロパティは、親フォームを示します。親フォームが常に特定のフォーム(メインフォームなど)なのであれば、この方法で大丈夫だと思います。
※.机上コーディングなので間違っていたらごめんなさい。


Halbow  2003-10-20 23:30:19  No: 5308

Halbow です。

> TFormのOwnerプロパティは、親フォームを示します。

そうですか?  普通につくると、Owner は Application だと思いますが。
自動作成された MDIChildForm で

procedure TForm2.Button1Click(Sender: TObject);
begin
  Caption := Owner.ClassName;
end;

では、TApplication を表示します。Application.CreateForm() では、
必ずオーナーは Application になります。コンストラクタで特に指定
するとどのフォームも Owner になれます。普通のMDIアプリでは
MainForm が親フォームになるので、

TForm1(Application.MainForm)

の方がいいと思います。


masayan  2003-10-21 00:08:44  No: 5309

>そうですか?  普通につくると、Owner は Application だと思いますが。

自動生成であれば、Halbowさんの言われる通りです。失礼しました。
MDIということで同じフォームで異なるドキュメントを幾つも表示/編集するタイプかなと思ったもので...


Halbow  2003-10-21 03:32:46  No: 5310

Halbow です。

> MDIということで同じフォームで異なるドキュメントを幾つも表示/編集するタイプかなと思ったもので...

あ、そうですね。前にも書きましたが、コンストラクタで Owner を親フォームに
しておけば、もちろん masayan さんのコードでも大丈夫ですよね。


ZOIDS  2003-10-29 02:20:35  No: 5311

遅くなりましたが、勉強になりました。
ありがとうございます。


ZOIDS  2003-10-29 02:24:35  No: 5312

Halbowさんmasayanさんありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加