戻る ホーム 上へ 進む

MessageDlg のデフォルトボタンを変更したい。

Tip

MessageDlg で表示されるメッセージダイアログは、OK/Yes/Retry ボタンがデフォルトボタンになり、デフォルトのボタンを指定できません。そこで、デフォルトボタンを変更できるメッセージダイアログの表示法を紹介します。

例えば、'はい'/'いいえ' を表示するメッセージダイアログで、'いいえ' をデフォルトボタンにするに以下のようにします。

var dlg: TForm;
    res: Word;
begin
  dlg := CreateMessageDialog('Test', mtInformation, 
                             [mbYes, mbNo]);
  dlg.ActiveControl := TWinControl(dlg.FindComponent('No'));
  res := dlg.ShowModal;
  dlg.Free;

FindComponent で 'Yes', 'No', 'OK', 'Cancel', 'Abort', 'Retry', 'Ignore', 'All', 'Help' を指定すれば、望みのボタンをデフォルトのボタンにすることが出来ます。

解説

MessageDlg は内部で CreateMessageDialog を呼び、フォームを動的に作成してメッセージダイアログを表示します。上のやり方は、MessageDialog のやり方を真似て、ダイアログを表示しているだけです。

CreateMessageDialog の作成するフォームは、アイコンを表示するイメージコントロール、メッセージを表示するラベルコントロールとボタンコントロールからなります。以下にフォームを構成するコントロールの名前(Name プロパティ) とコントロールの型を示します。

Figure 11

CreateMessageDialog が作成するフォーム

フォームの FindComponent メソッドで上記のコンポーネントの名前を指定すれば、メッセージダイアログのフォームにのっている任意のコントロールのオブジェクト参照を 入手できますから、上のようにデフォルトのボタンを変更したり、イメージを差し替えたり、ボタンのキャプションを差し替えたりすることが出来ます。

Delphi 3.0J 以降では上記のボタンに加え2種類ボタンが追加されています。mbYesToAll, mbNoToAll です。これらはもちろん TButtun コンポーネントですが、コンポーネント名は 'YesToAll', 'NoToAll' 、戻り値(Modal Result)は mrYesToAll, mrNoToAll です。なぜかDelphi 5 までのヘルプには載っていません。Delphi 6 のヘルプには明記されています。

戻る ホーム 上へ 進む

inserted by FC2 system