フォームを1つずつ表示する
|
TFormの配列をスタック風に管理し、呼び出し元は
呼び出されたフォームを表示後、非表示にします。
これでフォームが1つずつ表示されるようになります。
前のフォームへの復帰も再表示するだけなので速いです。
この手続きにちょっと手を加える事で位置やサイズを
揃える事も出来ます。
unit FmDsp;
interface
uses
Windows, Messages, SysUtils, Classes, Forms;
procedure SetMainForm(MainForm: TForm);
procedure ShowNextForm(FormClass: TFormClass; Form: TForm);
procedure ShowPrevForm;
implementation
type
TShowType = (stWithCreate, stShowOnly);
TFormRec = record
Form: TForm;
ShowType: TShowType;
end;
var
FormAry: array[0..100] of TFormRec;
FormTop: Integer = 0;
{ 最上階のフォームの登録、プログラムのスタートアップ時
に一回だけ呼び出す。 }
procedure SetMainForm(MainForm: TForm);
begin
FormAry[0].Form := MainForm;
FormAry[0].ShowType := stShowOnly;
FormTop := 0;
end;
{ 次のフォームの表示
FormClass: フォームのクラス名
Form: フォーム変数名、フォームが自動作成でない場合 nilを指定 }
procedure ShowNextForm(FormClass: TFormClass; Form: TForm);
begin
Inc(FormTop);
if Form = nil then
begin
FormAry[FormTop].Form := FormClass.Create(Application);
FormAry[FormTop].ShowType := stWithCreate;
end else
begin
FormAry[FormTop].Form := Form;
FormAry[FormTop].ShowType := stShowOnly;
end;
FormAry[FormTop].Form.Show;
FormAry[FormTop - 1].Form.Hide;
end;
{ 前のフォームの表示、呼び出された側のフォームのCloseイベントで呼び出し }
procedure ShowPrevForm();
begin
FormAry[FormTop - 1].Form.Show;
if FormAry[FormTop].ShowType = stWithCreate then
FormAry[FormTop].Form.Release
else
FormAry[FormTop].Form.Hide;
Dec(FormTop);
end;
end. { unit FmDsp }
|
|