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.