【发布时间】:2014-11-02 03:49:08
【问题描述】:
我找不到在 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
我根据 bummi 的回答对 TTaskDialog 进行的实验显示如下:
- 定时器事件对更新进度条没有帮助。事件被触发,但计时器事件中进度条的任何更新都不会显示,即使调用 updatewindow 也是如此。
- 无法无模式启动对话框,因此即使定时器事件以某种方式更新进度条,逻辑也必须进行相当大的更改才能继续定时器事件中的工作。
- 显示进度条位置的唯一方法是在执行前设置它。从这个意义上说,它的工作原理与 SilverWarior 的答案中描述的完全一样。它的可能用途似乎是,仅当您需要从用户那里获得下一个按钮响应时,才在具有新进度条位置的循环操作中显示。所以这似乎是正确的答案,但我会等待对此更新的更多回复。
附:我在这个测试中使用了 Delphi 2007。所以我不知道计时器的进度条更新是否适用于以后的 IDE。但我对此表示怀疑,因为即使是 D2007 代码内部也会发送标准 TaskDialog 消息来更新进度条。
【问题讨论】:
-
TaskDialog 不是进度对话框。它记录在 msdn 上。
-
@David,你有链接吗?
-
请参阅:msdn.microsoft.com/en-us/library/windows/desktop/…。这说明TaskDialogIndirect可以用来显示进度条。
-
糟糕。如何在评论中添加新行?如果您看到我发布的原始链接,它最后表明进度条是可能的,并且作者计划记录它。
标签: delphi ttaskdialog