Dialog Examples/pl
│
Deutsch (de) │
English (en) │
español (es) │
suomi (fi) │
français (fr) │
日本語 (ja) │
polski (pl) │
русский (ru) │
slovenčina (sk) │
中文(中国大陆) (zh_CN) │
Kilka przydatnych okien dialogowych
Oto kilka przydatnych okien dialogowych, których nie znajdziesz w palecie komponentów:
- 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;
Każdy z tych komponentów powoduje wyświetlenie małego okna dialogowego, które zawiera informacje wymagające reakcji użytkownika: naciśnięcie przycisku, wprowadzenie tekstu lub obydwa razem. Programista ma niewielką kontrolę nad formatem, wielkością lub położeniem tych okien dialogowych, ale może wpływać na ich treść tekstową.
Powodem, dla którego istnieje kilka bardzo podobnych okien dialogowych, jest umożliwienie wywoływania tego komponentu różnymi metodami i odbieranie danych z powrotem do procedury lub funkcji.
Te okna dialogowe mogą być zależne od platformy, tzn. mogą być wyświetlane inaczej na różnych systemach operacyjnych. Na przykład teksty, które są w pełni wyświetlane w systemie Windows XP, mogą zostać obcięte w systemie Windows 7.
Dialogi wiadomości
Dialogi wiadomości wyświetlają komunikat i czekają na naciśnięcie jakiegoś klawisza lub na kliknięcie myszą.
ShowMessage
procedure ShowMessage(const Msg: string);
{ Zdefiniowany jest w pliku Dialogs.pp }
Najprostsze okno dialogowe wiadomości: pobiera prosty ciąg znaków jako parametr, wyświetla go w stereotypowym oknie i czeka na naciśnięcie klawisza myszy lub klawisza Enter, po czym powraca do programu wywołującego lub programu.
Jest to modalne wywołanie procedury, to znaczy, że okno jest wyświetlane, otrzymuje fokus i utrzymuje aktywność, dopóki nie zostanie kliknięte pole OK lub nie zostanie wybrana inna opcja.
Przykład:
program LazMessage;
uses
Dialogs;
begin
ShowMessage('To jest wiadomość od Lazarusa');
end.
Masz też możliwość tworzenia komunikatów w wielu wierszach tekstu za pomocą następujących separatorów linii, wszystkie one będą działać:
- sLineBreak
- LineEnding
- lub za pomocą sekwencji kodów: #13#10
Przykład użycia dialogu z wieloma wierszami tekstu:
program LazMessage;
uses
Dialogs;
begin
ShowMessage('To jest wielowierszowy' + sLineBreak + 'komunikat!' );
end.
MessageBox
function Application.MessageBox(Text, Caption: PChar; Flags: LongInt): Integer;
{ Zdefiniowany jest w pliku Forms.pp jako część TApplication; w związku z tym musi być wywoływana jako Application.Messagebox () lub przy użyciu konstrukcji with Application do ...' }
Opis parametrów
- Text: ciąg znaków, który jest wyświetlany jako monit lub instrukcja w ramce;
- Caption: etykieta tekstowa występująca u góry okna, jako tytuł okna dialogowego;
- Flags: longint - liczba całkowita, na którą składa się kilka różnych stałych w celu zdefiniowania zawartości i zachowania okna dialogowego, na przykład MB_ABORTRETRYIGNORE + MR_ICONQUESTION spowodują, że aplikacja wyświetli ikonę znaku zapytania (?) w oknie z trzema przyciskami: ABORT RETRY IGNORE.
Funkcja ta zwraca też wartość całkowitą odpowiadającą przyciskowi, który został naciśnięty; jej znaczenie można określić przez porównanie do stałych [IDOK..IDHELP]
Można go wywołać jak wywołanie procedury (np. jako instrukcję "MessageBox()", albo lepiej jako wywołanie funkcji "Variable := MessageBox()" - patrz przykład poniżej)
Przykład:
uses
Forms, Dialogs, LCLType;
procedure DisplayMessageBox;
var
Reply, BoxStyle: Integer;
begin
BoxStyle := MB_ICONQUESTION + MB_YESNO;
Reply := Application.MessageBox('Naciśnij wybrany przycisk', 'MessageBoxDemo', BoxStyle);
if Reply = IDYES then Application.MessageBox('Yes ', 'Odpowiedź',MB_ICONINFORMATION)
else Application.MessageBox('No ', 'Odpowiedź', MB_ICONHAND);
end;
Zauważ, że w tym przykładzie łańcuchy "Tak" i "Nie" zostały sztucznie uzupełnione spacjami; w przeciwnym razie skrzynka nie będzie wystarczająco szeroka, aby prawidłowo wyświetlić napis
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;
Istnieją dwie wersje tej funkcji, gdzie pierwszy parametr 'Caption', jest opcjonalny; jeśli pominięto, w polu brakuje tego napisu
Jest to najbardziej kompletny i rozbudowany dialog komunikatów i umożliwia programistom znaczną kontrolę nad wyglądem okna dialogowego. Parametry określające rodzaj pola i jego ikony są określonego typu, a nie liczbami całkowitymi, a przyciski można określić jako zbiór w nawiasach kwadratowych, np. [MbRetry, mbIgnore, mbAbort, mbCancel]. Parametr HelpCtx nie jest obecnie zaimplementowany i powinien być ustawiony na zero. Wartość zwracana przez funkcję odpowiada naciśniętemu przyciskowi wyrażona jako liczba całkowita (patrz definicje poniżej, [mrNone..mrAll]).
Przykład:
uses
Forms, Dialogs, LCLType, Controls;
procedure TryMessageDlg;
begin
if MessageDlg('Pytanie', 'Czy chcesz wykonać?', mtConfirmation,
[mbYes, mbNo, mbIgnore],0) = mrYes
then { Wykonaj dalszą częś programu };
end;
QuestionDlg
Okno dialogowe pytania umożliwia zmianę napisów przycisków oraz ustawienie przycisków domyślnych i anulowania. Przykład:
case QuestionDlg ('Nagłówek','Wiadomość',mtCustom,[mrYes,'Pozytywny', mrNo, 'Negatywny', 'IsDefault'],'') of
mrYes: QuestionDlg ('Nagłówek','Masz na myśli „Tak“',mtCustom,[mrOK,'To prawda'],'');
mrNo: QuestionDlg ('Nagłówek','Och, masz na myśli „Nie“',mtCustom,[mrOK,'Dokładnie'],'');
mrCancel: QuestionDlg ('Nagłówek','Anulowałeś dialog za pomocą ESC lub przycisku zamykania.',mtCustom,[mrOK,'Zgadza się'],'');
end;
Zaawansowane przykłady użycia przycisków (z promptdialog.inc)
[mrOk,mrCancel,'Anuluj teraz',mrIgnore,300,'Zrób to','IsDefault']
Ten przykład pokazuje 4 przyciski:
- 'Ok' zwraca mrOk
- 'Anuluj teraz' zwraca mrCancel
- 'Ignore' zwraca mrIgnore
- 'Zrób to' zwraca liczbę 300. To będzie domyślny przycisk (aktywny)
Zwykle przyciski w oknach dialogowych lazarusa mają ikony. Aby zapobiec wyświetlaniu ikon, można użyć niestandardowych wartości dla wyników wiadomości. Obecnie najwyższa ustandaryzowana wartość to 11. Na przykład:
case QuestionDlg ('Caption','Message',mtCustom,[20,'Positive', 21, 'Negative',22,'I do not know','IsCancel'],'') of
20: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[20,'That is right'],'');
21: QuestionDlg ('Caption','Oh, you mean „No“',mtCustom,[21,'Exactly'],'');
22: QuestionDlg ('Caption','So, please find out!',mtCustom,[22,'Maybe'],'');
end;
Aby ułatwić pracę, można zdefiniować stałe. Na przykład:
const
mrNoneNI= 20;
mrOkNI= mrNoneNI+1;
mrCancelNI= mrNoneNI+2;
mrAbortNI= mrNoneNI+3;
mrRetryNI= mrNoneNI+4;
mrIgnoreNI= mrNoneNI+5;
mrYesNI= mrNoneNI+6;
mrNoNI= mrNoneNI+7;
mrAllNI= mrNoneNI+8;
mrYesToAllNI= mrNoneNI+10;
mrCloseNI= mrNoneNI+11;
mrLastNI= mrCloseNI;
begin
case QuestionDlg ('Caption','Message',mtCustom,[mrYesNI,'Positive', mrNoNI, 'Negative',mrCancelNI,'I do not know','IsCancel'],'') of
mrYesNI: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[mrYesNI,'That is right'],'');
mrNoNI: QuestionDlg ('Caption','Oh, you mean „No“',mtCustom,[mrNoNI,'Exactly'],'');
mrCancelNI: QuestionDlg ('Caption','So, please find out!',mtCustom,[mrCancelNI,'Maybe'],'');
end; //case
end;
Dialogi do wprowadzania tekstu
InputBox
Dialogi do wprowadzania tekstu: wyświetlają wiadomość i oczekują na wprowadzanie tekstu przez użytkownika
function InputBox(const ACaption, APrompt, ADefault: String): String;
Wyświetla okno dialogowe z określonym tytułem oraz podpowiedzią i oczekuje, że użytkownik wprowadzi dane w polu tekstowym. Domyślny ciąg może być opcjonalnie wyświetlany w polu tekstowym. Jako wynik funkcji zwracany jest ciąg znaków wprowadzony przez użytkownika lub ciąg domyślny.
Przykład:
uses
Forms, LCLType, Dialogs, Controls;
procedure TryInputBox;
var
UserString: string;
begin
UserString := InputBox('Podaj tytuł okna InputBox',
'Tu wprowadź wyświetlaną infomację', 'Tekst domyślny');
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;
Istnieją dwie wersje tej funkcji, która wyświetla monit i oczekuje wprowadzenia danych tekstowych przez użytkownika; pierwsza zawiera parametr MaskInput typu boolean, który określa, czy dane wejściowe użytkownika są maskowane gwiazdkami w polu wprowadzania tekstu (np. podczas wpisywania hasła), podczas gdy drugie pomija tę właściwość. Tekst wprowadzony przez użytkownika jest zwracany w parametrze zmiennym "Wartość"; wynik funkcji jest wartością logiczną, która zwraca wartość TRUE, jeśli został naciśnięty przycisk OK, lub FALSE, jeśli pole zostało zamknięte w inny sposób (taki jak kliknięcie ikony "Zamknij" na górnym pasku tytułu). Pominięcie parametru MaskInput jest równoznaczne z ustawieniem FALSE.
Przykład:
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;
PasswordBox
Function PasswordBox(const ACaption, APrompt : String) : String;
Zachowuje się bardzo podobnie do funkcji InputQuery z MaskInput = TRUE; różnica polega na tym, że hasło, które zostało wpisane, jest zwracane w wyniku działania funkcji (tak jak InputBox).
Stałe i typy używane w oknach dialogowych
Kilka stałych i typów istotnych do użycia w oknach dialogowych jest wstępnie zdefiniowanych w bibliotece LCL:
const { Zdefiniowane w LCLType.pp }
stałe całkowitoliczbowe do definiowania typów przycisków i ikon do wyświetlania w 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;
stałe całkowitoliczbowe określające wartość zwracaną z MessageBox zgodnie z naciśniętym przyciskiem
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;
Określa, czy pierwszy, drugi czy trzeci przycisk jest domyślny
MB_DEFBUTTON1 = $00000000;
MB_DEFBUTTON2 = $00000100;
MB_DEFBUTTON3 = $00000200;
MB_DEFBUTTON4 = $00000300;
Parametr Flags MessageBox jest konstruowany przez dodanie stałej przycisku [MB_OK..MB_RETRYCANCEL], opcjonalna stała ikony [MB_ICONHAND..MB_ICONINFORMATION] i opcjonalna stała przycisku domyślnego [MB_DEFBUTTON1..MB_DEFBUTTON3]
Typy używane w MessageDlg, które wymagają parametrów AType TMsgDlgType i 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
);
{ Zdefiniowane w 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;
Tłumaczenie
Na język polski przełożył: --Sławomir Załęcki (talk) 11:19, 17 April 2018 (CEST)