2012-01-31 14 views
3

FMXプログラムの起動中にスプラッシュスクリーンを作成する必要があります。FireMonkeyでスプラッシュスクリーンを作成するには?

VCLから次のコードは、作品のもうしません:

SplashScreen := TSplashScreen.Create(Application); 
SplashScreen.Show; 
Application.Initialize; 
SplashScreen.Update; //No such function in FMX 
Application.Run; 

問題がApplication.Runが実行されるまで、彼らが再描画するために、いくつかのFMXの魔法を使用するとFMXの形で、再描画/作成されていないということです。私はOSXのサポートが必要なので、VCLスプラッシュスクリーンの使用は選択肢ではありません。

Delphi XE2 FireMonkeyプロジェクトでスプラッシュスクリーンを作成するにはどうすればよいですか?

+0

@RRUZ:XE2とFireMonkeyに固有のものであるため、一般的な「delphi」タグが質問にどのように適用されているか分かりません。 – Kromster

+0

Rodrigoは、Delphiに関連するすべての質問には一般の「delphi」タグが必要であると考えているため、より多くの人々がそれを見ることができます。 :)私は質問が非常に具体的であったときにそれを前に削除しました。そして彼はそれを戻しました。私はついに彼と反対し続けました。 ;) –

+3

@Krom、@KenWhiteはなぜあなたの質問に 'delphi'とタグを付けたのかを説明しています。また、 'firemonkey'タグには49人のフォロワーと' delphi-xe2'タグがありましたが、 'delphi'タグには1839があるので、' delphi'タグを使用すると、デルファイからの回答を得る機会が増えます開発者。 – RRUZ

答えて

4

これは動作します - 違いはApplicationはスプラッシュウィンドウのOwnerなされていないということで、スプラッシュウィンドウが作成され、表示される前に、そのApplication.Initializeが呼び出されますが、メインフォームがスプラッシュ後まで作成されていませんウィンドウが表示されます。

program Project2; 

uses 
    FMX.Forms, 
    System.SysUtils, 
    Unit1 in 'Unit1.pas' {MainForm}, 
    Unit2 in 'Unit2.pas' {SplashForm}; 

{$R *.res} 

begin 
    Application.Initialize; 
    SplashForm := TSplashForm.Create(nil); 
    SplashForm.Show; 
    Sleep(1000); // Whatever to control display time of splash screen 

    Application.CreateForm(TMainForm, MainForm); 
    SplashForm.Close; 
    SplashForm.Free; 
    Application.Run; 
end. 
+1

SysUtilsではクロスプラットフォームの 'Sleep'が実装されています。 – Kromster

+0

@Krom:ありがとう!私は覚えていない(そして多くの時間を費やしていなかった)。投稿した回答をテストしたときにXE2 Update 3を使用したので、何を言いたいのか分かりません。 –

+0

奇妙な。クリーンなプロジェクトでは正常に動作します。回答は受け入れられ、私は一晩デバッグするつもりです。ありがとう! – Kromster

0

別個のTLayoutを追加して、必要に応じて入力することもできます。そうするために;

  • スプラッシュレイアウトは、フォームを直接所有者として持つ必要があります。
  • フォームの残りの部分はその背後にある必要があります。フォームの透明性を有効にする必要があります。
  • FormCreateイベントでは、他のフォームコントロールの必要な隠蔽を行うためのコードを追加することができます。これらのコントロールは、別々の単一またはレイアウトセットに追加して非表示にすると簡単に行うことができます。
  • また、スプラッシュレイアウトを隠し、必要に応じて残りのフォームを表示するためのトリガーイベントが必要です。

注:このアプローチは、しかし、スプラッシュ画面上の標準フォームのボタンは表示されません。

私はこれを何度もやっており、別のフォームを作ってメインフォームと一緒に扱うよりも静かであることが分かりました。

関連する問題