アプリ起動時に複数のフォームを表示する方法がわかりません。
しかもサブフォームをメインフォームより手前に表示したいのです。
方法をお知りの方、教えてください。
お願いします。
Visible=TrueでしかもStayOnTop
"メインフォームより隣"ですよ、StayOnTopでは常に手前表示してしまいます。
全面表示したいCreateParamsをオーバーライドし、
以下のように書いてみたらどうでしょうか?
procedure ModalForm.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent := Application.MainForm.Handle;
end;
"隣"じゃない、"手前"(^^ゞ
起動画面でタイトルロゴを表示するならstayontopにしてタイマーのontimerでself.free;にすれば良い。
ツールウインドウでもstayontopでOK
起動時に何かを選択するダイアログを表示するならメインフォームのEnableをFalseダイアログのoncloseでTrueにすればOK
> 起動画面でタイトルロゴを表示するならstayontopにして
スプラッシュを常に手前にすると、起動処理中エラーが起こっ
たときに対処に困りますよ。まあ、スプラッシュにそれを表示するんならいいですが。
それからフォームの解放にはReleaseをつかってください。Freeは使うべきではないとヘルプにあります。スプラッシュなら平気とも、言ってられませんからね。
皆さんありがとうございます。
サブフォームの事はわかりましたが、
起動時に複数のフォームを開くには
どうしたらいいでしょうか。
メインフォームは勝手に表示されるけど。
MainForm.formCreateのなかでshowかなにかで
呼び出せばいいのでしょうか。
MainForm の FormCreate はフォームが生成された時に通ります。
フォームは順に生成されるので、FormCreate を通った時には、他のフォームはまだ生成されていない場合があります。
FormShow で処理をした方が安全だと思います。
そのフォームがアプリケーション終了時までずっと表示するのならば、
プロジェクトオプションの"自動生成するフォーム"に追加して、
最初にShowするのがいいでしょう。
一回しか表示しない、スプラッシュスクリーンのようなものだったら、
自動生成するフォームの一覧からはずし、コードで
SplashScreen := TSplashScreen.Create(Self); // 生成
SplashScreen.Show; // 表示
SplashScreen.Update; // 表示しただけでは描画されないので。更新
{ なにか時間の要りそうな処理 }
SplashScreen.Release; // フォームの解放
というふうにすればいいです。
(上のような方法もできなくはないですが、非表示の時間もずっとフォームオブジェクトが存在するので、メモリの無駄です)
Visible=Trueで良いのでは?
ツイート | ![]() |