Delphi で TTaskDialog を使用してプログレス バーを表示する例が見つかりません。Embarcadero のドキュメントは、TTaskDialog に関する限り、まったく役に立ちません。
私が見つけた最高のガイド:
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 での私の実験は、次のことを示しています。
- タイマー イベントは、進行状況バーの更新には役立ちません。イベントは発生しますが、タイマー イベントのプログレス バーへの更新は updatewindow 呼び出しでも表示されません。
- ダイアログはモードレスで起動できないため、何らかの方法でタイマー イベントを作成してプログレスバーを更新したとしても、タイマー イベントで作業を進めるにはロジックを大幅に変更する必要があります。
- プログレスバーの位置を表示できる唯一の方法は、実行前に設定することです。その意味では、SilverWarior の回答で説明されているとおりに機能します。ユーザーから次のボタンの応答を取得する必要がある場合にのみ、新しいプログレスバーの位置でループ操作を表示する可能性が高いようです。それが正しい答えのように思えますが、私はこのアップデートへのより多くの応答を待ちます.
PS このテストには Delphi 2007 を使用しました。そのため、タイマーによる進行状況バーの更新が後の IDE で機能するかどうかはわかりません。しかし、D2007 コードでさえ内部的に標準の TaskDialog メッセージを送信して進行状況バーを更新するため、私はそれを疑っています。