【发布时间】:2017-07-10 04:24:21
【问题描述】:
我有一个在启动时恢复窗口的应用程序,但这会在创建和定位每个窗口时导致潜在的闪烁。
为了解决这个问题,我将初始屏幕(拉伸到屏幕的全尺寸)设置为“StayOnTop”,并在 OnShow 事件之后使用 TTask 将其关闭。问题是偶尔启动画面会卡住。如果您单击按钮应该在的位置,它们会重新绘制并正确显示。 我试图“使”所有 WinControls “无效”,但这个问题仍然出现。 我从来没有在调试器中看到过这个问题。
是否有任何其他人可以建议强制重新绘制屏幕的其他技巧?
这是我关闭启动画面的代码 - 这是在主窗体的 OnShow 中。
aTask := TTask.Create(procedure()
begin
Sleep(800);
TThread.Synchronize(nil, procedure()
begin
fSplash.Close;
FreeAndNil(fSplash);
DoInvalidate(self);
end);
end);
aTask.Start;
这是我试图使一切无效的尝试......
Procedure DoInvalidate( aWinControl: TWInControl );
var
i: Integer;
ctrl: TControl;
begin
for i:= 0 to aWinControl.Controlcount-1 do
begin
ctrl:= aWinControl.Controls[i];
if ctrl Is TWinControl then
DoInvalidate( TWincontrol( ctrl ));
end;
aWinControl.Invalidate;
end;
马丁
【问题讨论】:
-
您是否尝试使用简单的 TTimer 而不是 TTask?您是否尝试评论 FreeAndNil(fSplash) 并检查这是否改变了什么?
标签: delphi vcl delphi-10.1-berlin