Delphi/C++ Builder の MessageDlg をフォームの中央に表示
MessageDlg っぽくて、指定(メイン)フォームの中央に表示
(Formを MainForm 以外の中央に表示はこちら)
位置を指定できる MessageDlgPos が存在するものの、表示しようとしているダイアログのサイズが分からなければ、位置を決められないわけで...
既定のボタンへカーソルを移動するには、MoveMouseCursorToDefaultButton 関数を併用します
デフォルトが設定されているので、メインフォーム中央の場合、フォームを指定する必要はありません
みたいに利用します
位置を指定できる 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;
デフォルトが設定されているので、メインフォーム中央の場合、フォームを指定する必要はありません
- MsgDlg('処理が完了しました'); // Information アイコンで OK ボタンのみ
コメント