在几秒钟内显示飞溅图像是空白的

Rol*_*son 2 delphi performance splash-screen

在我的应用程序中,我在连接数据库和其他初始化期间有一个启动图像.它可以很好地显示启动图像,但它是一段时间的空白.所以,

  1. 加载启动图像并显示几分之一秒.
  2. 飞溅图像空白2-3秒.
  3. 飞溅图像会再次显示几秒钟.
  4. 飞溅已关闭.

是否有一个聪明的事情是尽可能快地显示图像并删除空白图像?

DPR文件中的代码:

Application.Initialize;

SplashForm := TSplashForm.Create(Application);
SplashForm.Show;
// Tried Splash.Update here but no difference.

SplashForm.SetPos(15);
// Init code
SplashForm.SetPos(30);

// More Init code
SplashForm.SetPos(100);

SplashForm.Close;

Application.Run;
Run Code Online (Sandbox Code Playgroud)

和飞溅单位:

procedure TSplashForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TSplashForm.FormCreate(Sender: TObject);
begin
  pbLoading.Properties.Text := 'Loading ' + TClientConfig.Instance.AppTitle + '...';
end;

procedure TSplashForm.SetPos(aPos: Integer);
begin
  pbLoading.Position := aPos;
  UpDate;
end;
Run Code Online (Sandbox Code Playgroud)

关心罗兰

Cos*_*und 9

您的SplashForm需要接收WM_PAINT消息才能显示自己,除非消息泵正在工作,否则不会发生这种情况.

Application.ProcessMessagesSplashForm.Show.

  • 实际上Update()将同步执行相同的操作.消息循环已经存在,但VCL线程没有机会绘制已经失效的窗口. (3认同)