当我的应用程序加载他的数据库时,我试图制作一个动画闪屏。
我已经创建了一个闪屏,但我想在数据库转换时使图像从左向右“移动”。现在已经搜索了一段时间,但我所能找到的只是进度条......
这是我的代码:
SplashScreen := TSplashScreen.Create(Application) ;
SplashScreen.Show;
Application.Initialize;
SplashScreen.Update;
SplashScreen.lblStatus.Caption:='Loading...';
SplashScreen.Update;
SplashScreen.lblStatus.Caption:='Updating database...';
SplashScreen.Update;
Application.Initialize;
Application.CreateForm(TfmMain, fmMain);
Sleep(1000);
Application.CreateForm(TfmPrefs, fmPrefs);
Application.CreateForm(TfmCode, fmCode);
Application.CreateForm(TfmEmps, fmEmps);
Application.CreateForm(TfmRest, fmRest);
Application.ShowMainForm:=FALSE;
SplashScreen.Hide;
SplashScreen.Free;
Application.Run;
在我的启动屏幕表单上,我创建了同一图像的 5 个副本,在创建主表单时,我希望图像交替可见和不可见...例如:
while my db loads... begin
Splashscreen.Image1.Visible:=FALSE;
SplashScreen.Update;
Sleep(25);
SplashScreen.Image1.Visible:=FALSE;
SplashScreen.Update;
SplashScreen.Image2.Visible:=TRUE;....
等等!
有什么想法吗?
启动期间在主线程中执行繁重的工作(例如初始化数据库和许多表单)
不适用于闪屏。主线程太忙,无法对 GUI 执行任何操作。将 Sleep 放入代码中将不起作用,因为这将阻止主线程执行任何工作。
这给您留下了两个选择:
在另一个线程中进行数据库初始化。
有时,仅初始化主窗体也是一个不错的选择。
数据库线程可以通过 PostMessage 调用将进度消息发送到启动表单。
在单独的线程中启动启动画面。这有点棘手,因为您可能无法从另一个线程使用 VCL。
并且还必须避免阻塞消息队列。
幸运的是,Peter Below 做了一个很好的例子螺纹启动画面 http://cc.embarcadero.com/Item/20139仅使用 Windows API 调用。
此 SO 线程中有更多信息:当主线程繁忙时在 delphi 中显示闪屏 https://stackoverflow.com/questions/388506/displaying-splash-screen-in-delphi-when-main-thread-is-busy.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)