皆さん、こんにちは。
タイトルの通りなのですが、MDIフォーム以外のフォームをメインフォームにするには、どうしたらよいのでしょうか?
┏━━━┓
┃メイン┃があって、サブフォームとして
┗━━━┛
↓のような MDI を使うってこと?
┏━━━━━━┓
┃┌┐┌┐┌┐┃
┃└┘└┘└┘┃
┃ MDI Form ┃
┗━━━━━━┛
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;
エスパー魔美さん、KHE00221さん書き込みありがとうございます。
返信が遅くなりました、申し訳ありません。
>エスパー魔美さん
仰るとおりの構造のアプリケーションを作成しようとしています。
実は、このMDIアプリケーションは以前作成済みのものであり、
今回、このMDIアプリケーション(MDIフォーム)を上位のメインフォームから
呼び出す(生成する)形に変更しようとしています。
ところが、MDIFormは、メインフォームで無ければならないという制限?の
ために上記構造のアプリケーションを作成できずに困っていました。
>KHE00221さん
提示していただいたコードで希望通りの動作が実現できることを
確認できました。
ありがとうございました。
ツイート | ![]() |