我在FormMain中打开了Form2.ShowModal。 在进行一些数据库访问时,我希望应用程序显示完整的Form2(这与要显示的新数据无关)。 但是,在执行FormShow时,只显示外部边框和一些损坏的部分,一些损坏的部分会透过FormMain显示出来,这很丑陋。
我一直没有找到一种方法来立即重新绘制Delphi表单,然后执行耗时的MyOpenData过程。 在完成MyOpenData后一切都正常。
procedure TForm2.FormShow(Sender: TObject);
begin
Invalidate;
Refresh;
MyOpenData; { needs some seconds of database accesses }
end;
替代方案:
procedure TForm2.FormShow(Sender: TObject);
begin
Invalidate;
Refresh;
SendMessage(Handle, wm_paint, 0, 0);
PostMessage(Handle, wm_OpenMyData, 0, 0); { executes well, but no solution)
end;
这个也不起作用。我原以为 SendMessage() 等待消息完成。但是在 MyOpenData 之前没有进行任何绘图。直到过程完成前,窗体总是看起来有问题。除此之外,程序的例行程序都执行得很好。我尝试了所有这些命令的组合或单独使用。
我错过了什么?谢谢您提前!
如何启动需要在打开表单时运行的耗时程序?
(Delphi XE7 在 Windows 7 64 位上)
class(TThread)
在后台准备数据,而不会打断用户与表单的交互。我已经很多年没有做 Delphi 了,所以我就让你自己去做吧。这里有一些例子:https://dev59.com/3nA75IYBdhLWcg3wJFcL#3456816 - Havenard