Delphi TTaskDialog показать / скрыть или запустить / остановить индикатор выполнения

У меня есть TTaskDialog который имеет OnButtonClickedобработчик событий, в котором выполняется длительный процесс (несколько секунд). Это нормально работает, но я хотел бы указать пользователю, что что-то происходит, пока идет этот длительный процесс. Я хотел бы, чтобы в диалоговом окне, которое изначально было скрыто, отображалась шкала выполнения, когдаCommandLink нажимается и выполняется, пока выполняется длительный процесс - я бы согласился на индикатор выполнения, который виден, но не включен, когда отображается диалоговое окно, и "включен" в OnButtonClickedсобытие. Просто включаяtfShowMarqueeProgressBar заставляет полоску появляться и прокручиваться при первом отображении диалогового окна, а ProgressBar свойство диалога не имеет Enabled или Visible свойства type для управления этим поведением.

В самой Windows есть TaskDialogs, которые делают то, что я хочу, поэтому я знаю, что это теоретически возможно, хотя я понимаю, что структура оболочки VCL вокруг собственного элемента управления может затруднить или сделать невозможным использование объекта VCL.

Возможно ли то, что я хочу, используя TTaskDialog Объект VCL?

1 ответ

Windows API предоставляет сообщение TDM_NAVIGATE_PAGE для изменения TaskDialog во время выполнения. Вам нужно будет передать структуру TASKDIALOGCONFIG вместе с этим сообщением, которое определяет свойства диалога. В своемdwFlags поле вы можете указать TDF_SHOW_PROGRESS_BARфлаг, чтобы показать индикатор выполнения. Но это требует большой работы, так как другие поля вTASKDIALOGCONFIG структура должна соответствовать свойствам, которые вы установили для Delphi TTaskDialog составная часть.

Delphi создает TASKDIALOGCONFIG структура как локальная переменная в функции TCustomTaskDialog.DoExecute в Dialogs.pas который используется для отображения TaskDialog.

Другие вопросы по тегам