Как централизовать диалоги Windows Exception в Delphi? - PullRequest
2 голосов
/ 21 июля 2010

Я пытаюсь центрировать все диалоги сообщений, включая любые диалоги исключений в родительской форме, вместо того, чтобы они всегда появлялись в центре экрана.

Я использую Delphi 7, отмечу, что использование MessageDlgPos позволяет параметрам X и Y находить диалоговое окно на экране, и это прекрасно для любых сообщений, которые я хочу отображать пользователю.Но как насчет расположения диалогов исключений?Могут ли они также появиться в центре родительской формы?

Любая помощь с благодарностью!

1 Ответ

1 голос
/ 21 июля 2010

@ Rucia, я предлагаю вам использовать событие OnException из компонента TApplicationEvents, а затем создать свой собственный диалог, используя CreateMessageDialog функция.

см. Этот образец.

procedure TForm1.ApplicationEvents1Exception(Sender: TObject; E: Exception);
var
   MyDialogMsg : TForm;
   ALeft       : Integer;
   ATop        : Integer;

begin
  //Create the dialog with the exeception message
  MyDialogMsg := CreateMessageDialog(E.Message, mtError, [mbOk]);
  try
      //Calculate the pos of the dialog using the Screen.ActiveForm and the dialog size.
      ALeft := Screen.ActiveForm.Left + (Screen.ActiveForm.Width div 2)  - (MyDialogMsg.Width div 2);
      ATop := Screen.ActiveForm.Top   + (Screen.ActiveForm.Height div 2) - (MyDialogMsg.Height div 2);
      if ALeft < 0 then ALeft := Screen.ActiveForm.Left;
      if ATop < 0  then  ATop := Screen.ActiveForm.Top;
      if (ALeft + MyDialogMsg.Width > Screen.Width) or  (ATop + MyDialogMsg.Height > Screen.Height)
      then
        begin
          ALeft := (Screen.Width - MyDialogMsg.Width) div 2;
          ATop  := (Screen.Height - MyDialogMsg.Height) div 2;
          MyDialogMsg.SetBounds (ALeft, ATop, MyDialogMsg.Width, MyDialogMsg.Height);
        end
      else
      MyDialogMsg.SetBounds(ALeft, ATop, MyDialogMsg.Width, MyDialogMsg.Height);
      //show the dialog
      MyDialogMsg.ShowModal;
  finally
   MyDialogMsg.Free;
  end;
end;
...