Da ich schon ein paar Mal auf die Verwendung der Dialoge, die man in Delphi verwenden kann, angesprochen wurde und kein Tutorial gefunden habe (vielleicht gibt das auch schon), habe ich dieses kleine hier verfasst.
Um einen Dialog anzeigen zu lassen, benötigt man sehr wenig Programmieraufwand, im Normalfall ist es mit einer Zeile Code getan.
Die
Unit Dialogs muss in die
uses-Klausel eingetragen werden. Im Normalfall, sofern man keine eigene
Unit erstellt, ist die
Unit Dialogs bereits eingebunden.
Es gibt verschiedene Arten, um Ein- und Ausgaben über einen Dialog durchzuführen:
Ausgabe- ShowMessage / ShowMessagePos
- MessageDlg
- MessageBox
Eingabe
Um eine Einfache Meldung, sei es ein Hinweis, oder der Wert einer Vaiablen, per Dialog auszugeben, gibt es die 3 oben genannten Ausgabe-Möglichkeiten.
Ausgabe
ShowMessage
Syntax:
ShowMessage(const Msg: string);
Als Parameter wird lediglich der Ausgabetext angegeben.
Aufruf:
ShowMessage('Hier kann ein beliebiger Text angegeben werden.');
Der Titel des Dialogs entspricht dem Namen des Projektes.
ShowMessagePos
Syntax:
ShowMessagePos(const Msg: string; X: integer; Y: integer);
Als Parameter weird zuerst der Ausgabetext, dann die Position vom linken Bildschrimrand und dann die Position vom oberen Bildschirmrand angegeben.
Aufruf:
ShowMessagePos('Hier kann ein beliebiger Text angegeben werden.', 200, 100);
Dieser Dialog sieht genauso aus, wie ein mittels
ShowMessage erzeugter, mit dem Unterschied, dass sich dessen Position angeben lässt.
MessageDlg
Dieser Dialog stammt nicht von TApplication ab, weshalb dessen Aufbau sich dem der MessageBox stark unterscheidet, wie man im Folgenden sieht:
Syntax:
function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: integer): Word;
Als Parameter wird zuerst der Ausgabetext, dann das anzuzeigende Icon des Dialogs, von dem dessen Typ (Bestätigung, Fehler, Information, Warnung) abhängt, angegeben. Danach folgen die anzuzeigenden Schaltflächen und der letzte Parameter ist für eine Hilfe gedacht.
Die Hilfe entspricht
HelpContext aus dem Objekt-Inspektor.
Aufruf:
MessageDlg('Hier kann ein beliebiger Text angegeben werden.', mtInformation, [mbOK], 0);
Parameter für das Symbol (Icon):
mtCustom
Symbol: keines
Titel: Projektname
mtError
Symbol:
Titel:
Fehler
mtInformation
Symbol:
Titel:
Informationen
mtConfirmation
Symbol:
Titel:
Bestätigung
mtWarning
Symbol:
Titel:
Warnung
Parameter für die Schaltflächen (Buttons):
mbOK
Beschriftung: OK
mbYes
Beschriftung: Ja
mbNo
Beschriftung: Nein
mbCancel oder mbAbort
Beschriftung: Abbrechen
mbRetry
Beschriftung: Wiederholen
mbIgnore
Beschriftung: Ignorieren
mbHelp
Beschriftung: Hilfe
mbAll
Beschriftung: Alle
Standard Button-Kombinationen:
Diese werden nicht als eckige Klammern eingetragen, da es bereits um eine Kombination aus mehreren Buttons handelt. Diese können daher auch nicht mit anderen Buttons kombiniert werden.
mbOkCancel
Buttons: OK - Abbrechen
mbYesNoCancel
Buttons: Ja - Nein - Abbrechen
mbAbortRetryIgnore
Buttons: Abrrechen - Wiederholen - Ignorieren
Hier kann auch abgefragt werden, auf welche Schaltfläche gedrückt wurde:
Code:
if MessageDlg('Änderungen süeichern?', mtConfirmation, [mbyes, mbno, mbcancel], 0) = mrYes then
// Es wurde auf 'Ja' geklickt
Die Rückgabewerte:
mrNone
gedrückter Button: keiner
mrOk
gedrückter Button: OK
mrYes
gedrückter Button: Ja
mrNo
gedrückter Button: Nein
mrCancel oder mrAbort
gedrückter Button: Abbrechen
mrRetry
gedrückter Button: Wiederholen
mrIgnore
gedrückter Button: Ignorieren
mrAll
gedrückter Button: Alle
MessageBox
1. Möglichkeit:
Es wird die
Unit Windows benötigt.
Syntax:
function MessageBox(hWnd: HWND; lpText: PAnsiChar; lpCaption: PAnsiChar; uType: Cardinal): integer;
Aufruf:
Messagebox(Self.Handle, 'Hier kann ein beliebiger Text angegeben werden.', 'Titel-Text', MB_ICONINFORMATION or MB_OKCANCEL);
2. Möglichkeit:
Methode von TApplication, wie man leicht erahnen kann.
Syntax:
function MessageBox(const Text: PAnsiChar; const Caption: PAnsiChar; [Flags: integer = 0]): integer;
Aufruf:
Application.MessageBox('Hier kann ein beliebiger Text angegeben werden.', 'Titel-Text', MB_ICONINFORMATION or MB_OKCANCEL);
Der Dialog sieht genauso aus, wie einer mit
MessageBox erzeugter und ist im Endeffekt der selbe.
Parameter für die Icons:
MB_ICONSTOP
Wert der Konstanten: 16
Symbol:
MB_ICONQUESTION
Wert der Konstanten: 32
Symbol:
MB_ICONWARNING
Wert der Konstanten: 48
Symbol:
MB_ICONINFORMATION
Wert der Konstanten: 64
Symbol:
Der Wert 0 entspricht keinem angezeigten Symbol.
Parameter für die Schaltflächen:
MB_OK
Wert der Konstanten: 0
Buttons: OK
MB_OKCANCEL
Wert der Konstanten: 1
Buttons: OK - Cancel
MB_ABORTRETRYIGNORE
Wert der Konstanten: 2
Buttons: Abbrechen - Wiederholen - Ignorieren
MB_YESNOCANCEL
Wert der Konstanten: 3
Beschriftung: Ja - Nein - Abbrechen
MB_YESNO
Wert der Konstanten: 4
Beschriftung: Ja - Nein
MB_RETRYCANCEL
Wert der Konstanten: 5
Beschriftung: Wiederholen - Abbrechen
MB_HELP
Wert der Konstanten: 16384
Beschriftung: Hilfe
Man kann sogar festlegen, welche der maximal 3 Schaltflächen mein Anzeigen des Dialoges den Fokus behält. Dieser Button wird gedrückt, wenn man beim Anzeigen des Dialogs 'Enter' drückt. Somit kann man ungewollte Dinge, wie das Verwerfen einer Datei, verhindern.
Standardfokus der Schaltflächen:
MB_DEFBUTTON1
Wert der Konstanten: 0
Fokus: 1. Button
MB_DEFBUTTON2
Wert der Konstanten: 256
Fokus: 2. Button
MB_DEFBUTTON3
Wert der Konstanten: 512
Fokus: 3. Button
Diese Konstanten (Icon, Buttons, Fokus) werden kombiniert, indem man sie mittels
or miteinander verbindet:
MB_ICONINFORMATION or MB_OKCANCEL or MB_DEFBUTTON2
oder einfach die Werte aller Konstanten addiert und diese als letzten Parameter angibt. Nur ist es aus dem Code nur schwer ersichtlich, welche Informationen in dieser Zahl stecken.
Auch bei der MessageBox kann man überprüfen, auf welche Schaltfläche geklickt wurde:
Delphi-Quellcode:
if Application.MessageBox('Änderungen speichern?', 'Hinweis', MB_YESNOCANCEL or MB_DEFBUTTON3) = IDYES then
// Es wurde auf 'Ja' geklickt
Die Rückgabewerte:
ID_OK
Wert der Konstanten: 1
gedrückter Button: OK
ID_CANCEL oder ID_ABORT
Wert der Konstanten (ID_CANCEL) : 2
Wert der Konstanten (ID_ABORT) : 3
gedrückter Button: Abbrechen
ID_RETRY
Wert der Konstanten: 4
gedrückter Button: Wiederholen
ID_RIGNORE
Wert der Konstanten: 5
gedrückter Button: Ignorieren
ID_YES
Wert der Konstanten: 6
gedrückter Button: Ja
ID_NO
Wert der Konstanten: 7
gedrückter Button: Nein
Eingabe
InputBox
Syntax:
function InputBox(const ACaption: string; const APromt: string; const ADefalut: string): string;
Die Parameter setzen sich wie folgt zusammen: Der erste ist für den Dialogtitel, der zweite für den Beschreibungstext und der dritte ist der vordefinierte Text, der bereits im Textfeld steht.
Aufruf:
Delphi-Quellcode:
var Username: string;
...
Username := InputBox('Titel-Text', 'Geben Sie Ihren Benutzernamen ein', '');
InputQuery
Syntax:
function InputQuery(const ACaption: string; const APromt: string; var Value: string): boolean;
Der erste Parameter ist wiederum für den Dialogtext, der zweite für den Beschreibungstext und der dritte dient dazu, den eingegebenen Text zurückzuliefern.
Der Rückgabewert ist hier ein boolscher, der nur dann
true ist, wenn auf
OK geklickt wurde.
Das Aussehen entspricht dem, eines mittels
InputBox erzeugten Dialogs.
Aufruf:
Delphi-Quellcode:
var Username: string;
...
if InputQuery('Hinweis', 'Wie heißen Sie?', Username) then
//Es wurde auf 'OK' geklickt
Um einen Dialog selbst mit den verschiedensten Buttons zu bestücken, kann man
CreateMessageDialog verwenden, auf das ich hier aber nicht näher eingegangen bin, da man dies nicht sehr häufig benötigt.