2010-07-21 10 views
2

J'essaie de centrer toutes les boîtes de dialogue de message, y compris les boîtes de dialogue d'exception sur le formulaire parent plutôt que de les faire toujours apparaître au centre de l'écran. J'utilise Delphi 7 Je remarque que l'utilisation de MessageDlgPos permet aux paramètres de X et Y de localiser la boîte de dialogue à l'écran, et c'est très bien pour tous les messages que je souhaite afficher à l'utilisateur. Mais qu'en est-il de l'emplacement des dialogues d'exception? Peuvent-ils apparaître également au centre du formulaire parent?Comment centraliser les boîtes de dialogue Windows Exception dans Delphi?

Toute aide grandement appréciée!

Répondre

1

@Rucia, ma suggestion est que vous utilisez l'événement OnException du composant TApplicationEvents, puis créez votre propre boîte de dialogue en utilisant la fonction CreateMessageDialog.

voir cet exemple.

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; 
+0

Merci beaucoup. C'est parfait! – Rucia