ドキュメントが見つからない場合は、次のように記述します。
タスク ダイアログの Hello World
with TTaskDialog.Create(Self) do
try
Caption := 'My Application';
Title := 'Hello World!';
Text := 'I am a TTaskDialog, that is, a wrapper for the Task Dialog introduced ' +
'in the Microsoft Windows Vista operating system. Am I not adorable?';
CommonButtons := [tcbClose];
Execute;
finally
Free;
end;
Caption
はウィンドウのタイトルバーに表示されるテキスト、Title
はヘッダー、Text
はダイアログの本文です。言うまでもなくExecute
、タスク ダイアログが表示され、結果は次のようになります。CommonButtons
( 1~2セクションで宿泊施設に戻ります。)

礼儀正しい市民であること
もちろん、タスク ダイアログ API がない Windows XP で実行している場合、タスク ダイアログはプログラムをクラッシュさせます。視覚テーマが無効になっている場合も機能しません。いずれにせよ、昔ながらの に固執する必要がありMessageBox
ます。したがって、実際のアプリケーションでは、次のことを行う必要があります。
if (Win32MajorVersion >= 6) and ThemeServices.ThemesEnabled then
with TTaskDialog.Create(Self) do
try
Caption := 'My Application';
Title := 'Hello World!';
Text := 'I am a TTaskDialog, that is, a wrapper for the Task Dialog introduced ' +
'in the Microsoft Windows Vista operating system. Am I not adorable?';
CommonButtons := [tcbClose];
Execute;
finally
Free;
end
else
MessageBox(Handle,
'I am an ordinary MessageBox conveying the same message in order to support' +
'older versions of the Microsoft Windows operating system (XP and below).',
'My Application',
MB_ICONINFORMATION or MB_OK);
この記事の残りの部分では、下位互換性の税金が支払われていると仮定し、代わりにタスク ダイアログのみに集中します。
ダイアログの種類。モーダル結果
CommonButtons
プロパティのタイプは であり、次のTTaskDialogCommonButtons
ように定義されます。
TTaskDialogCommonButton = (tcbOk, tcbYes, tcbNo, tcbCancel, tcbRetry, tcbClose);
TTaskDialogCommonButtons = set of TTaskDialogCommonButton;
このプロパティは、ダイアログに表示されるボタンを決定します (後で行うように、手動でボタンを追加しない場合)。ユーザーがこれらのボタンのいずれかをクリックすると、返されるとすぐに対応するTModalResult
値がプロパティに格納されます。プロパティは、ダイアログに表示されるアイコンを決定し、もちろん、ボタンのセットと同様に、ダイアログの性質を反映する必要があります。正式には整数で、、、 、、のいずれかの値に設定できます。ModalResult
Execute
MainIcon
MainIcon
tdiNone
tdiWarning
tdiError
tdiInformation
tdiShield
with TTaskDialog.Create(Self) do
try
Caption := 'My Application';
Title := 'The Process';
Text := 'Do you want to continue even though [...]?';
CommonButtons := [tcbYes, tcbNo];
MainIcon := tdiNone; // There is no tdiQuestion
if Execute then
if ModalResult = mrYes then
beep;
finally
Free;
end;

以下は、残りのアイコンの種類 (それぞれシールド、警告、エラー) のサンプルです。



DefaultButton
最後に、このプロパティを使用して、ダイアログ ボックスの既定のボタンを設定できることを知っておく必要があります。
with TTaskDialog.Create(Self) do
try
Caption := 'My Application';
Title := 'The Process';
Text := 'Do you want to continue even though [...]?';
CommonButtons := [tcbYes, tcbNo];
DefaultButton := tcbNo;
MainIcon := tdiNone;
if Execute then
if ModalResult = mrYes then
beep;
finally
Free;
end;

カスタム ボタン
カスタム ボタンをタスク ダイアログに追加できます。実際、CommonButtons
プロパティを空のセットに設定し、カスタム ボタンに完全に依存することができます (また、そのようなボタンの数に制限はありません)。次の実際の例は、このようなダイアログ ボックスを示しています。
with TTaskDialog.Create(self) do
try
Title := 'Confirm Removal';
Caption := 'Rejbrand BookBase';
Text := Format('Are you sure that you want to remove the book file named "%s"?', [FNameOfBook]);
CommonButtons := [];
with TTaskDialogButtonItem(Buttons.Add) do
begin
Caption := 'Remove';
ModalResult := mrYes;
end;
with TTaskDialogButtonItem(Buttons.Add) do
begin
Caption := 'Keep';
ModalResult := mrNo;
end;
MainIcon := tdiNone;
if Execute then
if ModalResult = mrYes then
DoDelete;
finally
Free;
end

