MessageDlg のデフォルトボタンを変更したい。TipMessageDlg で表示されるメッセージダイアログは、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 プロパティ) とコントロールの型を示します。 CreateMessageDialog が作成するフォーム フォームの FindComponent メソッドで上記のコンポーネントの名前を指定すれば、メッセージダイアログのフォームにのっている任意のコントロールのオブジェクト参照を 入手できますから、上のようにデフォルトのボタンを変更したり、イメージを差し替えたり、ボタンのキャプションを差し替えたりすることが出来ます。 Delphi 3.0J 以降では上記のボタンに加え2種類ボタンが追加されています。mbYesToAll, mbNoToAll です。これらはもちろん TButtun コンポーネントですが、コンポーネント名は 'YesToAll', 'NoToAll' 、戻り値(Modal Result)は mrYesToAll, mrNoToAll です。なぜかDelphi 5 までのヘルプには載っていません。Delphi 6 のヘルプには明記されています。 |