1

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 メッセージを送信して進行状況バーを更新するため、私はそれを疑っています。

4

2 に答える 2

-3

@David Heffernan が彼の cooment TTaskDialog で既に指定しているように、進行状況ダイアログとしての意図はありません。

TTaskDialog 内に ProgressBar を表示できるのは事実ですが、ダイアログが表示されている間はこの ProgressBar を更新できません。

TTaskDialog の ProgressBar は、長い操作があり、その操作の最後にユーザーに何らかの決定を行う必要があるため、ユーザーの入力を待ってから続行するシナリオを対象としています。
たとえば、多数のファイルをコピーしてから、既存のファイルを書き換えるためにユーザーの確認を要求します。これで、ユーザーに決定ダイアログを表示しながら、これまでの進捗状況をユーザーに示すことができます。

TTaskDialog の ProgressBar を表示するには、通常の進行状況バーに「tfShowProgressBar」フラグを追加するか、マーク進行状況バーに「tfShowMarqueeProgressBar」フラグを追加します。

ProgressBar の値は、通常の ProgressBar (Min、Max、Position) と同じように設定できますが、ダイアログが表示されている間は更新できません。

編集:ここで使用できるフラグの詳細を読むことができます

http://docwiki.embarcadero.com/Libraries/XE2/en/Vcl.Dialogs.TCustomTaskDialog.Flags

于 2014-11-02T04:32:24.217 に答える