Delphi Tips 
-----------------------------

0295  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/12/22 濱野 rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/12/22 濱野 編集
フォームを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 }
参照: <フォーム>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp