在我的应用程序中,我有一个主窗体,能够在数据库中加载一些图像.在加载图像时,我想显示一个带有进度指示器的表单(带有bsNone边框样式).
但是,如果我使用ShowModal显示表单,主表单的执行会停止,所以我不能这样做.
如果我调用Show,则用户可以访问所有其他表单组件,这可能很危险,而照片未完全加载.
我需要得到方法,禁用主窗体上的所有内容,而加载没有完成.
请告诉我,这是怎么可能的.
Rem*_*eau 12
设置MainForm为PopupParent对进度的形式,以便MainForm能永远在进步的形式出现顶部.然后只需MainForm.Enabled := False在进度表单打开MainForm.Enabled := True时进行设置,并在进度表单关闭时进行设置.
procedure TMainForm.ShowProgressForm;
begin
with TProgressForm.Create(nil) do
begin
PopupParent := Self;
OnClose := ProgressFormClose;
Show;
end;
Enabled := False;
end;
procedure TMainForm.ProgressFormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
Enabled := True;
end;
Run Code Online (Sandbox Code Playgroud)
这模拟ShowModal()了用户的行为(在MainForm进度表单打开时不是用户交互的),但没有阻止代码.
首先,直接回答您的问题。
我需要设法禁用主窗体上的所有内容。
设置MainForm.Enabled为False禁用与主窗体关联的窗口。并重新启用将其设置为True。
但是,您的根本问题是您正在GUI线程中执行长时间运行的任务。这总是一个坏主意,解决方法是在一个单独的线程中执行那些长时间运行的任务。
将长时间运行的任务移至单独的线程后,您将发现ShowModal显示进度表正是您所需要的。
| 归档时间: |
|
| 查看次数: |
5880 次 |
| 最近记录: |