Delphi TTaskDialog показать / скрыть или запустить / остановить индикатор хода выполнения - PullRequest
0 голосов
/ 27 марта 2020

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

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

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

1 Ответ

2 голосов
/ 27 марта 2020

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...