0

我有TTaskDialog一个OnButtonClicked事件处理程序,其中执行了一个漫长的过程(几秒钟)。这很好用,但我想向用户表明事情正在发生,而这个漫长的过程正在进行中。我想在最初隐藏的对话框上有一个选框进度条,CommandLink单击它时出现,并在执行冗长的过程时运行 - 我会选择一个可见但在对话框时未启用的进度条是显示并在OnButtonClicked事件中“打开” 。仅包含该tfShowMarqueeProgressBar标志会导致该栏在对话框首次显示时出现并滚动,并且对话框的ProgressBar属性没有EnabledVisible类型属性来控制此行为。

Windows 本身有 TaskDialogs 可以做我想做的事,所以我知道这在理论上是可能的,尽管我意识到围绕本机控件的 VCL 包装器的结构可能会使使用 VCL 对象变得困难或不可能。

TTaskDialog使用VCL 对象可以实现我想要的吗?

4

1 回答 1

2

Windows API 提供消息TDM_NAVIGATE_PAGE以在运行时更改 TaskDialog。您必须将TASKDIALOGCONFIG结构与定义对话框属性的此消息一起传递。在其dwFlags字段中,您可以指定TDF_SHOW_PROGRESS_BAR标志以显示进度条。但这需要大量工作,因为TASKDIALOGCONFIG结构中的其他字段必须与您为 DelphiTTaskDialog组件设置的属性相匹配。

Delphi 在用于显示TaskDialog的函数中创建一个TASKDIALOGCONFIG结构作为局部变量。TCustomTaskDialog.DoExecuteDialogs.pas

于 2020-03-27T17:25:10.423 回答