我找不到在 Delphi 中使用TTaskDialog显示进度条的例子。就TTaskDialog而言,Embarcadero文档根本没有帮助。
我找到的最好的向导:
http://specials.rejbrand.se/TTaskDialog
不包含任何显示进度条的示例。
我可以在 Delphi 源代码中看到进度条的各种标志,但为了尝试它们,我不知道如何以非模态显示任务对话框来试验这些标志。
**更新:**我得出的结论是,任务对话框不能以传统的方式使用,即使用非模态进度对话框。以下是我通常对长时间运行的操作所做的:
show progress dialog modeless
start a loop to do work
... update progress bar in above dialog (often on a modulo count)
... check for cancel and abort if needed
remove progress dialog
我在TTaskDialog上的实验基于bummi的答案,结果如下:
- 计时器事件对进度条的更新没有帮助。该事件被激发,但即使使用updatewindow调用,对timer事件中进度条的任何更新也不会显示。
- 对话框不能以非模态方式启动,因此即使定时器事件以某种方式更新进度条,逻辑也必须进行相当大的更改以继续定时器事件中的工作。
- 显示进度条位置的唯一方法是在执行前设置它。从这个意义上说,它的工作原理与SilverWarior的回答完全相同。它可能的用途似乎是,在循环操作中显示一个新的进度条位置,只有当你需要从用户那里得到下一步按钮的响应时。所以这似乎是正确的答案,但我会等待更多的回应,这一更新。
P.S.我使用 Delphi 2007进行了这个测试。所以我不知道从计时器更新的进度条是否适用于以后的IDE。但我对此表示怀疑,因为即使是D2007代码也会在内部发送标准的TaskDialog消息来更新进度条。
1条答案
按热度按时间njthzxwz1#
如果您将
tfCallbackTimer
添加到Flags
,则OnTimer
- Event将每秒触发5次。由于对话框被阻塞,因此用例可能具有线程,该线程复制带有进度保存属性的文件。
在计时器中,您可以反映当前的进度。