コマンド リンク
従来のプッシュボタンの代わりに、タスク ダイアログ ボタンをコマンド リンクにすることができます。これは、tfUseCommandLinks
フラグを設定することによって実現されます ( 内Flags
)。CommandLinkHint
(ボタンごとの) プロパティも設定できるようになりました。
with TTaskDialog.Create(self) do
try
Title := 'Confirm Removal';
Caption := 'Rejbrand BookBase';
Text := Format('Are you sure that you want to remove the book file named "%s"?', [FNameOfBook]);
CommonButtons := [];
with TTaskDialogButtonItem(Buttons.Add) do
begin
Caption := 'Remove';
CommandLinkHint := 'Remove the book from the catalogue.';
ModalResult := mrYes;
end;
with TTaskDialogButtonItem(Buttons.Add) do
begin
Caption := 'Keep';
CommandLinkHint := 'Keep the book in the catalogue.';
ModalResult := mrNo;
end;
Flags := [tfUseCommandLinks];
MainIcon := tdiNone;
if Execute then
if ModalResult = mrYes then
DoDelete;
finally
Free;
end

このtfAllowDialogCancellation
フラグは、閉じるシステム メニュー項目 (およびタイトルバー ボタン -- 実際、システム メニュー全体を復元します) を復元します。

エンドユーザーに技術的な詳細を投げかけないでください
ExpandedText
プロパティを使用してExpandedButtonCaption
、ユーザーがボタン (後者のプロパティのテキストの左側) をクリックして要求した後にのみ表示されるテキスト (前者) を追加できます。
with TTaskDialog.Create(self) do
try
Title := 'Confirm Removal';
Caption := 'Rejbrand BookBase';
Text := Format('Are you sure that you want to remove the book file named "%s"?', [FNameOfBook]);
CommonButtons := [];
with TTaskDialogButtonItem(Buttons.Add) do
begin
Caption := 'Remove';
CommandLinkHint := 'Remove the book from the catalogue.';
ModalResult := mrYes;
end;
with TTaskDialogButtonItem(Buttons.Add) do
begin
Caption := 'Keep';
CommandLinkHint := 'Keep the book in the catalogue.';
ModalResult := mrNo;
end;
Flags := [tfUseCommandLinks, tfAllowDialogCancellation];
ExpandButtonCaption := 'Technical information';
ExpandedText := 'If you remove the book item from the catalogue, the corresponding *.book file will be removed from the file system.';
MainIcon := tdiNone;
if Execute then
if ModalResult = mrYes then
DoDelete;
finally
Free;
end
下の画像は、ユーザーがボタンをクリックして追加の詳細を表示した後のダイアログを示しています。

フラグを追加するtfExpandFooterArea
と、代わりに追加のテキストがフッターに表示されます。

tfExpandedByDefault
いずれの場合でも、フラグを追加することで、詳細がすでに展開された状態でダイアログを開くことができます。
カスタム アイコン
tfUseHiconMain
フラグTIcon
を使用し、プロパティで使用する を指定することにより、タスク ダイアログで任意のカスタム アイコンを使用できCustomMainIcon
ます。
with TTaskDialog.Create(self) do
try
Caption := 'About Rejbrand BookBase';
Title := 'Rejbrand BookBase';
CommonButtons := [tcbClose];
Text := 'File Version: ' + GetFileVer(Application.ExeName) + #13#10#13#10'Copyright © 2011 Andreas Rejbrand'#13#10#13#10'http://english.rejbrand.se';
Flags := [tfUseHiconMain, tfAllowDialogCancellation];
CustomMainIcon := Application.Icon;
Execute;
finally
Free;
end

