掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
自身を含む複数フォームの生成と破棄 (ID:22962)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
設定によって複数のフォームを切り替えるようなアプリケーションを 考えているのですが、下記のような条件を満たすような良い方法が なかなか思いつきません。 【条件】 1.様々な種類のフォームが複数存在する 2.最初にどのフォームを表示するのかは INIファイルが決定する。 3.各フォームからINIファイルを書き換えた後は条件2で決まったフォームが 表示される。 4.上記の条件で表示するフォームが自分自身であってもFormDestroyと FormCreateによって再構築を行う。 非表示フォームが各フォームを管理するSDI形式を考えてみたのですが 条件3が来るまで待機させる方法がわからず、こんな方法で組んでみました。 この方法だと各フォームの管理が1カ所で行え フォームの切替や自身のフォームの破棄と生成もうまくいくのですが なにせApplication.Runすら使用していない不安な内容 この方法で問題が起きないのか?またこれ以外にもっと良い方法が 無いのか教えてください。 【作成内容】 Form1とForm2、データモジュールを作成 フォームの終了や別フォーム表示の指示はデータモジュールの プロパティを経由している(単純なクラスでもいいのかも) 各フォームのFormCreateにはDataModule1.FormStatus1や2に 自身のフォームが存在することを表す Trueを FormDestroyには False を入れて通知 各フォームから DataModule1.CtrlForm := 1 Close; とすれば別フォームが表示され、自分自身は破棄など プロジェクトソースに以下の処理を追加 ----------------------------------------------------------------------- program FormChangeProject; uses Forms, Form1Unit in 'Form1Unit.pas' {Form1}, Form2Unit in 'Form2Unit.pas' {Form2}, DataModuleUnit in 'DataModuleUnit.pas' {DataModule1: TDataModule}; {$R *.RES} var FForm2 : TForm2; FForm1 : TForm1; begin Application.Initialize; Application.CreateForm(TDataModule1, DataModule1); DataModule1.CtrlForm = 1; while True do begin if DataModule1.CtrlForm = 2 then begin FForm2 := TForm2.Create(Application); FForm2.Show; DataModule1.CtrlForm := 0; end; if DataModule1.CtrlForm = 1 then begin FForm1 := TForm1.Create(Application); FForm1.Show; DataModule1.CtrlForm := 0; end; if (not DataModule1.FormStatus1) and (not DataModule1.FormStatus2) then break; Application.HandleMessage; end; //Application.Run; end. -----------------------------------------------------------------------
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.