【发布时间】:2012-07-26 22:57:51
【问题描述】:
可能重复:
Splash Screen Programatically
Show a splash screen while a database connection (that might take a long time) runs
初始化代码(例如加载 INI 文件)的最佳位置是什么?我想首先在屏幕上显示表单,以便用户知道应用程序正在加载,然后才想调用冗长的函数,例如 LoadIniFile 或 IsConnectedToInternet(最后一个真的很慢)。
OnCreate 不好,因为表单还没有准备好,它不会显示在屏幕上。
我这样做我 DPR 但并不总是工作:
program Test;
begin
Application.Initialize;
Application.Title := 'Test app';
Application.CreateForm(TfrmTest, frmTest);
frmTest.Show; <---------------------- won't show
LateInitialize;
Application.Run;
end.
在执行 LateInitialize(4-5 秒)之前,表单不会显示。
procedure LateInitialize;
begin
CursorBussy;
TRY
// all this won't work also. the form won't show
frmTest.Visible:= TRUE;
Application.ProcessMessages;
frmTest.Show;
Application.ProcessMessages;
frmTest.BringToFront;
frmTest.Update;
Application.ProcessMessages;
DoSomethingLengthy; {4-5 seconds}
FINALLY
CursorNotBussy;
END;
end; <--------- Now the form shows.
是的,frmTest 是我唯一的表单(主表单)。
【问题讨论】:
-
那些帖子没有被接受的答案,而且它们完全在同一个主题上。
-
嗯,是的。这是right here - 带有大绿色复选标记和三个赞成票的那个。是的,他们在同一个主题上。你的问题也是如此,这就是为什么我将其标记为duplicate。
-
如果他们完全在同一个主题上,那么他们就是你自己承认的这个问题的完全重复。他们是否接受答案并不重要。 “重复”是问题的一个属性,完全独立于可能存在的任何答案。但是,两个 Ken 链接的问题都已接受答案。如果您有已经在这里提出的问题,并且他们没有适合您的情况的答案,那么有一些方法可以引起人们对这些问题的注意,以便人们回答它们。提出重复的问题只是其中一种方式。
-
我不确定这一点,但我认为如果您将 DPR 切换到 ShowModal 而不是 Show,并在单独的线程中执行剩余的负载,它会像一个魅力一样工作。我记得在我的旧 Delphi 项目中使用过类似的东西,但那是前一段时间......
-
@Ken - 哦...对不起,它确实有一个公认的答案。
标签: delphi