[Delphi] オリジナルなメッセージダイアログ
 MessageDlg関数では下記の様な制約があります。
 ・メッセージが可変ピッチなので、表示内容が見にくい
 ・ボタンの文字が固定であり、デフォルト指定が出来ない
 ・オーナーフォームの位置に関係無く、画面中央に表示される
 

 オリジナルなメッセージダイアログを生成して表示させれば、上記制約は解消します。
 


procedure TForm1.Button1Click(Sender: TObject);
var
        msg: string;
        Dlg: TForm;
        ww, rc: word;
begin
    msg :=  format( ' いろはにほへと = %2d件', [12] )+#13+
            format( ' あいうえABCD  = %2d件', [56] )+#13+
            format( '  abcdefdefg     = %2d件', [34] );
//  rc := MessageDlg( msg,mtInformation,[mbYes,mbNo],0 );

    Dlg := CreateMessageDialog( msg,mtInformation,[mbYes,mbNo] );
    Dlg.Width  := 300;                  {メッセージの長さに応じて指定}
    Dlg.Height := 160;                  {必要に応じて指定}
    Dlg.Position := poOwnerFormCenter;  {オーナーフォームの中央に表示}

    //デフォルトで選択されるボタンを指定(下記の何れか)
    //(メモ)Delphi 2007等ではCreateMessageDialog関数の第4引数で指定可能
    Dlg.ActiveControl := TWinControl(Dlg.Components[3]);
    Dlg.ActiveControl := TWinControl(Dlg.FindComponent('NO'));

    //メッセージのフォントや表示幅を指定
    TLabel( Dlg.Components[1]).Font.Name := 'MS ゴシック';
    TLabel( Dlg.Components[1]).Font.Size := 11;
    TLabel( Dlg.Components[1]).Width     := Dlg.Width-40;

    //ボタンの表示位置を指定
    ww := Dlg.Width div 2;
    TButton(Dlg.Components[2]).Left := ww-20-TButton(Dlg.Components[2]).Width; 
    TButton(Dlg.Components[3]).Left := ww+20;
    TButton(Dlg.Components[2]).Top  := Dlg.Height-80;
    TButton(Dlg.Components[3]).Top  := Dlg.Height-80;

    //ボタンの表示文字を指定
    TButton(Dlg.Components[2]).Caption := '詳細表示';
    TButton(Dlg.Components[3]).Caption := '閉じる';

    rc := Dlg.ShowModal;
    Dlg.Free;
end;
      

・インターネット上の情報や書籍の内容を一部参考に作成してます。
・コーディング内容は著作権フリーですが、使用する場合は自己責任にてお願いします。
・記述内容に問題点や改善点がありましたらこちらまでお願いします。

サンプル集の一覧に戻る