当我的应用加载他的数据库时,我正在尝试制作动画的闪屏。 我已经创建了一个启动画面,但我希望在转换数据库时使图像从左向右“移动”。一直在寻找一段时间,但我能找到的只是进度条......
这是我的代码:
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;
在我的splashscrren表单上,我创建了5个相同图像的副本,并且在创建主表单时,我希望图像是可见的,而不是交替显示... ex:
while my db loads... begin
Splashscreen.Image1.Visible:=FALSE;
SplashScreen.Update;
Sleep(25);
SplashScreen.Image1.Visible:=FALSE;
SplashScreen.Update;
SplashScreen.Image2.Visible:=TRUE;....
等等!
有什么想法吗?
答案 0 :(得分:4)
在启动期间在主线程中做大量工作(比如初始化数据库和许多表单) 飞溅屏幕效果不佳。主线程太忙了,无法对GUI做任何事情。将Sleep放入代码中将不起作用,因为这将阻止主线程完成任何工作。
这为您提供了两个选项:
在另一个线程中进行数据库初始化。 有时也只是初始化主窗体是一个不错的选择。 数据库线程可以通过PostMessage调用将启动消息发送到启动表单。
在单独的主题中启动启动画面。这有点棘手,因为你可能不会使用另一个线程的VCL。 此外,您必须避免阻止消息队列。 幸运的是,Peter Below已经为如何仅使用windows api调用threaded splash screen做了一个很好的例子。
此SO帖子中有更多信息:displaying-splash-screen-in-delphi-when-main-thread-is-busy。