AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Standard-Dialoge

Standard-Dialoge

Ein Tutorial von Matze · begonnen am 23. Feb 2005 · letzter Beitrag vom 7. Sep 2009
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
Benutzerbild von Matze
Matze
Registriert seit: 7. Jul 2003
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
  • 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

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 Delphi-Referenz durchsuchenHelpContext 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 Delphi-Referenz durchsuchenCreateMessageDialog verwenden, auf das ich hier aber nicht näher eingegangen bin, da man dies nicht sehr häufig benötigt.
 
Benutzerbild von MaBuSE
MaBuSE

 
Delphi 10 Seattle Enterprise
 
#2
  Alt 15. Mär 2005, 10:59
Zitat von Matze:
Um einen Dialog selbst mit den verschiedensten Buttons zu bestücken, kann man Delphi-Referenz durchsuchenCreateMessageDialog verwenden, auf das ich hier aber nicht näher eingegangen bin, da man dies nicht sehr häufig benötigt.
Na ja, ich verwende das schon ab und zu

Für alle die nicht erst in der Hilfe nachlesen wollen hier ein kleines Beispiel:


Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
  f: TForm;
begin
  f := CreateMessageDialog('Test', mtInformation, [mbOk, mbCancel]);
  f.Color := clRed;
  f.Font.Color := clYellow;
  (f.FindComponent('Cancel') as TButton).Caption := 'Huch';
  f.ShowModal;
  f.Free;
end;
Anmerkung:
Delphi-Quellcode:
f := CreateMessageDialog('Test', mtInformation, [mbOk, mbCancel]);
f.ShowModal;
ist vom Aussehen absolut identisch mit
  MessageDlg('Test', mtInformation, [mbOk, mbCancel]); Das liegt daran, das MessageDlg intern auch CreateMessageDialog verwendet:
Delphi-Quellcode:
// Unit: Dialogs.pas / Delphi 7
//
// Borland Delphi Visual Component Library
// Copyright (c) 1995-2001 Borland Software Corporation
...
function MessageDlg(const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
begin
  Result := MessageDlgPosHelp(Msg, DlgType, Buttons, HelpCtx, -1, -1, '');
end;
...
function MessageDlgPosHelp(const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer;
  const HelpFileName: string): Integer;
begin
  with CreateMessageDialog(Msg, DlgType, Buttons) do
    try
      HelpContext := HelpCtx;
      HelpFile := HelpFileName;
      if X >= 0 then Left := X;
      if Y >= 0 then Top := Y;
      if (Y < 0) and (X < 0) then Position := poScreenCenter;
      Result := ShowModal;
    finally
      Free;
    end;
end;
...
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

 
Delphi 2007 Enterprise
 
#3
  Alt 15. Mär 2005, 11:10
cooles tutorial.
gibt es das auch als PDF oder zum runterladen?

gruessle
Klaus E.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus
 
#4
  Alt 15. Mär 2005, 11:11
Zitat von RavenIV:
gibt es das auch als PDF oder zum runterladen?
Wie jedes Thema mit dem -Button

Greetz
alcaeus
Andreas B.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

 
Delphi 2007 Enterprise
 
#5
  Alt 15. Mär 2005, 11:20
Zitat von alcaeus:
Zitat von RavenIV:
gibt es das auch als PDF oder zum runterladen?
Wie jedes Thema mit dem -Button

Greetz
alcaeus
tolle idee.
aber ich will nur das tutorial haben.
und nicht die bemerkungen der anderen schreiber.

gruessle
Klaus E.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

 
Delphi 10 Seattle Enterprise
 
#6
  Alt 15. Mär 2005, 13:07
Zitat von RavenIV:
Zitat von alcaeus:
Zitat von RavenIV:
gibt es das auch als PDF oder zum runterladen?
Wie jedes Thema mit dem -Button
tolle idee.
aber ich will nur das tutorial haben.
Den Text makieren. -> In Word einfügen
(Falls Tabellenformatierung nicht stimmt, diese über Tabelleneigenschaften -> Höhe korrigieren)
Dann einfach aus der Word Datei ein PDF erzeugen.

Zitat von RavenIV:
und nicht die bemerkungen der anderen schreiber.
Danke

-> Deine Frage ist übrigens Offtopic und hat hier im Tutorial nichts zu suchen.
(Die Anderen wollen ja z.B. ein PDF mit Infos zu Standard Dialogen haben und nicht über PDF Erstellung !!!)
Du hättest einen neuen Thread auf machen müssen
(Verhaltenskodex: FAQ-Eintrag zum Stichwort "12""12").
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

 
Turbo Delphi für Win32
 
#7
  Alt 26. Mär 2006, 21:50
Hallo!

Zitat von Matze:
mbCancel oder mbAbort
Beschriftung: Abbrechen
Also das nicht nicht das Selbe. Das ist imho nur ein übersetzungsfehler von den Microsoft Übersetzern. Korrekterweise müsste Cancel mit Abbrechen und Abort mit Abbruch beschriftet werden. Das macht in manchen Dialogen einen Unterschied (zb bei Schleifen: Nur einen durchglauf oder die ganze Schreibe abbrechen). Wenn man einen Englischen Delphi-Kompiler hat, dann kommt aus mbCancel auch Cancel und aus mbAbort auch Abort raus. Eventuell wird das mal in einer zukünftigen Version von Windows geändert.

Sonst gutes Tutorial!

Grüße
Faux
Faux Manuel
  Mit Zitat antworten Zitat
mindforce
 
#8
  Alt 2. Apr 2006, 09:35
Hi,

man kann ja immernoch die Lösung mit dem application.messagebox('Text' , 'Caption' , 64+0); nehmen.

Geht glaube ich einfacher .

Gruss,

Mindforce
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

 
Turbo Delphi für Win32
 
#9
  Alt 2. Apr 2006, 12:33
Zitat von mindforce:
man kann ja immernoch die Lösung mit dem application.messagebox('Text' , 'Caption' , 64+0); nehmen.

Geht glaube ich einfacher
Alsi ich finde mtConfirmation und [mbYes, mbNo] etwas einfacher, als die Rechnerei.

Grüße
Faux
Faux Manuel
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

 
Delphi 6 Personal
 
#10
  Alt 2. Apr 2006, 13:40
Jupp, das Plus Null ist nix für mich auch die Schreibweise mit Zahlen ist nach einiger Zeit dann doch sehr unsicher. Was war doch noch gleich eine MessageBox mit Achtzehn ?
Die Angaben mit Konstanten(namen) macht einem doch das Leben leichter.
Matti
  Mit Zitat antworten Zitat
Themen-Optionen Tutorial durchsuchen
Tutorial durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz