Difference between revisions of "Dialog Examples/de"

From Free Pascal wiki
Jump to navigationJump to search
m (Fixed syntax highlighting; deleted category already in page template)
 
(18 intermediate revisions by 10 users not shown)
Line 1: Line 1:
= Einige nützliche Dialoge=
+
{{Dialog Examples}}
 +
 
 +
= Einige nützliche Dialoge =
 
Dies sind einige nützliche Dialoge, die nicht in der Komponentenpalette zu finden sind:
 
Dies sind einige nützliche Dialoge, die nicht in der Komponentenpalette zu finden sind:
  
Line 9: Line 11:
 
* function PasswordBox(const ACaption, APrompt : String) : String;
 
* function PasswordBox(const ACaption, APrompt : String) : String;
  
Jede dieser Komponenten bewirkt die Anzeige einer kleinen popup Box, welche einige Informationen enthält und eine Benutzer Rückmeldung erfordert: entweder eine Schaltfläche drücken oder Texteingabe oder beides. Der Porgrammierer hat kaum Kontrolle über das Format, die Größe oder Position dieser popup Boxen, aber kann den textlichen Inhalt beeinflussen.<br>
+
Jede dieser Komponenten bewirkt die Anzeige einer kleinen Popupbox, welche einige Informationen enthält und eine Rückmeldung durch den Benutzer erfordert: entweder eine Schaltfläche drücken oder Texteingabe bzw. beides. Der Einfluss des Programmierers beschränkt sich hauptsächlich auf den Nachrichtentext, Format. Größe und Position können dagegen weniger beeinflusst werden.<br>
Der Grund warum es oft verschiedene sehr ähnliche Alternativen gibt, ist es verschiedene Methoden des Aufrufs von Komponenten zu erlauben und Daten zurück von der Prozedur oder Funktion zu erhalten.
+
Der Grund warum es oft verschiedene sehr ähnliche Alternativen gibt, besteht darin, verschiedene Methoden des Aufrufs von Komponenten zu erlauben und Daten zurück zu erhalten.
  
==Nachrichten Dialoge==
+
== Nachrichten-Dialoge ==
Nachrichten Dialoge zeigen eine Nachricht an und warten auf eine Tastendruck-oder Mausklick-Antwort.
+
Nachrichten-Dialoge zeigen eine Nachricht an und warten auf eine Tastendruck- oder Mausklick-Antwort.
===ShowMessage===
+
 
Procedure ShowMessage (const Msg: string);
+
=== ShowMessage ===
 +
 
 +
<syntaxhighlight lang=pascal>
 +
procedure ShowMessage(const Msg: string);</syntaxhighlight>
 
   
 
   
{ Definiert in Dialogs.pp }
+
{ Deklariert in Dialogs.pp }
  
 
Der einfachste Nachrichtendialog: nimmt eine einfache Zeichenkette als Parameter, zeigt sie in einer stereotypen Box, und wartet auf ein Mausklick oder Tastendruck Ereignis bevor er zur aufrufenden Routine oder Programm zurückkehrt.<br>
 
Der einfachste Nachrichtendialog: nimmt eine einfache Zeichenkette als Parameter, zeigt sie in einer stereotypen Box, und wartet auf ein Mausklick oder Tastendruck Ereignis bevor er zur aufrufenden Routine oder Programm zurückkehrt.<br>
Line 24: Line 29:
 
Beispiel:
 
Beispiel:
  
Program LazMessage;
+
<syntaxhighlight lang=pascal>
Uses Dialogs;
+
program LazMessage;
begin
+
uses
  ShowMessage ('Dies ist eine Nachricht von Lazarus')
+
  Dialogs;
end.
+
begin
 +
  ShowMessage ('Dies ist eine Nachricht von Lazarus')
 +
end.</syntaxhighlight>
 +
 
 +
Sie haben die Möglichkeit, mehrzeilige Nachrichten zu erzeugen mit folgenden Zeilentrennern, alle funktionieren gleichermaßen:
 +
*sLineBreak
 +
*LineEnding
 +
*oder dem Zeichencode: #13#10
 +
 
 +
'''Mehrzeiliges Beispiel:'''
 +
 
 +
<syntaxhighlight lang=pascal>
 +
program LazMessage;
 +
uses
 +
  Dialogs;
 +
begin
 +
  ShowMessage('Dies ist eine mehrzeilige' + sLineBreak + 'Nachricht!' );
 +
end.</syntaxhighlight>
  
===MessageBox===
+
=== MessageBox ===
Function Application.MessageBox (Text, Caption: PChar; Flags: longint) : Integer;
+
 
+
<syntaxhighlight lang=pascal>
{ Definiert in Forms.pp als Teil von TApplication; muß deshalb aufgerufen werden als Application.Messagebox () oder unter Verwendung des 'with Application do ...' Konstrukts }
+
function Application.MessageBox(Text, Caption: PChar; Flags: LongInt): Integer;
 +
