Delphi/C++ Builder の MessageDlg をフォームの中央に表示
MessageDlg っぽくて、指定(メイン)フォームの中央に表示
(Formを MainForm 以外の中央に表示はこちら)
位置を指定できる MessageDlgPos が存在するものの、表示しようとしているダイアログのサイズが分からなければ、位置を決められないわけで...
デフォルトが設定されているので、メインフォーム中央の場合、フォームを指定する必要はありません
位置を指定できる MessageDlgPos が存在するものの、表示しようとしているダイアログのサイズが分からなければ、位置を決められないわけで...
function MsgDlg(AMessage: string; DlgType: TMsgDlgType = mtInformation; Buttons: TMsgDlgButtons = [mbOK]; AForm: TForm = nil): TModalResult; var ARect: TRect; MsgForm: TForm; begin if (AForm = nil) then begin if (Application.MainForm <> nil) then begin GetWindowRect(Application.MainForm.Handle, ARect); end else begin Result := MessageDlg(AMessage, DlgType, Buttons, 0); Exit; end; end else begin GetWindowRect(AForm.Handle, ARect); end; MsgForm := CreateMessageDialog(AMessage, DlgType, Buttons); try MsgForm.Top := ARect.Top + (ARect.Bottom - ARect.Top - MsgForm.Height) div 2; MsgForm.Left := ARect.Left + (ARect.Right - ARect.Left - MsgForm.Width) div 2; // MoveMouseCursorToDefaultButton(MsgForm); Result := MsgForm.ShowModal; finally MsgForm.Free; end; end;既定のボタンへカーソルを移動するには、MoveMouseCursorToDefaultButton 関数を併用します
デフォルトが設定されているので、メインフォーム中央の場合、フォームを指定する必要はありません
MsgDlg('処理が完了しました'); // Information アイコンで OK ボタンのみみたいに利用します
コメント