Performance 在几秒钟内,显示飞溅图像是空白的
在我的应用程序中,在连接到数据库和其他初始化过程中,我有一个splash映像。它可以很好地显示飞溅图像,但在那里它是空白的一段时间。 所以Performance 在几秒钟内,显示飞溅图像是空白的,performance,delphi,splash-screen,Performance,Delphi,Splash Screen,在我的应用程序中,在连接到数据库和其他初始化过程中,我有一个splash映像。它可以很好地显示飞溅图像,但在那里它是空白的一段时间。 所以 加载飞溅图像并在几分之一秒的时间内显示 飞溅图像在2-3秒内变为空白 飞溅图像在几秒钟后再次显示 喷溅关闭 P>是否有一个聪明的东西,就是尽可能快地显示图像,去除空白图像? DPR文件中的代码: Application.Initialize; SplashForm := TSplashForm.Create(Application); SplashFor
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;
和飞溅装置:
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;
问候
罗兰您的SplashForm需要接收WM_PAINT消息才能显示自己,除非消息泵正在工作,否则这不会发生
将
Application.ProcessMessages
放在SplashForm.Show
之后可能不是很明显,但是您的代码显示启动屏幕,然后立即关闭它。如果你把写着“SplashForm.Close”的那行注释掉会发生什么?我想我现在明白了。我的应用程序使用粗体,加载模型需要几秒钟。在这段时间内,飞溅物是空白的。我设法减少了一点时间,但我不想用Application.ProcessMessages将粗体SetFromModel的内部内容弄乱
我觉得这样可以。但是谢谢你的评论。它为我指明了正确的方向
/罗兰实际上Update()将同步执行相同的操作。此时消息循环已经存在,但VCL线程没有机会绘制已经无效的窗口。谢谢。听起来不错,但没什么区别。似乎有些事情需要很长时间才能清除splashimage。ProcessMessages()不会等待。HandleMessage()does@Worm
Application.ProcessMessages
是同步的。它将队列抽到空,然后返回。@Roland,您是否在SetPos方法之后(或在SetPos方法中)添加了ProcessMessages
?我已将代码简化了一点。初始化代码后面有一个对DatamoduleCreate的调用。这将加载模型并需要一些时间。我想在这一切结束后关闭飞溅。@Roland您取出的代码是让我们能够解决问题的关键部分!!