2016-04-14 2 views
0

Вместо того, чтобы использовать png-изображения через параметры проекта для заставки, я хочу использовать свою собственную форму для всплывающего экрана.Создайте собственный Splashscreen 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; 
Смежные вопросы