Sign in Join
Wiki copytemporary

Dialog Examples/pl: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
1-<div style="font-size:1.88em;margin:0.75em 0;">
2-
31Przykłady użycia okien dialogowych
42
5-</div>
6-
73# Kilka przydatnych okien dialogowych
84
95Oto kilka przydatnych okien dialogowych, których nie znajdziesz w palecie komponentów:
106
117- procedure ShowMessage (const Msg: string);
128- function MessageBox (Text, Caption : PChar; Flags: Word): Integer;
139- function MessageDlg (const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: LongInt): Word;
1410- function InputBox (const ACaption, APrompt, ADefault: string); string;
1511- function InputQuery (const ACaption, APrompt: string; var Value: string): Boolean;
1612- function PasswordBox(const ACaption, APrompt : String) : String;
1713
1814Każ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ą.\
1915Powodem, 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.
2016
2117## Dialogi wiadomości
2218
2319Dialogi wiadomości wyświetlają komunikat i czekają na naciśnięcie jakiegoś klawisza lub na kliknięcie myszą.
2420
2521### ShowMessage
2622
2723``` pascal
2824procedure ShowMessage(const Msg: string);
2925```
3026
3127{ Zdefiniowany jest w pliku Dialogs.pp }
3228
3329Najprostsze 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.\
3430Jest 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.
3531
3632Przykład:
3733
3834``` pascal
3935program LazMessage;
4036uses
4137 Dialogs;
4238begin
4339 ShowMessage('To jest wiadomość od Lazarusa');
4440end.
4541```
4642
4743Masz też możliwość tworzenia komunikatów w wielu wierszach tekstu za pomocą następujących separatorów linii, wszystkie one będą działać:
4844
4945- sLineBreak
5046- LineEnding
5147- lub za pomocą sekwencji kodów: \#13#10
5248
5349**Przykład użycia dialogu z wieloma wierszami tekstu:**
5450
5551``` pascal
5652program LazMessage;
5753uses
5854 Dialogs;
5955begin
6056 ShowMessage('To jest wielowierszowy' + sLineBreak + 'komunikat!' );
6157end.
6258```
6359
6460### MessageBox
6561
6662``` pascal
6763function Application.MessageBox(Text, Caption: PChar; Flags: LongInt): Integer;
6864```
6965
7066{ 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 ...' }
7167
7268Opis parametrów
7369
7470- Text: ciąg znaków, który jest wyświetlany jako monit lub instrukcja w ramce;
7571- Caption: etykieta tekstowa występująca u góry okna, jako tytuł okna dialogowego;
7672- 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.
7773
7874Funkcja 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\]
7975
8076Moż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)
8177
8278Przykład:
8379
8480``` pascal
8581uses
8682 Forms, Dialogs, LCLType;
8783
8884procedure DisplayMessageBox;
8985var
9086 Reply, BoxStyle: Integer;
9187begin
9288 BoxStyle := MB_ICONQUESTION + MB_YESNO;
9389 Reply := Application.MessageBox('Naciśnij wybrany przycisk', 'MessageBoxDemo', BoxStyle);
9490 if Reply = IDYES then Application.MessageBox('Yes ', 'Odpowiedź',MB_ICONINFORMATION)
9591 else Application.MessageBox('No ', 'Odpowiedź', MB_ICONHAND);
9692end;
9793```
9894
9995Zauważ, ż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
10096
101-<center>
102-
10397![](/wiki-images/c/c2/MessageBoxDemo.png) ![](/wiki-images/0/06/ReplyYes.png)
10498
105-</center>
106-
10799### MessageDLG
108100
109101``` pascal
110102function MessageDlg(const aMsg: string; DlgType: TMsgDlgType;
111103 Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
112104function MessageDlg(const aCaption, aMsg: string; DlgType: TMsgDlgType;
113105 Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
114106```
115107
116108Istnieją dwie wersje tej funkcji, gdzie pierwszy parametr 'Caption', jest opcjonalny; jeśli pominięto, w polu brakuje tego napisu
117109
118110Jest 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\]).
119111
120112Przykład:
121113
122114``` pascal
123115uses
124116 Forms, Dialogs, LCLType, Controls;
125117
126118procedure TryMessageDlg;
127119begin
128120 if MessageDlg('Pytanie', 'Czy chcesz wykonać?', mtConfirmation,
129121 [mbYes, mbNo, mbIgnore],0) = mrYes
130122 then { Wykonaj dalszą częś programu };
131123end;
132124```
133125
134-<center>
135-
136-<figure>
137-<img src="Question.png" title="Question.png" />
138-<figcaption>Question.png</figcaption>
139-</figure>
140-
141-</center>
126+![](/wiki-images/3/30/Question.png)
142127
143128### QuestionDlg
144129
145130Okno dialogowe pytania umożliwia zmianę napisów przycisków oraz ustawienie przycisków domyślnych i anulowania. Przykład:
146131
147132``` pascal
148133 case QuestionDlg ('Nagłówek','Wiadomość',mtCustom,[mrYes,'Pozytywny', mrNo, 'Negatywny', 'IsDefault'],'') of
149134 mrYes: QuestionDlg ('Nagłówek','Masz na myśli „Tak“',mtCustom,[mrOK,'To prawda'],'');
150135 mrNo: QuestionDlg ('Nagłówek','Och, masz na myśli „Nie“',mtCustom,[mrOK,'Dokładnie'],'');
151136 mrCancel: QuestionDlg ('Nagłówek','Anulowałeś dialog za pomocą ESC lub przycisku zamykania.',mtCustom,[mrOK,'Zgadza się'],'');
152137 end;
153138```
154139
155-<center>
156-
157-<figure>
158-<img src="QuestionDlg.png" title="QuestionDlg.png" />
159-<figcaption>QuestionDlg.png</figcaption>
160-</figure>
161-
162-</center>
140+![](/wiki-images/a/ac/QuestionDlg.png)
163141
164142> **Note:** Jeśli użytkownik anuluje okno dialogowe i nie ma zdefiniowanego przycisku 'IsCancel', to funkcja zwraca wartość mrCancel! Jeśli chcesz przekierować ESC/zamknij do zdefiniowanego przycisku, użyj parametru 'IsCancel' zaraz po przycisku anulowania.
165143
166144> **Note:** Używanie liter alfabetu lokalnego typu UnicodeString jako podpisów pod przyciskami może powodować błędy (podane w wersji 1.6.4).
167145
168146Zaawansowane przykłady użycia przycisków (z promptdialog.inc)
169147
170148``` pascal
171149 [mrOk,mrCancel,'Anuluj teraz',mrIgnore,300,'Zrób to','IsDefault']
172150```
173151
174152Ten przykład pokazuje 4 przyciski:
175153
176154- 'Ok' zwraca mrOk
177155- 'Anuluj teraz' zwraca mrCancel
178156- 'Ignore' zwraca mrIgnore
179157- 'Zrób to' zwraca liczbę 300. To będzie domyślny przycisk (aktywny)
180158
181159Zwykle 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:
182160
183161``` pascal
184162 case QuestionDlg ('Caption','Message',mtCustom,[20,'Positive', 21, 'Negative',22,'I do not know','IsCancel'],'') of
185163 20: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[20,'That is right'],'');
186164 21: QuestionDlg ('Caption','Oh, you mean „No“',mtCustom,[21,'Exactly'],'');
187165 22: QuestionDlg ('Caption','So, please find out!',mtCustom,[22,'Maybe'],'');
188166 end;
189167```
190168
191169Aby ułatwić pracę, można zdefiniować stałe. Na przykład:
192170
193171``` pascal
194172const
195173 mrNoneNI= 20;
196174 mrOkNI= mrNoneNI+1;
197175 mrCancelNI= mrNoneNI+2;
198176 mrAbortNI= mrNoneNI+3;
199177 mrRetryNI= mrNoneNI+4;
200178 mrIgnoreNI= mrNoneNI+5;
201179 mrYesNI= mrNoneNI+6;
202180 mrNoNI= mrNoneNI+7;
203181 mrAllNI= mrNoneNI+8;
204182 mrYesToAllNI= mrNoneNI+10;
205183 mrCloseNI= mrNoneNI+11;
206184 mrLastNI= mrCloseNI;
207185begin
208186 case QuestionDlg ('Caption','Message',mtCustom,[mrYesNI,'Positive', mrNoNI, 'Negative',mrCancelNI,'I do not know','IsCancel'],'') of
209187 mrYesNI: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[mrYesNI,'That is right'],'');
210188 mrNoNI: QuestionDlg ('Caption','Oh, you mean „No“',mtCustom,[mrNoNI,'Exactly'],'');
211189 mrCancelNI: QuestionDlg ('Caption','So, please find out!',mtCustom,[mrCancelNI,'Maybe'],'');
212190 end; //case
213191end;
214192```
215193
216-<center>
217-
218-<figure>
219-<img src="QuestionDlgNoButIcons.png" title="QuestionDlgNoButIcons.png" />
220-<figcaption>QuestionDlgNoButIcons.png</figcaption>
221-</figure>
222-
223-</center>
194+![](/wiki-images/1/15/QuestionDlgNoButIcons.png)
224195
225196## Dialogi do wprowadzania tekstu
226197
227198### InputBox
228199
229200Dialogi do wprowadzania tekstu: wyświetlają wiadomość i oczekują na wprowadzanie tekstu przez użytkownika
230201
231202``` pascal
232203function InputBox(const ACaption, APrompt, ADefault: String): String;
233204```
234205
235206Wyś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.
236207
237208Przykład:
238209
239210``` pascal
240211uses
241212 Forms, LCLType, Dialogs, Controls;
242213
243214procedure TryInputBox;
244215var
245216 UserString: string;
246217begin
247218 UserString := InputBox('Podaj tytuł okna InputBox',
248219 'Tu wprowadź wyświetlaną infomację', 'Tekst domyślny');
249220 ShowMessage(UserString)
250221end;
251222```
252223
253224### InputQuery
254225
255226``` pascal
256227function InputQuery(const ACaption, APrompt : String;
257228 MaskInput : Boolean; var Value : String) : Boolean;
258229function InputQuery(const ACaption, APrompt : String;
259230 var Value : String) : Boolean;
260231```
261232
262233Istnieją 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.
263234
264235Przykład:
265236
266237``` pascal
267238uses
268239 Forms, LCLType, Dialogs, Controls;
269240
270241procedure TryInputQuery;
271242var
272243 QueryResult: Boolean;
273244 UserString: string;
274245begin
275246 if InputQuery('Question', 'Type in some data', TRUE, UserString)
276247 then ShowMessage(UserString)
277248 else
278249 begin
279250 InputQuery('Don''t be silly', 'Please try again', UserString);
280251 ShowMessage(UserString);
281252 end
282253end;
283254```
284255
285-<center>
286-
287-<figure>
288-<img src="MessageDlgQuestion.png" title="MessageDlgQuestion.png" />
289-<figcaption>MessageDlgQuestion.png</figcaption>
290-</figure>
291-
292-</center>
293-
294-<center>
295-
296-<figure>
297-<img src="DontBeSillly.png" title="DontBeSillly.png" />
298-<figcaption>DontBeSillly.png</figcaption>
299-</figure>
256+![](/wiki-images/d/d0/MessageDlgQuestion.png)
300257
301-</center>
258+![](/wiki-images/c/ce/DontBeSillly.png)
302259
303260### PasswordBox
304261
305262``` pascal
306263Function PasswordBox(const ACaption, APrompt : String) : String;
307264```
308265
309266Zachowuje 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).
310267
311268## Stałe i typy używane w oknach dialogowych
312269
313270Kilka stałych i typów istotnych do użycia w oknach dialogowych jest wstępnie zdefiniowanych w bibliotece LCL:
314271
315272const { Zdefiniowane w LCLType.pp }
316273
317274stałe całkowitoliczbowe do definiowania typów przycisków i ikon do wyświetlania w MessageBox
318275
319276``` pascal
320277MB_OK = $00000000;
321278MB_OKCANCEL = $00000001;
322279MB_ABORTRETRYIGNORE = $00000002;
323280MB_YESNOCANCEL = $00000003;
324281MB_YESNO = $00000004;
325282MB_RETRYCANCEL = $00000005;
326283
327284
328285MB_ICONHAND = $00000010;
329286MB_ICONQUESTION = $00000020;
330287MB_ICONEXCLAMATION = $00000030;
331288MB_ICONASTERICK = $00000040;
332289MB_ICONWARNING = MB_ICONEXCLAMATION;
333290MB_ICONERROR = MB_ICONHAND;
334291MB_ICONINFORMATION = MB_ICONASTERICK;
335292```
336293
337294stałe całkowitoliczbowe określające wartość zwracaną z MessageBox zgodnie z naciśniętym przyciskiem
338295
339296``` pascal
340297IDOK = 1; ID_OK = IDOK;
341298IDCANCEL = 2; ID_CANCEL = IDCANCEL;
342299IDABORT = 3; ID_ABORT = IDABORT;
343300IDRETRY = 4; ID_RETRY = IDRETRY;
344301IDIGNORE = 5; ID_IGNORE = IDIGNORE;
345302IDYES = 6; ID_YES = IDYES;
346303IDNO = 7; ID_NO = IDNO;
347304IDCLOSE = 8; ID_CLOSE = IDCLOSE;
348305IDHELP = 9; ID_HELP = IDHELP;
349306```
350307
351308Określa, czy pierwszy, drugi czy trzeci przycisk jest domyślny
352309
353310``` pascal
354311MB_DEFBUTTON1 = $00000000;
355312MB_DEFBUTTON2 = $00000100;
356313MB_DEFBUTTON3 = $00000200;
357314MB_DEFBUTTON4 = $00000300;
358315```
359316
360317Parametr 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\]
361318
362319Typy używane w MessageDlg, które wymagają parametrów AType TMsgDlgType i AButtons of TMSgDlgButtons
363320
364321``` pascal
365322{ Defined in Dialogs.pp }
366323type
367324 TMsgDlgType = (mtWarning, mtError, mtInformation, mtConfirmation,
368325 mtCustom);
369326 TMsgDlgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore,
370327 mbAll, mbNoToAll, mbYesToAll, mbHelp, mbClose);
371328 TMsgDlgButtons = set of TMsgDlgBtn;
372329
373330
374331const
375332 mbYesNoCancel = [mbYes, mbNo, mbCancel];
376333 mbOKCancel = [mbOK, mbCancel];
377334 mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];
378335
379336
380337 MsgDlgBtnToBitBtnKind: array[TMsgDlgBtn] of TBitBtnKind = (
381338 bkYes, bkNo, bkOK, bkCancel, bkAbort, bkRetry, bkIgnore,
382339 bkAll, bkNoToAll, bkYesToAll, bkHelp, bkClose
383340 );
384341
385342
386343 BitBtnKindToMsgDlgBtn: array[TBitBtnKind] of TMsgDlgBtn = (
387344 mbOk, mbOK, mbCancel, mbHelp, mbYes, mbNo,
388345 mbClose, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToALl, mbYesToAll
389346 );
390347
391348
392349{ Zdefiniowane w Controls.pp }
393350const
394351 mrNone = 0;
395352 mrOK = mrNone + 1;
396353 mrCancel = mrNone + 2;
397354 mrAbort = mrNone + 3;
398355 mrRetry = mrNone + 4;
399356 mrIgnore = mrNone + 5;
400357 mrYes = mrNone + 6;
401358 mrNo = mrNone + 7;
402359 mrAll = mrNone + 8;
403360 mrNoToAll = mrNone + 9;
404361 mrYesToAll = mrNone + 10;
405362 mrLast = mrYesToAll;
406363```
407364
408365**Tłumaczenie**
409366
410367Na język polski przełożył: --Sławomir Załęcki ([[User talk:Slawek|talk]]) 11:19, 17 April 2018 (CEST)
411368
412369---
413370*From the Free Pascal wiki, page "Dialog Examples/pl", as it stood on 2022-02-05 after a change by Slawek, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history