Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


【Delphi】メッセージボックス表示時にデフォルトボタンを指定

メッセージボックスを表示する際に使用される
MessageDlgMessageBoxといった関数では、メッセージだけでなく、
ダイアログやボタンの種類も指定でき、大変便利です。


MessageDlg(V2006以降)では、初期位置のボタンが引数で指定できます。
次のように第5引数でデフォルトとなるボタンを指定します。

//(例)デフォルトで[いいえ]に位置づけ
  if MessageDlg('削除します。よろしいですか?',
                mtWarning,
                [mbYes,mbNo],
                0,
                mbNo) = mrYes then ・・・

MessageDlg関数の各引数は次のような役割をもちます。

  • 第1引数(Msg):
    表示されるメッセージの内容(本文)です。
  • 第2引数(DlgType):
    ダイアログ ボックスの目的(アイコン)を示します。アイコンには以下の種類があります。
    • mtWarning(警告)
    • mtError(エラー)
    • mtInformation(情報)
    • mtConfirmation(確認)※1:非推奨
    • mtCustom(上記以外)
  • 第3引数(Buttons):
    ボタンのセットで、ダイアログにどのボタンが表示されるのかを示します。
    ボタンには以下の種類があり、引数でどの順序で指定しても左からこの順番で表示されます。
    • mbYes(はい)
    • mbNo(いいえ)
    • mbOK(OK)
    • mbCancel(キャンセル)
    • mbAbort(中止)
    • mbRetry(再試行)
    • mbIgnore(無視)
    • mbAll(すべて)
    • mbNoToAll(すべていいえ)
    • mbYesToAll(すべてはい)
    • mbHelp(ヘルプ)
    • mbClose(閉じる)
  • 第4引数(HelpCtx):
    ヘルプボタンをクリックした場合や、F1を押したときに表示される
    ヘルプトピックのコンテキストIDを指定します。
  • 第5引数(DefaultButton):(省略可能)
    第3引数(Buttons)で指定された中でどのボタンがダイアログのデフォルトであるのかを指定します。
  • 第6引数(CustomButtonCaptions):(省略可能)
    (※Delphi 11 Alexandria~)ボタンの文字列をカスタムで設定できます。※2

※1(mtConfirmation使用時の注意):
Microsoftの仕様変更によって、Windows 10以降で疑問符アイコンが廃止されました
mtConfirmationで確認アイコンを指定しても、他のアイコン(情報または警告)が表示されます。

※2(CustomButtonCaptionsの使用例):
Delphi/400 11 Alexandriaでは、追加された第6引数を活用することで
MessageDlgを使ってこのようなダイアログも作成可能です。
変更されるのはボタンの文字列だけのため、
実際のボタンの並び順や第5引数で指定するデフォルトのボタンはそのままです。

//(例)上記のCustomButtonCaptionsを使用するソース
  if MessageDlg('一流レストランのシェフが作ったチャーハンはどれでしょう?',
                TMsgDlgType.mtInformation,
                [mbYes, mbNo, mbNoToAll], // ボタンの役割は「はい・いいえ・すべていいえ」のまま
                0,
                mbNo,
                ['Aの部屋へ', 'Bの部屋へ', 'Cの部屋へ']) = mrYes then ・・・

 


 

Delphi 2005以前や、ダイアログのタイトルを任意に設定したい場合、
および上記の疑問符アイコンを継続して使用したい場合は、
Windows APIのMessageBox関数を利用します。
Application.MessageBoxでも同様。こちらを使うと第1引数のHandleが不要になります。)

こちらでは第4引数のフラグでデフォルトボタンの位置を判別しています。

//(例)デフォルトで[いいえ]に位置づけ
  if MessageBox(Handle,
                '削除します。よろしいですか?',
                '確認',
                MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2) // 足し算して「292」表記でもOK
             = IDYES then ・・・

MessageBox関数の各引数は次のような役割をもちます。

  • 第1引数(Handle):
    画面やウインドウのハンドルを指定します。
    「Application.MessageBox」を使用する場合は内包されるためこの引数自体が不要です。
  • 第2引数(Text):
    表示されるメッセージの内容(本文)です。※3
  • 第3引数(Caption):
    表示されるメッセージのタイトル部分の文字列です。※3
  • 第4引数(Flags):
    ダイアログのアイコンや表示されるボタンを指定できます。
    指定可能な値は以下の通りです。
    これらの値は足し算することで組み合わせて使うこともできます。
    (例:「はい/いいえ」+「警告」+「2番目をデフォルト」= 308 )
     
    • ボタンの種類(この6種類のみ)
      • MB_OK(0):「OK」(デフォルト)
      • MB_OKCANCEL(1)「OK」「キャンセル」
      • MB_ABORTRETRYIGNORE(2)「中止」「再試行」「無視」
      • MB_YESNOCANCEL(3)「はい」「いいえ」「キャンセル」
      • MB_YESNO(4)「はい」「いいえ」
      • MB_RETRYCANCEL(5)「再試行」「キャンセル」
    • ダイアログ ボックスの目的(アイコン)
      • 未指定:アイコンなし
      • MB_ICONHAND(16)エラー
      • MB_ICONQUESTION(32)確認(※疑問符アイコンが出る)
      • MB_ICONEXCLAMATION(48)警告
      • MB_ICONASTERISK(64)情報
    • デフォルトボタン
      • MB_DEFBUTTON1(0)1番目(未指定も可)
      • MB_DEFBUTTON2(256)2番目
      • MB_DEFBUTTON3(512)3番目

※3(文字列の指定方法について):
StringではなくPChar型なので、固定文字列以外(計算値や変数など)を
指定する場合はPCharでキャストする必要があります。

上記例のロジック実行結果
この方法なら疑問符アイコンが出せる

 

 

(ミガロ.情報マガジン「MIGARO News!!」Vol.108 2009年11月号 の内容に最新情報を追加)