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.