Home » Tutorials » Object Pascal/RTL » Dialogfenster

Dialogfenster

MessageBox

Mit dieser Rotine kann man nicht nur reine Nachrichtendialoge, sondern auch Eingabedialoge realisieren.

function MessageBox(Text, Caption: PChar; Flags: Word): Integer;

Die Text Variable hat die gleiche Funktion wie Msg bei ShowMessage, in ihr ist der eigendliche Inhalt des Dialogs definiert. Der Wert Caption ist die Dialogüberschrift, zu vergleichen mit dem Caption Wert einer Form.
Achtung: Bei diesen beiden Werten wird PChar verlangt nicht String. Das ist
eigentlich bei direkter Eingabe des Wertes (in dem Prozeduraufruf) irrelevant. Lädt man dagegen den Wert aus einer Variable, muss man entweder gleich die Variable als PChar definieren oder es so schreiben:

PChar(s)

Hierbei wird ein String-Wert (s) zum PChar-Wert umdefiniert.
Im Flags-Wert wird dann das Aussehen (Schaltflächen, Symbol, Standardvorgabe) definiert.
Flag = Symbol or Schaltfläche or Standardvorgabe
Hier jetzt einmal die verschiedenen Werte aufgelistet:

Symbole:

Konstante Wert Symbol
MB_ICONSTOP 16
MB_ICONQUESTION 32
MB_ICONWARNING 48
MB_ICONINFORMATION 64

Schaltflächen:

Konstante Wert Schaltflächen
MB_OK
MB_OKCANCEL 1
MB_ABORTRETRYIGNORE 2
MB_YESNOCANCEL 3
MB_YESNO 4
MB_RETRYCANCEL 5
MB_HELP 16384

Standardvorgabe:
Dieser Wert legt fest, welche Schalfläche den Fokus hat.

Konstante Wert Standardvorgabe
MB_DEFBUTTON1 Erster Button
MB_DEFBUTTON2 256 Zweiter Button
MB_DEFBUTTON3 512 Dritter Button

Im folgenden Beispiel wollen wir einen solchen Dialog erzeugen:

Application.MessageBox('Wollen sie das Programm beenden?', 'Frage', MB_ICONQUESTION or MB_YESNOCANCEL);

Abfrage des Rückgabewertes:
Um den Rückgabewert deuten zu können, müssen wir erst einmal über die verschiedenen Möglichkeiten bescheid wissen.

Konstante Wert Bedeutung
Fehler
IDOK 1 OK gedrückt
IDCANCEL 2 Abbrechen gedrückt
IDABORT 3 Abbrechen gedrückt
IDRETRY 4 Wiederholen gedrückt
IDIGNORE 5 Ignorieren gedrückt
IDYES 6 Ja gedrückt
IDNO 7 Nein gedrückt

Hier noch ein kleines Beispiel:

if Application.MessageBox('Wollen sie das Programm beenden?', 'Frage', MB_ICONQUESTION or MB_YESNOCANCEL) = IDYES then close;

Für IDYES hätte man auch einfach 6 einsetzen können, aber ich finde, dass man den Quelltext so besser versteht und er leichter zu lesen ist.