【发布时间】:2019-01-05 23:43:42
【问题描述】:
我有一些 vcl mdi 应用程序,我需要在其中进行一些工作,并在其上方显示另一种非模态形式的进度。因为这个进度表是从某个线程更新的,并且上面有一些按钮(取消操作),所以我使用 application.ProcessMessages 更新进度。在此过程中,我需要禁用所有主要表单控件。我是这样做的:
MainForm.enabled := false;
... do some work here, update progress ...
MainForm.enabled := true;
不过,在此之后,我的主窗体进入了其他不酷的 Windows 应用程序。如果我删除启用/禁用这两条线 - 它应该保持在顶部。
有什么解决办法吗?
【问题讨论】:
-
使用模态表单
-
出于某种原因,我不喜欢使用模态形式。还有其他想法吗?
-
尝试确定原因。然后尝试了解 ShowModal 的作用。然后尝试识别该原因如何适用于两者,即 ShowModal 和禁用主窗体。然后尝试找出两者的区别(提示:VCL 做得很好)。
-
如果您要禁用主表单,那么您也可以使用模态表单表单进度。这样做会正确禁用主窗体。
-
用 ShowModal 显示的模态表单会等待该函数返回到主进程。我的进度表是从许多不同的地方调用的,除了显示进度之外什么都不做。所有工作都在其他地方完成。这就是为什么我不使用模态形式。