</syntaxhighlight>
 +
 
 +
{ Definiert in Forms.pp als Teil von TApplication; muss deshalb aufgerufen werden als Application.Messagebox () oder unter Verwendung des 'with Application do ...' Konstrukts }
  
Enthaltene Parameter
+
Enthaltene Parameter:
  
 
* Text: die Zeichenkette, die als Hinweis oder Anleitung in der Box angezeigt wird;
 
* Text: die Zeichenkette, die als Hinweis oder Anleitung in der Box angezeigt wird;
* Caption: die Zeichenketten Beschriftung oben in der Nachrichten Box;
+
* Caption: die Zeichenketten-Beschriftung oben in der Nachrichtenbox;
* Flags: longint - ein Integer constructed by adding together various constants to define the contents and behaviour of the box, for example MB_ABORTRETRYIGNORE + MR_ICONQUESTION will cause the application to display a query (?) icon in a box with three buttons: ABORT RETRY IGNORE.
+
* Flags: longint - dient durch hinzufügen verschiedener Konstanten dazu, den Inhalt und die Erscheinung des Dialogs anzupassen. Zum Beispiel: MB_ABORTRETRYIGNORE + MR_ICONQUESTION zeigt im Dialog des Frage-Icon (?) und drei buttons an: Abbrechen, Wiederholen und Ignorieren. Die Konstanten sind in der Unit [[doc:lcl/lcltype|LCLType]] definiert.
  
Die Funktion gibt einen Integer Wert zurück entsprechend der gedrückten Schaltfläche; sein Wert kann festgelegt werden durch Referenz auf die Konstanten [IDOK..IDHELP]
+
Die Funktion gibt einen Integerwert entsprechend der gedrückten Schaltfläche zurück; sein Wert kann festgelegt werden durch Referenz auf die Konstanten [IDOK..IDHELP]
  
Sie kann aufgerufen werden wie ein Prozeduraufruf (d.h. wie eine 'MessageBox()' Anweisung eher als ein 'Variable := MessageBox()' Funktionsaufruf - siehe Beispiel unten)
+
Sie kann aufgerufen werden wie ein Prozeduraufruf (d.h. wie eine 'MessageBox()'-Anweisung anstelle eines 'Variable := MessageBox()' Funktionsaufrufs - siehe Beispiel unten)
  
Beispiel
+
Beispiel:
  
Uses Forms, Dialogs, LCLType;
+
<syntaxhighlight lang=pascal>
 +
uses
 +
  Forms, Dialogs, LCLType;
 
   
 
   
Procedure DisplayMessageBox;
+
procedure DisplayMessageBox;
  var reply, boxstyle: integer;
+
var  
  begin
+
  Reply, BoxStyle: Integer;
    with application do begin
+
begin
      boxstyle := MB_ICONQUESTION + MB_YESNO;
+
  with Application do begin
      reply := MessageBox ('Press either button', 'MessageBoxDemo', boxstyle);
+
    BoxStyle := MB_ICONQUESTION + MB_YESNO;
      if reply = IDYES then MessageBox ('Yes      ', 'Reply',MB_ICONINFORMATION)
+
    Reply := MessageBox('Press either button', 'MessageBoxDemo', BoxStyle);
      else MessageBox ('No        ', 'Reply', MB_ICONHAND)
+
    if Reply = IDYES then MessageBox('Yes      ', 'Reply', MB_ICONINFORMATION)
  end;
+
                    else MessageBox('No        ', 'Reply', MB_ICONHAND);
 +
  end;
 +
end;</syntaxhighlight>
  
Beachten sie, daß in diesem Beispiel die 'Yes' und 'No' Zeichenketten ohne Leerzeichen gefüllt wurden; andernfalls wäre die Box nicht breit genug um die Beschriftung richtig anzuzeigen
+
Beachten Sie, dass in diesem Beispiel die 'Yes' und 'No' Zeichenketten mit zusätzlichen Leerzeichen gefüllt wurden. Die Breite der Messagebox passt sich der Länge dieser Zeichenketten an. Andernfalls wäre die Box nicht breit genug, um die Beschriftung richtig anzuzeigen
  
<center> http://lazarus-ccr.sourceforge.net/kbdata/MessageBoxDemo.png  http://lazarus-ccr.sourceforge.net/kbdata/ReplyYes.png
+
<center> [[image:MessageBoxDemo.png]] [[image:ReplyYes.png]]
</center>
+
</center>
  
