http://matthias-hielscher.de/blog/482/Delphi_Standard-Dialoge.html
Feb
23

[Delphi] Standard-Dialoge

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. Normalerweise, 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
  • InputBox
  • InputQuery

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

Delphi-Code:
//Syntax
ShowMessage(const Msg: string);

Als Parameter wird lediglich der Ausgabetext angegeben.

Delphi-Code:
//Aufruf
ShowMessage('Hier kann ein beliebiger Text angegeben werden.');


Der Titel des Dialogs entspricht dem Namen des Projektes.

ShowMessagePos

Delphi-Code:
//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.

Delphi-Code:
//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:

Delphi-Code:
//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 [oh]HelpContext[/oh] aus dem Objekt-Inspektor.

Delphi-Code:
//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:

Delphi-Code:
if MessageDlg('Änderungen speichern?', 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

Hinweis
Die Beschriftung der Buttons erfolgt in der Sprache eurer Delphi-Version. Bei einer deutschen Delphi-Version werden die Buttons auf deutsch erscheinen, bei einer englischen auf englisch.
Anders ist dies bei der MessageBox, die im Folgenden erläutert wird.

MessageBox

1. Möglichkeit:

Es wird die Unit Windows benötigt.

Delphi-Code:
//Syntax
function MessageBox(hWnd: HWND; lpText: PAnsiChar; lpCaption: PAnsiChar; uType: Cardinal): integer;

Delphi-Code:
//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.

Delphi-Code:
//Syntax
function MessageBox(const Text: PAnsiChar; const Caption: PAnsiChar; [Flags: integer = 0]): integer;

Delphi-Code:
//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:

Delphi-Code:
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-Code:
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

Hinweis
Die Beschriftung der Buttons erfolgt in der Sprache, die das Windows besitzt, unter dem die Anwendung ausgeführt wird. Die Beschriftung ist daher unabhängig von der verwendeten Delphi-Version.

Eingabe

InputBox

Delphi-Code:
//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.

Delphi-Code:
//Aufruf
var Username: string;

...

Username := InputBox('Titel-Text', 'Geben Sie Ihren Benutzernamen ein', '');


InputQuery

Delphi-Code:
//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.

Delphi-Code:
//Aufruf
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.

Bleibe auf dem Laufenden!

Wenn du den RSS-Feed abonnierst, wirst du über neue Blogeinträge benachrichtigt.

Kommentare

  • Daniel Schuhmann
    03.12.2005, 00:14
  • Sehr schönes Tutorial. Richtig schön erklärt, zudem tut es mal wieder gut, richtige schöne Screenshots zu sehen, die ohne JPG-Artefakte auskommen. Weiter so!
  • jens
    08.01.2006, 13:44
  • hat mir eben sehr weitergeholfen, danke!
  • Hans Thilmany
    28.04.2006, 16:07
  • Ich arbeite mit Delphi 7. Ich habe die grössten Schwierigkeiten um
    mit den von Ihnen beschriebenen Funktionenen zu arbeiten. D.h.
    Informationen zu erhalten welche Parameter benutzt werden können und mussen. Es ist für mich eine grosse Hilfe eine Beschreibung mit Beispiel der Funktionen zu erhalten wie sie in Ihren Beitrag enthalten sind.
    Vielen Dank und freundliche Grüsse.
    Hans Thilmany
  • michael
    30.08.2006, 03:01
  • Sehr Gut! Hat mir sehr geholfen!
  • Neumann
    06.03.2007, 09:10
  • Sehr gut!!!
  • stef
    02.04.2007, 19:12
  • sehr schönes tutorial!
  • Sakis
    07.02.2008, 15:47
  • Geniale Seite!!
  • Philipp
    19.02.2008, 14:05
  • fands klasse hat mir gut geholfen danke jungs
  • Pasemann
    25.03.2008, 15:00
  • das hat super geholfen danke
  • Ich
    10.08.2008, 22:03
  • Super!
  • Michael
    12.01.2009, 19:11
  • An sich alles ziemlich perfekt, nur eine Frage hätte ich schon: und zwar die
    ShowMessage('bliblablubb');
    funzt irgendwie nicht immer, woran könnte das liegen?
    oder wenigstens ein Hinweis auf ne datei, die man dafür includen müsste

    sonst hab ich nichts auszusetzen

    mfg

    PS: auch mit dieser funktion habe ich schon erfolgreich gearbeitet
  • me
    02.03.2009, 22:59
  • super
  • mg
    19.03.2009, 15:33
  • hat mir weitergeholfen und ist auch gut erklärt
  • mg
    15.01.2010, 17:47
  • super !!!
  • Lars Wiltfang
    09.02.2010, 15:26
  • Schön strukturierter Beitrag zum eventuellen Nachschlagen \:\)
  • Maik
    07.03.2010, 17:26
  • Wirklich sehr hilfreich \:\-\)
    Ich kenne Delphi-Bücher, in denen ist es bei weitem nicht so gut erklärt \:\-D Und auch die bebilderte Übersicht der Meldungen... wunderbar...
    MfG
  • Samuel
    09.04.2010, 11:56
  • wirklich sehr gut. hat mir sehr geholfen. das mit den bildern dazu ist sehr hilfreich.
  • Ferdinant
    20.04.2010, 20:46
  • also das ist das wohl hilfreichste was ich je hatte
  • Stephan
    13.07.2010, 09:33
  • Eine tolle Übersicht. Eine Info die du unbedingt noch aufnehmen solltest, ist die Sprache, in der die Button erscheinen. Bei MessageDlg ist das immer die Sprache des Delphis unter dem compiliert wurde. In einem englischen Windows erscheinen die Texte also trotzdem in Deutsch, wenn in einem deutschen Delphi compiliert wurde. Messagebox dagegen verwendet die Windows-Platzhalter für die Buttonbeschriftung. Die Sprache der Button richtet sich also nach der Sprachversion des genutzten Windows.
  • kt
    18.11.2010, 16:37
  • hat mir leider nix gebracht....-.-
    trotzem sehr gut gestaltet^^
  • R.L.
    14.01.2011, 17:16
  • super gemacht!!!!
    ich bin noch schüler und wurd daraus schlauer als aus unserem unterricht danke ^^
  • lurch
    06.12.2011, 17:56
  • Ganz großes Kompliment meinerseits. Hast mir sehr gut weitergeholfen.

    Klasse Tutorial!
  • Muntor
    07.02.2012, 12:26
  • Super Seite, die mir sehr geholfen hat!
    Danke für das Auflisten.
  • Nikolaus
    07.02.2012, 12:26
  • coole seite
  • BlaTyp
    07.02.2012, 12:26
  • Super.Hatt mir sehr geholfen.
    Ich möchte jetzt nur noch wissen wie man seinen eigenen Text auf den Buttons macht.
  • Weihnachtsmann
    07.02.2012, 13:08
  • die seite hat mir geholfen
  • Irgendwer
    14.11.2012, 11:27
  • supersupersuper
  • Erwin
    27.03.2013, 08:53
  • super!
  • R.S.
    06.09.2013, 14:15
  • ja, immer noch sehr hilfreich und informativ \:\)
    tolle Übersicht

    vielen dank \:\)
  • HS
    30.01.2014, 12:14
  • Vielen Dank hat mir sehr geholfen
  • Swen
    03.02.2015, 09:24
  • Danke für den Artikel! InputBox habe ich gesucht. Ich habe bei jeder schnell-mal-eine-Benutzereingabe ein eigenes Form erstellt. Wer blickt da noch durch?! Aber jetzt ist es fast nur noch ein einzeiler.
  • Dennis
    12.03.2015, 08:37
  • Vielen Dank!
    Du erleichterst das Leben eines jeden Delphianfängern ungemein \:D
  • Supido
    07.11.2016, 13:44
  • Besten Dank, sehr ausführlich erklärt. Hat mir sehr geholfen und die Seite ist gleich in die Bookmarks gewandert.
  • Ralf
    24.11.2016, 10:40
  • Vielen Dank! War sehr hilfreich. weiter so \:\-\)
  • Arne
    24.05.2017, 12:42
  • Schön erklärt und bebildert. Vielen Dank!

Einen Kommentar schreiben

 
 
  • : *
  • :
  • : *
* Pflichtfelder