创建自己的Splashscreen Delphi 10西雅图

Rem*_*emi 0 delphi mobile splash-screen firemonkey delphi-10-seattle

而不是通过项目选项使用png图像为splashscreen我想使用我自己的表格用于启动画面.

我在以下链接中找到了XE2的解决方案,但它对Delphi 10 Seattle不起作用: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.
Run Code Online (Sandbox Code Playgroud)

例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.
Run Code Online (Sandbox Code Playgroud)

例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.
Run Code Online (Sandbox Code Playgroud)

任何人都可以解决我的问题?

小智 8

你不应该干扰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;
Run Code Online (Sandbox Code Playgroud)