77 Stimmen

Delphi/Lazarus: ShowModal Result

Tipp von Stefan Trost | Letztes Update am 28.02.2024 | Erstellt am 19.05.2013

ShowModal zeigt eine Form an und wartet darauf, bis diese wieder vom Nutzer geschlossen wurde. Bis zum Schließen lässt sich auch keine andere Form des Programms bedienen. Was viele jedoch nicht wissen: Es lässt sich ein Rückgabewert für das Schließen der ShowModal-Form definieren, den man dann anschließend bequem im Programm auswerten kann.

Zum Beispiel, um zu schauen, welchen Button ein Nutzer gedrückt hat.

Beispiel

Schauen wir uns dazu zunächst ein simples Beispiel an. Unsere erste Form ist Form1. Ein zweites Fenster (Form2) möchten wir mit ShowModal anzeigen lassen.

Auf Form2 haben wir zwei Buttons platziert, denen wir folgenden Code zugewiesen haben:

procedure TForm2.Button1Click(Sender: TObject);
begin
  ModalResult := 1;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  ModalResult := 2;
end;

In Form1 rufen wir diese Form mit ShowModal auf:

procedure TForm1.Button1Click(Sender: TObject);
var
  k: integer;
begin
  // Beispiel 1
  k := Form2.ShowModal;
  if k = 1 then ShowMessage('Button 1 wurde geklickt!');
  if k = 2 then ShowMessage('Button 2 wurde geklickt!');

  // Beispiel 2
  if Form2.ShowModal = 1 then begin
    ShowMessage('Button 1 wurde geklickt!');
  end;
end;

Der Wert, den wir ModalResult in den ButtonClick-Prozeduren zuweisen, ist der Rückgabewert des ShowModal-Aufrufs. Gleichzeitig wird die Form automatisch geschlossen, sobald wir ModalResult auf einen anderen Wert als Null setzen.

Im Beispiel setzen wir in Form2 mit Button1 ModalResult auf 1 und mit Button2 auf 2. Damit können wir später im Code der Form1 feststellen, welcher Button auf Form2 gedrückt wurde und zeigen für unser Beispiel entsprechende Meldungen an.

ModalResult-Buttons

Neben dieser Methode, können wir aber auch beliebigen Buttons direkt ein Standard-ModalResult zuweisen. Dafür kennen die Buttons die Eigenschaft "ModalResult", die wir (zum Beispiel über den Objektinspektor) beispielsweise auf mrOK, mrCancel, mrYes oder mrNo setzen können.

Wenn wir einen Button derartig präpariert haben, können wir das Ergebnis folgendermaßen abfragen:

if Form2.ShowModal = mrOk then begin
   ShowMessage('Der Button mit mrOk wurde geklickt!');
end;

Falls also ein Nutzer auf den Button mit der Eigenschaft ModalResult = mrOK geklickt hat, schließt sich die jeweilige Form automatisch und gibt uns automatisch mrOk als Result zurück. Und das ohne dass wir noch andere Eigenschaften an dem Button ändern müssten oder dem Button irgendein Event oder Code zuweisen müssten. Zusätzlich erkennen wir am Rückgabewert von ShowModal, dass der Nutzer genau diesen Button geklickt hat.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

Delphi: Systemweiter HotKey

Tutorial | 3 Kommentare

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.