我找不到在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实验显示如下:
P.S。我使用Delphi 2007进行此测试。因此,我不知道进度条是否从计时器更新为后来的IDE工作。但我对此表示怀疑,因为即使是D2007代码也会在内部发送标准的TaskDialog消息以更新进度条。
答案 0 :(得分:3)
如果您将tfCallbackTimer
添加到Flags
OnTimer
- 事件将每秒触发5次。
由于对话框是阻塞的,因此用例可能是一个线程正在复制具有进度的胎面保存属性的文件
在计时器内,您可以反映当前的进度。
begin
TaskDialog1.ProgressBar.Min := 0;
TaskDialog1.ProgressBar.Max := 100;
TaskDialog1.Execute;
end;
procedure TMyForm.TaskDialog1Timer(Sender: TObject; TickCount: Cardinal; var Reset: Boolean);
begin
// TaskDialog1.ProgressBar.Position := MyThread.CurrentProgressPercent;
// Demo
TaskDialog1.ProgressBar.Position := TaskDialog1.ProgressBar.Position + 1;
end;
答案 1 :(得分:-3)
正如@David Heffernan已经在他的合作中指明的那样,TTaskDialog并不打算成为进步对话。
确实可以在TTaskDialog中显示ProgressBar,但是在显示对话框时无法更新此ProgressBar。
TTaskDialog的ProgressBar更适用于您具有长时间操作的情况,并且在该操作的最后阶段,您需要用户做出一些决定,以便您在继续之前等待他的输入。
例如,复制多个文件,然后请求用户确认重写有效文件。现在,您仍然可以向用户显示目前为止向他显示决策对话框的进度。
为了显示TTaskDialog的ProgressBar,为正常进度条添加“tfShowProgressBar”标志,或为marque progressbar添加“tfShowMarqueeProgressBar”标志。
您可以像任何普通的ProgressBar(Min,Max,Position)一样设置ProgressBar值,但在显示对话框时无法更新这些值。
编辑:您可以阅读有关可在此处使用的可用标志的更多信息
http://docwiki.embarcadero.com/Libraries/XE2/en/Vcl.Dialogs.TCustomTaskDialog.Flags