メッセージボックスのデフォルトボタンを変えたい
|
ボタンが、[はい、いいえ]ならNoの方に、デフォルトが、[はい、いいえ、キャンセル]ならキャンセルにデフォルトを置きたい場合があります。
APIのMessageBoxのヘルプから、スタイルフラッグを調べて下さい。ApplicationのMessageBox メソッドを使えば簡単です。
Application.MessageBox('デフォルトボタンを変えています', PChar(Application.Title), MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2);
Application.MessageBox('デフォルトボタンを変えています', PChar(Application.Title), MB_ICONQUESTION + MB_YESNOCancel + MB_DEFBUTTON3);
がわかりやすいでしょう。
CreateMessageDialog関数を使われるなら、次のような自作関数はどうでしょうか。
Defaultパラメータを、2とか3にすれば、デフォルトボタンを変えることができます。
function MessageDlgEx(const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: Longint = 0; default: Word = 1): Word;
var
Dlg: TForm;
begin
Dlg := CreateMessageDialog(Msg, AType, AButtons);
try
// 最初のボタンが Components[2]である
if (Default <1) or (Default >= Dlg.ComponentCount - 1) then Default := 1;
Dlg.HelpContext := HelpCtx;
Dlg.ActiveControl := TWinControl(Dlg.Components[default + 1]);
result := Dlg.ShowModal;
finally
Dlg.Free;
end;
end;
|
|