===MessageDLG===
+
=== MessageDLG ===
function MessageDlg(const aMsg: string; DlgType: TMsgDlgType;
 
                    Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
 
function MessageDlg(const aCaption, aMsg: string; DlgType: TMsgDlgType;
 
                    Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
 
  
Es gibt zwei Versionen dieser Funktion, daß heißt der erste 'Caption' Parameter ist optional; wenn er weggelassen wird, fehlt die Überschrift in der Box.
+
<syntaxhighlight lang=pascal>
 +
function MessageDlg(const aMsg: string; DlgType: TMsgDlgType;
 +
  Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
 +
function MessageDlg(const aCaption, aMsg: string; DlgType: TMsgDlgType;
 +
  Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;</syntaxhighlight>
 +
 
 +
Es gibt zwei Versionen dieser Funktion, d.h. der erste 'Caption' Parameter ist optional; wenn er weggelassen wird, fehlt die Überschrift in der Box und es wird stattdessen der Meldungstyp angezeigt.
  
 
Dies ist der kompletteste und aufwendigste der Nachrichtendialoge, und erlaubt dem Programmierer beachtliche Kontrolle über das Erscheinungsbild der Dialogbox.
 
Dies ist der kompletteste und aufwendigste der Nachrichtendialoge, und erlaubt dem Programmierer beachtliche Kontrolle über das Erscheinungsbild der Dialogbox.
Die Parameter, welche die Art der Box und ihr Icon definieren, sind eigentlich Typen wie Integer Konstanten, und die Schaltflächen können spezifiziert werden als Gruppe in eckigen Klammern z.B. [mbRetry, mbIgnore, mbAbort, mbCancel].
+
Die Parameter, welche die Art der Box und ihr Icon definieren, sind eigentlich Typen wie Integer-Konstanten, und die Schaltflächen können spezifiziert werden als Menge in eckigen Klammern z.B. [mbRetry, mbIgnore, mbAbort, mbCancel].
 
Der HelpCtx Parameter ist gegenwärtig nicht implementiert und sollte auf Null gesetzt werden.
 
Der HelpCtx Parameter ist gegenwärtig nicht implementiert und sollte auf Null gesetzt werden.
 
Der Rückgabewert der Funktion ist die Identität der gedrückten Schaltfläche, ausgedrückt als ein Integer (siehe die Definitionen unten, [mrNone..mrAll]).
 
Der Rückgabewert der Funktion ist die Identität der gedrückten Schaltfläche, ausgedrückt als ein Integer (siehe die Definitionen unten, [mrNone..mrAll]).
  
Beispiel
+
Beispiel:
  
Uses forms, dialogs, lcltype, controls;
+
<syntaxhighlight lang=pascal>
 +
uses
 +
  Forms, Dialogs, LCLType, Controls;
 
   
 
   
procedure TryMessageDlg;
+
procedure TryMessageDlg;
begin
+
begin
  if MessageDlg ('Question', 'Do you wish to Execute?', mtConfirmation,  
+
  if MessageDlg('Question', 'Do you wish to Execute?', mtConfirmation,  
                  [mbYes, mbNo, mbIgnore],0) = mrYes
+
  [mbYes, mbNo, mbIgnore],0) = mrYes
  then { Execute rest of Program };
+
  then { Execute rest of Program };
  end;
+
end;</syntaxhighlight>
  
 +
<center> [[image:Question.png]]
 +
</center>
  
<center> http://lazarus-ccr.sourceforge.net/kbdata/Question.png
+
== Texteingabe-Dialoge ==
</center>
 
  
== Texteingabe Dialoge==
+
=== InputBox ===
===InputBox===
+
Texteingabe-Dialoge: zeigen eine Nachricht und erwarten eine Benutzereingabe
Texteingabe Dialoge: zeigen eine Nachricht und erwarten eine Benutzereingabe
 
  
Function InputBox(const ACaption, APrompt, ADefault : String) : String;
+
<syntaxhighlight lang=pascal>function InputBox(const ACaption, APrompt, ADefault: String): String;</syntaxhighlight>
  
Zeigt eine Box mit definiertem Titel und Eingabeaufforderung, und erwartet die Benutzereingabe in einem Textfeld. Eine Vorgabe-Zeichenkette kann optional im Textfeld angezeigt werden. Die vom Benutzer eingegebene oder die Vorgabe-Zeichenkette wird als Funktionsergebnis zurückgegeben.
+
Zeigt eine Box mit definiertem Titel und Eingabeaufforderung, und erwartet die Benutzereingabe in einem Textfeld. Eine Vorgabe-Zeichenkette kann optional im Textfeld angezeigt werden. Die vom Benutzer eingegebene oder - wenn keine Eingabe erfolgte - die Vorgabe-Zeichenkette wird als Funktionsergebnis zurückgegeben.
  
Beispiel
+
Beispiel:
  
Uses forms, lcltype, dialogs, controls;
+
<syntaxhighlight lang=pascal>
 +
uses
 +
  Forms, LCLType, Dialogs, Controls;
 
   
 
   
procedure TryInputBox;
+
procedure TryInputBox;
var userstring: string;
+
var  
begin
+
  UserString: string;
  userstring := InputBox ('Get some text input',  
+
begin
                          'Please type in some   information', 'Some sample text');
+
  UserString := InputBox('Get some text input',  
  ShowMessage (userstring)
+
    'Please type in some information', 'Some sample text');
end;
+
  ShowMessage(UserString)
 +
end;</syntaxhighlight>
 +
 
 +
=== InputQuery ===
  
===InputQuery===
+
<syntaxhighlight lang=pascal>
Function InputQuery(const ACaption, APrompt : String;
+
function InputQuery(const ACaption, APrompt : String;
                    MaskInput : Boolean; var Value : String) : Boolean;
+
  MaskInput : Boolean; var Value : String) : Boolean;
Function InputQuery(const ACaption, APrompt : String;
+
function InputQuery(const ACaption, APrompt : String;
                    var Value : String) : Boolean;
+
  var Value : String) : Boolean;</syntaxhighlight>
  
Two versions of this function which displays a prompt and expects user input of textual data; the first includes a MaskInput boolean parameter which determines whether the user input is masked out by asterisks in the text-input box (like during entry of a password), while the second omits this property. The text entered by the user is returned in the variable parameter 'Value'; the function result is a boolean which returns TRUE if the OK button was pressed, or FALSE if the box was closed by any other mechanism (such as clicking the 'Close' icon on the top title bar). Omitting the MaskInput parameter is equivalent to setting it FALSE.
+
Es gibt zwei Versionen dieser Funktion, die eine Eingabeaufforderung zeigen und die Benutzereingabe von Textdaten erwarten; die erste enthält einen MaskInput boolean Parameter, welcher bestimmt, ob die Benutzereingabe maskiert wird mit Sternchen in dem Texteingabefeld (wie bei der Eingabe eines Passworts), während die zweite diese Eigenschaft weglässt. Der vom Benutzer eingegebene Text wird im variablen Parameter 'Value' zurückgegeben; das Funktionsergebnis ist ein boolean, welcher TRUE zurückgibt wenn OK gedrückt wurde, oder FALSE wenn die Box geschlossen wurde durch jeden anderen Mechanismus (wie das Klicken auf das 'Close' Icon oben in der Titelleiste). Das Auslassen des MaskInput Parameters ist gleichbedeutend mit dem Setzen auf FALSE.
  
Beispiel
+
Beispiel:
  
Uses forms, lcltype, dialogs, controls;
+
<syntaxhighlight lang=pascal>
 +
uses
 +
  Forms, LCLType, Dialogs, Controls;
 
   
 
   
procedure TryInputQuery;
+
procedure TryInputQuery;
var QueryResult: boolean;
+
var  
  userstring: string;
+
  QueryResult: Boolean;
begin
+
  UserString: string;
  if InputQuery ('Question', 'Type in some data', TRUE, userstring)
+
begin
  then ShowMessage (userstring)
+
  if InputQuery('Question', 'Type in some data', TRUE, UserString)
  else  
+
  then ShowMessage(UserString)
  begin
+
  else  
    InputQuery ('Don''t be silly', 'Please try again', userstring);
+
  begin
    ShowMessage (userstring)
+
    InputQuery('Don''t be silly', 'Please try again', UserString);
  end
+
    ShowMessage(UserString);
end;
+
  end
 +
end;</syntaxhighlight>
  
<center> http://lazarus-ccr.sourceforge.net/kbdata/MessageDlgQuestion.png  </center>
+
<center> [[image:MessageDlgQuestion.png]] </center>
  
<center> http://lazarus-ccr.sourceforge.net/kbdata/DontBeSillly.png </center>
+
<center> [[image:DontBeSillly.png]] </center>
  
 
===PasswordBox===
 
===PasswordBox===
Function PasswordBox(const ACaption, APrompt : String) : String;
+
<syntaxhighlight lang=pascal>Function PasswordBox(const ACaption, APrompt : String) : String;</syntaxhighlight>
  
Behaves very similarly to the InputQuery function with MaskInput = TRUE; the difference is that the password that was typed in is returned as the result of the function (like InputBox).
+
Verhält sich sehr ähnlich wie die InputQuery Funktion mit MaskInput = TRUE; der Unterschied ist, dass das eingegebene Passwort als Ergebnis der Funktion zurückgegeben wird (wie InputBox).
  
==Constants und Types used in message dialogs==
+
==Konstanten und Typen in den Nachrichtendialogen==
  
Several constants and types relevant for use with the dialog boxes are pre-defined in the LCL library:
+
Verschiedene Konstanten und Typen, die relevant sind für den Gebrauch mit Dialogboxen, sind in der LCL Bibliothek definiert:
  
const { Defined in LCLType.pp }
+
const { Definiert in LCLType.pp }
  
integer constants for defining the types of buttons
+
Integer-Konstanten für die Definition des Buttontyps
and the icon for display in MessageBox
+
und des Icons für die Anzeige in MessageBox
 +
 
 +
<syntaxhighlight lang=pascal>
 +
MB_OK = $00000000;
 +
MB_OKCANCEL = $00000001;
 +
MB_ABORTRETRYIGNORE = $00000002;
 +
MB_YESNOCANCEL = $00000003;
 +
MB_YESNO = $00000004;
 +
MB_RETRYCANCEL = $00000005;
  
MB_OK = $00000000;
 
MB_OKCANCEL = $00000001;
 
MB_ABORTRETRYIGNORE = $00000002;
 
MB_YESNOCANCEL = $00000003;
 
MB_YESNO = $00000004;
 
MB_RETRYCANCEL = $00000005;
 
 
   
 
   
+
MB_ICONHAND = $00000010;
MB_ICONHAND = $00000010;
+
MB_ICONQUESTION = $00000020;
MB_ICONQUESTION = $00000020;
+
MB_ICONEXCLAMATION = $00000030;
MB_ICONEXCLAMATION = $00000030;
+
MB_ICONASTERICK = $00000040;
MB_ICONASTERICK = $00000040;
+
MB_ICONWARNING = MB_ICONEXCLAMATION;
MB_ICONWARNING = MB_ICONEXCLAMATION;
+
MB_ICONERROR = MB_ICONHAND;
MB_ICONERROR = MB_ICONHAND;
+
MB_ICONINFORMATION = MB_ICONASTERICK;</syntaxhighlight>
MB_ICONINFORMATION = MB_ICONASTERICK;
 
  
integer constants defining the return value from MessageBox according to which button was pressed
+
Integer-Konstanten, die den Rückgabewert von MessageBox definieren, je nachdem welcher Button gedrückt wurde
  
IDOK = 1; ID_OK = IDOK;
+
<syntaxhighlight lang=pascal>
IDCANCEL = 2; ID_CANCEL = IDCANCEL;
+
IDOK = 1; ID_OK = IDOK;
IDABORT = 3; ID_ABORT = IDABORT;
+
IDCANCEL = 2; ID_CANCEL = IDCANCEL;
IDRETRY = 4; ID_RETRY = IDRETRY;
+
IDABORT = 3; ID_ABORT = IDABORT;
IDIGNORE = 5; ID_IGNORE = IDIGNORE;
+
IDRETRY = 4; ID_RETRY = IDRETRY;
IDYES = 6; ID_YES = IDYES;
+
IDIGNORE = 5; ID_IGNORE = IDIGNORE;
IDNO = 7; ID_NO = IDNO;
+
IDYES = 6; ID_YES = IDYES;
IDCLOSE = 8; ID_CLOSE = IDCLOSE;
+
IDNO = 7; ID_NO = IDNO;
IDHELP = 9; ID_HELP = IDHELP;
+
IDCLOSE = 8; ID_CLOSE = IDCLOSE;
 +
IDHELP = 9; ID_HELP = IDHELP;</syntaxhighlight>
  
define whether first, second or third button is default
+
definiert ob der erste, zweite oder dritte Button Standardeinstellung ist
  
MB_DEFBUTTON1 = $00000000;
+
<syntaxhighlight lang=pascal>
MB_DEFBUTTON2 = $00000100;
+
MB_DEFBUTTON1 = $00000000;
MB_DEFBUTTON3 = $00000200;
+
MB_DEFBUTTON2 = $00000100;
MB_DEFBUTTON4 = $00000300;
+
MB_DEFBUTTON3 = $00000200;
 +
MB_DEFBUTTON4 = $00000300;</syntaxhighlight>
  
The Flags parameter of MessageBox is constructed by adding a button constant [MB_OK..MB_RETRYCANCEL],
+
Der Flags-Parameter von MessageBox wurde erstellt durch Hinzufügen einer Buttonkonstante [MB_OK..MB_RETRYCANCEL],
an optional icon constant [MB_ICONHAND..MB_ICONINFORMATION]
+
einer optionalen Iconkonstante [MB_ICONHAND..MB_ICONINFORMATION]
and an optional default button constant [MB_DEFBUTTON1..MB_DEFBUTTON3]
+
und einer optionalen Vorgabebutton-Konstante [MB_DEFBUTTON1..MB_DEFBUTTON3]
  
Types for use in MessageDlg, which needs parameters
+
Typen für die Benutzung in MessageDlg, welche Parameter benötigen
AType of TMsgDlgType and AButtons of TMSgDlgButtons
+
AType of TMsgDlgType und AButtons of TMSgDlgButtons
  
  
{ Defined in Dialogs.pp }
+
<syntaxhighlight lang=pascal>
type
+
{ Defined in Dialogs.pp }
 +
type
 
   TMsgDlgType    = (mtWarning, mtError, mtInformation,  mtConfirmation,
 
   TMsgDlgType    = (mtWarning, mtError, mtInformation,  mtConfirmation,
 
                     mtCustom);
 
                     mtCustom);
Line 207: Line 252:
 
    
 
    
 
   
 
   
const
+
const
 
   mbYesNoCancel = [mbYes, mbNo, mbCancel];
 
   mbYesNoCancel = [mbYes, mbNo, mbCancel];
 
   mbOKCancel = [mbOK, mbCancel];
 
   mbOKCancel = [mbOK, mbCancel];
Line 225: Line 270:
 
   
 
   
 
   
 
   
{ Definiert in Controls.pp }
+
{ Defined in Controls.pp }
const
+
const
 
   mrNone = 0;
 
   mrNone = 0;
 
   mrOK = mrNone + 1;
 
   mrOK = mrNone + 1;
Line 239: Line 284:
 
   mrYesToAll = mrNone + 10;
 
   mrYesToAll = mrNone + 10;
 
   mrLast = mrYesToAll;
 
   mrLast = mrYesToAll;
 
+
</syntaxhighlight>
----
 
Diese Seite wurde von der epikwiki [http://lazarus-ccr.sourceforge.net/index.php?wiki=DialogExamples Version] importiert.
 

Latest revision as of 08:10, 13 February 2020

Deutsch (de) English (en) español (es) suomi (fi) français (fr) 日本語 (ja) polski (pl) русский (ru) slovenčina (sk) 中文(中国大陆)‎ (zh_CN)

Einige nützliche Dialoge

Dies sind einige nützliche Dialoge, die nicht in der Komponentenpalette zu finden sind:

  • procedure ShowMessage (const Msg: string);
  • function MessageBox (Text, Caption : PChar; Flags: Word): Integer;
  • function MessageDlg (const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: LongInt): Word;
  • function InputBox (const ACaption, APrompt, ADefault: string); string;
  • function InputQuery (const ACaption, APrompt: string; var Value: string): Boolean;
  • function PasswordBox(const ACaption, APrompt : String) : String;

Jede dieser Komponenten bewirkt die Anzeige einer kleinen Popupbox, welche einige Informationen enthält und eine Rückmeldung durch den Benutzer erfordert: entweder eine Schaltfläche drücken oder Texteingabe bzw. beides. Der Einfluss des Programmierers beschränkt sich hauptsächlich auf den Nachrichtentext, Format. Größe und Position können dagegen weniger beeinflusst werden.
Der Grund warum es oft verschiedene sehr ähnliche Alternativen gibt, besteht darin, verschiedene Methoden des Aufrufs von Komponenten zu erlauben und Daten zurück zu erhalten.

Nachrichten-Dialoge

Nachrichten-Dialoge zeigen eine Nachricht an und warten auf eine Tastendruck- oder Mausklick-Antwort.

ShowMessage

procedure ShowMessage(const Msg: string);

{ Deklariert in Dialogs.pp }

Der einfachste Nachrichtendialog: nimmt eine einfache Zeichenkette als Parameter, zeigt sie in einer stereotypen Box, und wartet auf ein Mausklick oder Tastendruck Ereignis bevor er zur aufrufenden Routine oder Programm zurückkehrt.
Dies ist ein modaler Prozeduraufruf, der eine Box anzeigt, und den Fokus nicht zurückgibt bis die OK Box angeklickt wird oder anderweitig gewählt wird.

Beispiel:

program LazMessage;
uses 
  Dialogs;
begin
  ShowMessage ('Dies ist eine Nachricht von Lazarus')
end.

Sie haben die Möglichkeit, mehrzeilige Nachrichten zu erzeugen mit folgenden Zeilentrennern, alle funktionieren gleichermaßen:

  • sLineBreak
  • LineEnding
  • oder dem Zeichencode: #13#10

Mehrzeiliges Beispiel:

program LazMessage;
uses 
  Dialogs;
begin
  ShowMessage('Dies ist eine mehrzeilige' + sLineBreak + 'Nachricht!' );
end.

MessageBox

function Application.MessageBox(Text, Caption: PChar; Flags: LongInt): Integer;

{ Definiert in Forms.pp als Teil von TApplication; muss deshalb aufgerufen werden als Application.Messagebox () oder unter Verwendung des 'with Application do ...' Konstrukts }

Enthaltene Parameter:

  • Text: die Zeichenkette, die als Hinweis oder Anleitung in der Box angezeigt wird;
  • Caption: die Zeichenketten-Beschriftung oben in der Nachrichtenbox;
  • Flags: longint - dient durch hinzufügen verschiedener Konstanten dazu, den Inhalt und die Erscheinung des Dialogs anzupassen. Zum Beispiel: MB_ABORTRETRYIGNORE + MR_ICONQUESTION zeigt im Dialog des Frage-Icon (?) und drei buttons an: Abbrechen, Wiederholen und Ignorieren. Die Konstanten sind in der Unit LCLType definiert.

Die Funktion gibt einen Integerwert entsprechend der gedrückten Schaltfläche zurück; sein Wert kann festgelegt werden durch Referenz auf die Konstanten [IDOK..IDHELP]

Sie kann aufgerufen werden wie ein Prozeduraufruf (d.h. wie eine 'MessageBox()'-Anweisung anstelle eines 'Variable := MessageBox()' Funktionsaufrufs - siehe Beispiel unten)

Beispiel:

uses 
  Forms, Dialogs, LCLType;
 
procedure DisplayMessageBox;
var 
  Reply, BoxStyle: Integer;
begin
  with Application do begin
    BoxStyle := MB_ICONQUESTION + MB_YESNO;
    Reply := MessageBox('Press either button', 'MessageBoxDemo', BoxStyle);
    if Reply = IDYES then MessageBox('Yes       ', 'Reply', MB_ICONINFORMATION)
                     else MessageBox('No         ', 'Reply', MB_ICONHAND);
  end;
end;

Beachten Sie, dass in diesem Beispiel die 'Yes' und 'No' Zeichenketten mit zusätzlichen Leerzeichen gefüllt wurden. Die Breite der Messagebox passt sich der Länge dieser Zeichenketten an. Andernfalls wäre die Box nicht breit genug, um die Beschriftung richtig anzuzeigen

MessageBoxDemo.png ReplyYes.png

MessageDLG

function MessageDlg(const aMsg: string; DlgType: TMsgDlgType; 
  Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
function MessageDlg(const aCaption, aMsg: string; DlgType: TMsgDlgType; 
  Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;

Es gibt zwei Versionen dieser Funktion, d.h. der erste 'Caption' Parameter ist optional; wenn er weggelassen wird, fehlt die Überschrift in der Box und es wird stattdessen der Meldungstyp angezeigt.

Dies ist der kompletteste und aufwendigste der Nachrichtendialoge, und erlaubt dem Programmierer beachtliche Kontrolle über das Erscheinungsbild der Dialogbox. Die Parameter, welche die Art der Box und ihr Icon definieren, sind eigentlich Typen wie Integer-Konstanten, und die Schaltflächen können spezifiziert werden als Menge in eckigen Klammern z.B. [mbRetry, mbIgnore, mbAbort, mbCancel]. Der HelpCtx Parameter ist gegenwärtig nicht implementiert und sollte auf Null gesetzt werden. Der Rückgabewert der Funktion ist die Identität der gedrückten Schaltfläche, ausgedrückt als ein Integer (siehe die Definitionen unten, [mrNone..mrAll]).

Beispiel:

uses 
  Forms, Dialogs, LCLType, Controls;
 
procedure TryMessageDlg;
begin
  if MessageDlg('Question', 'Do you wish to Execute?', mtConfirmation, 
   [mbYes, mbNo, mbIgnore],0) = mrYes
  then { Execute rest of Program };
end;
Question.png

Texteingabe-Dialoge

InputBox

Texteingabe-Dialoge: zeigen eine Nachricht und erwarten eine Benutzereingabe

function InputBox(const ACaption, APrompt, ADefault: String): String;

Zeigt eine Box mit definiertem Titel und Eingabeaufforderung, und erwartet die Benutzereingabe in einem Textfeld. Eine Vorgabe-Zeichenkette kann optional im Textfeld angezeigt werden. Die vom Benutzer eingegebene oder - wenn keine Eingabe erfolgte - die Vorgabe-Zeichenkette wird als Funktionsergebnis zurückgegeben.

Beispiel:

uses 
  Forms, LCLType, Dialogs, Controls;
 
procedure TryInputBox;
var 
  UserString: string;
begin
  UserString := InputBox('Get some text input', 
    'Please type in some information', 'Some sample text');
  ShowMessage(UserString)
end;

InputQuery

function InputQuery(const ACaption, APrompt : String;
  MaskInput : Boolean; var Value : String) : Boolean;
function InputQuery(const ACaption, APrompt : String;
  var Value : String) : Boolean;

Es gibt zwei Versionen dieser Funktion, die eine Eingabeaufforderung zeigen und die Benutzereingabe von Textdaten erwarten; die erste enthält einen MaskInput boolean Parameter, welcher bestimmt, ob die Benutzereingabe maskiert wird mit Sternchen in dem Texteingabefeld (wie bei der Eingabe eines Passworts), während die zweite diese Eigenschaft weglässt. Der vom Benutzer eingegebene Text wird im variablen Parameter 'Value' zurückgegeben; das Funktionsergebnis ist ein boolean, welcher TRUE zurückgibt wenn OK gedrückt wurde, oder FALSE wenn die Box geschlossen wurde durch jeden anderen Mechanismus (wie das Klicken auf das 'Close' Icon oben in der Titelleiste). Das Auslassen des MaskInput Parameters ist gleichbedeutend mit dem Setzen auf FALSE.

Beispiel:

uses 
  Forms, LCLType, Dialogs, Controls;
 
procedure TryInputQuery;
var 
  QueryResult: Boolean;
  UserString: string;
begin
  if InputQuery('Question', 'Type in some data', TRUE, UserString)
  then ShowMessage(UserString)
  else 
  begin
    InputQuery('Don''t be silly', 'Please try again', UserString);
    ShowMessage(UserString);
  end
end;
MessageDlgQuestion.png
DontBeSillly.png

PasswordBox

Function PasswordBox(const ACaption, APrompt : String) : String;

Verhält sich sehr ähnlich wie die InputQuery Funktion mit MaskInput = TRUE; der Unterschied ist, dass das eingegebene Passwort als Ergebnis der Funktion zurückgegeben wird (wie InputBox).

Konstanten und Typen in den Nachrichtendialogen

Verschiedene Konstanten und Typen, die relevant sind für den Gebrauch mit Dialogboxen, sind in der LCL Bibliothek definiert:

const { Definiert in LCLType.pp }

Integer-Konstanten für die Definition des Buttontyps und des Icons für die Anzeige in MessageBox

MB_OK = $00000000;
MB_OKCANCEL = $00000001;
MB_ABORTRETRYIGNORE = $00000002;
MB_YESNOCANCEL = $00000003;
MB_YESNO = $00000004;
MB_RETRYCANCEL = $00000005;

 
MB_ICONHAND = $00000010;
MB_ICONQUESTION = $00000020;
MB_ICONEXCLAMATION = $00000030;
MB_ICONASTERICK = $00000040;
MB_ICONWARNING = MB_ICONEXCLAMATION;
MB_ICONERROR = MB_ICONHAND;
MB_ICONINFORMATION = MB_ICONASTERICK;

Integer-Konstanten, die den Rückgabewert von MessageBox definieren, je nachdem welcher Button gedrückt wurde

IDOK = 1; 	ID_OK = IDOK;
IDCANCEL = 2;	ID_CANCEL = IDCANCEL;
IDABORT = 3;	ID_ABORT = IDABORT;
IDRETRY = 4;	ID_RETRY = IDRETRY;
IDIGNORE = 5;	ID_IGNORE = IDIGNORE;
IDYES = 6;	ID_YES = IDYES;
IDNO = 7;	ID_NO = IDNO;
IDCLOSE = 8;	ID_CLOSE = IDCLOSE;
IDHELP = 9;	ID_HELP = IDHELP;

definiert ob der erste, zweite oder dritte Button Standardeinstellung ist

MB_DEFBUTTON1 = $00000000;
MB_DEFBUTTON2 = $00000100;
MB_DEFBUTTON3 = $00000200;
MB_DEFBUTTON4 = $00000300;

Der Flags-Parameter von MessageBox wurde erstellt durch Hinzufügen einer Buttonkonstante [MB_OK..MB_RETRYCANCEL], einer optionalen Iconkonstante [MB_ICONHAND..MB_ICONINFORMATION] und einer optionalen Vorgabebutton-Konstante [MB_DEFBUTTON1..MB_DEFBUTTON3]

Typen für die Benutzung in MessageDlg, welche Parameter benötigen AType of TMsgDlgType und AButtons of TMSgDlgButtons


{ Defined in Dialogs.pp }
type
  TMsgDlgType    = (mtWarning, mtError, mtInformation,  mtConfirmation,
                    mtCustom);
  TMsgDlgBtn     = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore,
                   mbAll, mbNoToAll, mbYesToAll, mbHelp, mbClose);
  TMsgDlgButtons = set of TMsgDlgBtn;
  
 
const
  mbYesNoCancel = [mbYes, mbNo, mbCancel];
  mbOKCancel = [mbOK, mbCancel];
  mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];
  
 
  MsgDlgBtnToBitBtnKind: array[TMsgDlgBtn] of TBitBtnKind = (
   bkYes, bkNo, bkOK, bkCancel, bkAbort, bkRetry, bkIgnore,
    bkAll, bkNoToAll, bkYesToAll, bkHelp, bkClose
   );
 
 
  BitBtnKindToMsgDlgBtn: array[TBitBtnKind] of TMsgDlgBtn = (
    mbOk, mbOK, mbCancel, mbHelp, mbYes, mbNo,
    mbClose, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToALl, mbYesToAll
    );
 
 
{ Defined in Controls.pp }
const
  mrNone = 0;
  mrOK = mrNone + 1;
  mrCancel = mrNone + 2;
  mrAbort = mrNone + 3;
  mrRetry = mrNone + 4;
  mrIgnore = mrNone + 5;
  mrYes = mrNone + 6;
  mrNo = mrNone + 7;
  mrAll = mrNone + 8;
  mrNoToAll = mrNone + 9;
  mrYesToAll = mrNone + 10;
  mrLast = mrYesToAll;