MDIフォーム以外のフォームをメインフォームにするには

解決


minami  2010-08-27 20:23:22  No: 39069

皆さん、こんにちは。
タイトルの通りなのですが、MDIフォーム以外のフォームをメインフォームにするには、どうしたらよいのでしょうか?


エスパー魔美  2010-08-28 05:11:11  No: 39070

┏━━━┓
┃メイン┃があって、サブフォームとして
┗━━━┛
↓のような MDI を使うってこと?
┏━━━━━━┓
┃┌┐┌┐┌┐┃
┃└┘└┘└┘┃
┃  MDI Form  ┃
┗━━━━━━┛


KHE00221  2010-08-28 06:33:24  No: 39071

1.MidChildを作成するときにMainFormがMidFormじゃないと駄目
2.MainFormとはApplication.MainForm
3.MidChild作成直前にMainFormを子フォームに変更すればMidChildは表示できる
4.でも Application.MainForm は ReadOnly

procedure TForm1.Button1Click(Sender: TObject);
begin
    if Assigned(Form2) = False then
    begin
      Form2 := TForm2.Create(Self);
    end;
    Form2.Show;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
    Form: ^TForm;
begin
    //Application.MainForm := Form1;
    Form := @Application.MainForm;
    Form^ := Form1;

    if Assigned(Form2) = True then
    begin
      Form2.Free;
      Form2 := nil;
    end;

end;

procedure TForm2.Button1Click(Sender: TObject);
var
    Form: ^TForm;
begin
    if Assigned(Form3) = False then
    begin

      //Application.MainForm := Form2
      Form := @Application.MainForm;
      Form^ := Form2;

      Form3 := TForm3.Create(Self);
    end;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
var
    Form: ^TForm;
begin

    //Application.MainForm := Form2
    Form := @Application.MainForm;
    Form^ := Form2;

    if Assigned(Form3) = True then
    begin
      Form3.Free;
      Form3 := nil;
    end;

    //メインフォームが自分自身だとメインフォームの終了となってしまい
    //アプリケーションが終了してしまう

    //Application.MainForm := Form1
    Form := @Application.MainForm;
    Form^ := Form1;

end;


minami  2010-08-30 19:36:13  No: 39072

エスパー魔美さん、KHE00221さん書き込みありがとうございます。
返信が遅くなりました、申し訳ありません。

>エスパー魔美さん
仰るとおりの構造のアプリケーションを作成しようとしています。
実は、このMDIアプリケーションは以前作成済みのものであり、
今回、このMDIアプリケーション(MDIフォーム)を上位のメインフォームから
呼び出す(生成する)形に変更しようとしています。

ところが、MDIFormは、メインフォームで無ければならないという制限?の
ために上記構造のアプリケーションを作成できずに困っていました。

>KHE00221さん
提示していただいたコードで希望通りの動作が実現できることを
確認できました。
ありがとうございました。


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

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






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