ハイパーリンク
フラグを追加するだけで、ダイアログ ( Text
、Footer,
および)で HTML のようなハイパーリンクを使用することもできます。ExpandedText
tfEnableHyperlinks
with TTaskDialog.Create(self) do
try
Caption := 'About Rejbrand BookBase';
Title := 'Rejbrand BookBase';
CommonButtons := [tcbClose];
Text := 'File Version: ' + GetFileVer(Application.ExeName) + #13#10#13#10'Copyright © 2011 Andreas Rejbrand'#13#10#13#10'<a href="http://english.rejbrand.se">http://english.rejbrand.se</a>';
Flags := [tfUseHiconMain, tfAllowDialogCancellation, tfEnableHyperlinks];
CustomMainIcon := Application.Icon;
Execute;
finally
Free;
end

ただし、リンクをクリックしても何も起こらないことに注意してください。リンクのアクションは手動で実装する必要がありますが、これはもちろん良いことです。これを行うには、OnHyperlinkClicked
であるイベントに応答しTNotifyEvent
ます。リンクの URL (つまり、a 要素の href) は、次のURL
public プロパティに格納されTTaskDialog
ます。
procedure TForm1.TaskDialogHyperLinkClicked(Sender: TObject);
begin
if Sender is TTaskDialog then
with Sender as TTaskDialog do
ShellExecute(0, 'open', PChar(URL), nil, nil, SW_SHOWNORMAL);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
with TTaskDialog.Create(self) do
try
Caption := 'About Rejbrand BookBase';
Title := 'Rejbrand BookBase';
CommonButtons := [tcbClose];
Text := 'File Version: ' + GetFileVer(Application.ExeName) + #13#10#13#10'Copyright © 2011 Andreas Rejbrand'#13#10#13#10'<a href="http://english.rejbrand.se">http://english.rejbrand.se</a>';
Flags := [tfUseHiconMain, tfAllowDialogCancellation, tfEnableHyperlinks];
OnHyperlinkClicked := TaskDialogHyperlinkClicked;
CustomMainIcon := Application.Icon;
Execute;
finally
Free;
end
end;
フッター
Footer
およびプロパティを使用FooterIcon
して、フッターを作成できます。プロパティは、icon
プロパティと同じ値を受け入れMainIcon
ます。
with TTaskDialog.Create(self) do
try
Caption := 'My Application';
Title := 'A Question';
Text := 'This is a really tough one...';
CommonButtons := [tcbYes, tcbNo];
MainIcon := tdiNone;
FooterText := 'If you do this, then ...';
FooterIcon := tdiWarning;
Execute;
finally
Free;
end

tfUseHiconFooter
フラグとプロパティを使用するCustomFooterIcon
と、独自のメイン アイコンを選択できるのと同じように、フッターで任意のカスタム アイコンを使用できます。
チェックボックス
文字列プロパティを使用してVerificationText
、タスク ダイアログのフッターにチェックボックスを追加できます。チェックボックスのキャプションはプロパティです。
with TTaskDialog.Create(self) do
try
Caption := 'My Application';
Title := 'A Question';
Text := 'This is a really tough one...';
CommonButtons := [tcbYes, tcbNo];
MainIcon := tdiNone;
VerificationText := 'Remember my choice';
Execute;
finally
Free;
end

tfVerificationFlagChecked
フラグを指定することで、チェックボックスを最初からオンにすることができます。残念ながら、 の VCL 実装のバグ (?) により、 has が返されTTaskDialog
たときにこのフラグを含めExecute
ても、チェックボックスの最終状態が反映されません。チェックボックスを追跡するために、アプリケーションは初期状態を記憶し、各OnVerificationClicked
イベントへの応答として内部フラグを切り替える必要があります。これは、ダイアログのモダリティ中にチェックボックスの状態が変更されるたびにトリガーされます。
ラジオボタン
ラジオ ボタンは、カスタム プッシュ ボタン (またはコマンド リンク ボタン) を追加する方法に似た方法で実装できます。
with TTaskDialog.Create(self) do
try
Caption := 'My Application';
Title := 'A Question';
Text := 'This is a really tough one...';
CommonButtons := [tcbOk, tcbCancel];
MainIcon := tdiNone;
with RadioButtons.Add do
Caption := 'This is one option';
with RadioButtons.Add do
Caption := 'This is another option';
with RadioButtons.Add do
Caption := 'This is a third option';
if Execute then
if ModalResult = mrOk then
ShowMessage(Format('You chose %d.', [RadioButton.Index]));
finally
Free;
end
