2016-04-14 12 views
0

スプラッシュスクリーンのプロジェクトオプションでpngイメージを使用する代わりに、自分のフォームをスプラッシュスクリーンに使用したいと思う。自分のスプラッシュスクリーンを作成するDelphi 10 seattle

は、私は次のリンクでXE2のためのソリューションを見つけたが、それは、Delphi 10シアトルのために動作しません:https://stackoverflow.com/a/9080804/2728408

私は私のプロジェクト.DPRで試してみたいくつかの例を持っている以下:

例1:

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; 
    Application.ProcessMessages; 
    Sleep(1000); // Whatever to control display time of splash screen 

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

例2:

program Project2; 

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

{$R *.res} 

begin 
    Application.Initialize; 
    Application.CreateForm(TSplashForm, SplashForm); 
    Application.Run; 
    Sleep(1000); 
    Application.Terminate;// Also tried Application.Destroy 
    Application.Initialize; 
    Application.CreateForm(TMainForm, MainForm); 
    Application.Run; 
end. 

例3:

program Project2; 

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

{$R *.res} 

begin 
    Application.Initialize; 
    Application.CreateForm(TSplashForm, SplashForm); 
    Application.Run; 
    Sleep(1000); 
    Application.CreateForm(TMainForm, MainForm); 
    SplashForm.Close; 
    Application.ProcessMessages;  
    Application.Run; 
end. 

誰もが私の問題への解決策を持っていますか?

答えて

7

あなたはコードでそれを行う方法をApplication.Terminare/Inititalseに干渉させてはいけません。

Firemonkeyでは、実行時にアプリケーションのメインフォームを変更できます。だから、最初にあなたのスプラッシュフォームを表示し、あなたが望むすべての仕事をしてからメインフォームに切り替えるべきです。

例えば、これを参照してください。http://www.uweraabe.de/Blog/2016/01/22/a-splash-form-in-firemonkey/

procedure TFormSplash.FormCreate(Sender: TObject); 
begin 
    StartupTimer.Enabled := false; 
    StartupTimer.Interval := 500; // can be changed to improve startup speed in later releases 
end; 

procedure TFormSplash.SplashImagePaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); 
begin 
    StartupTimer.Enabled := not FInitialized; 
end; 

procedure TFormSplash.StartupTimerTimer(Sender: TObject); 
begin 
    StartupTimer.Enabled := false; 
    if not FInitialized then begin 
    FInitialized := true; 
    LoadMainForm; 
    end; 
end; 

procedure TFormSplash.LoadMainForm; 
var 
    form: TForm; 
begin 
    form := TMainForm.Create(Application); 
    form.Show; 
    Application.MainForm := form; 
    Close; 
end; 
関連する問題