Sign in Join
Wiki copytemporary

Dialog Examples/fi: what changed

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

Title: Dialog Examples/fi

OldNewLine
1+# Joitakin hyödyllisiä dialogeja
2+
3+Lista joistakin hyödyllistä dialogeista joita ei löydy [[Component Palette/fi|komponenttipaletista]]:
4+
5+- `procedure ShowMessage (const Msg: string);`
6+- `function MessageBox (Text, Caption : PChar; Flags: Word): Integer;`
7+- `function MessageDlg (const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: LongInt): Word;`
8+- `function InputBox (const ACaption, APrompt, ADefault: string); string;`
9+- `function InputQuery (const ACaption, APrompt: string; var Value: string): Boolean;`
10+- `function PasswordBox(const ACaption, APrompt : String) : String;`
11+
12+Jokainen näistä komponenteista aiheuttaa sen, että näyttöön tulee pieni ponnahdusikkuna, joka sisältää joitain tietoja ja vaatii käyttäjän vastauksen: joko painikkeen painaminen tai jokin tekstin kirjoittamisen tai molemmat. Ohjelmoijalla on vain vähän hallintaa näiden ponnahdusikkunoiden muodosta, koosta tai sijainnista, mutta hän voi vaikuttaa niiden tekstisisältöön. Syy, miksi usein on useita hyvin samankaltaisia vaihtoehtoja, on sallia erilaisia menetelmiä komponentin kutsumiseen ja datan vastaanottamiseen [[Procedure/fi|aliohjelmasta (procedure)]] tai [[Function/fi|funktiosta]]. Nämä valintaikkunat saattavat olla alustasta riippuvaisia, ts. Ne voidaan näyttää eri tavalla. Esimerkiksi merkkijonot, jotka näkyvät kokonaan Windows XP: ssä, voivat olla katkaistu Windows 7: ssä.
13+
14+## Viestinvälitys dialogit
15+
16+Viestinvälitys dialogit näyttävät viestin ja odottavat että painetaan näppäintä tai napsautetaan (klikataan) hiirtä vastaukseksi.
17+
18+### ShowMessage
19+
20+``` pascal
21+procedure ShowMessage(const Msg: string);
22+```
23+
24+{ Määritelty tiedostossa Dialogs.pp }
25+
26+Yksinkertaisin viestinvälitys dialogi: ottaa yksinkertaisesti [[String/fi|merkkijonon (string)]] parametriksi, näyttää sen vakiolaatikon sisällä, ja odottaa hiiren tai <span class="kbd">Enter</span>-näppäimen painallusta ennen paluuta kutsuvaan [[Routine/fi|rutiiniin]] tai [[Program/fi|ohjelmaan]]. Tämä on modaalinen (modal) aliohjelmakutsu, joka näyttää "laatikon", ottaa hallinnan, eikä vapauta hallintaa ennenkuin sen OK-painonappia on painettu tai muulla tavalla valittu, ennenkuin palaa takaisin kutsukohtaansa.
27+
28+Esimerkki:
29+
30+``` pascal
31+program LazMessage;
32+uses
33+ Dialogs;
34+begin
35+ ShowMessage('This is a message from Lazarus');
36+end.
37+```
38+
39+On myös mahdollista luoda monirivinen viesti seuraavien rivierottimien avulla, ne kaikki toimivat:
40+
41+- `sLineBreak`
42+- [[End of Line/fi|LineEnding]]
43+- tai merkkikoodilla: \#13#10
44+
45+**monirivinen viestiesimerkki:**
46+
47+``` pascal
48+program LazMessage;
49+uses
50+ Dialogs;
51+begin
52+ ShowMessage('This is a multilines' + sLineBreak + 'message!' );
53+end.
54+```
55+
56+### MessageBox
57+
58+``` pascal
59+function Application.MessageBox(Text, Caption: PChar; Flags: LongInt): Integer;
60+```
61+
62+{ Määrittely on tiedostossa Forms.pp osana luokkaa TApplication; siksi sitä täytyy kutsua Application.Messagebox () tai käyttämällä '[[With/fi|with]] `Application` [[Do/fi|do]] ...' rakennetta }
63+
64+Funktion kutsussa parametreihin sisältyy (katso yllä olevaa esittelyä)
65+
66+- Text: merkkijono, joka näytetään kehotteena tai ohjeena laatikossa.
67+- Caption: merkkijono, joka näytetään viestikentän yläosassa.
68+- Flags: [[Longint/fi|longint]] - [[Integer/fi|integer]] jotka on rakennettu lisäämällä yhteen eri [[Constant/fi|vakiot]] laatikon sisällön ja käyttäytymisen määrittelemiseksi, esimerkiksi `MB_ABORTRETRYIGNORE + MR_ICONQUESTION` saa sovelluksen näyttämään kysely (?) -kuvakkeen laatikossa, jossa on kolme painiketta: ABORT RETRY IGNORE.
69+
70+Funktio palauttaa kokonaisluvun arvon, joka vastaa painettua painiketta. Sen arvo voidaan määrittää vakioiden \[IDOK..IDHELP\] perusteella Sitä voidaan kutsua kuin aliohjelmakutsuna (kuten 'MessageBox()' [[statement/fi|käskynä]] tai 'Variable := MessageBox()' funktiokutsuna - katso esimerkki alla)
71+
72+Esimerkki:
73+
74+``` pascal
75+uses
76+ Forms, Dialogs, LCLType;
77+
78+procedure DisplayMessageBox;
79+var
80+ Reply, BoxStyle: Integer;
81+begin
82+ BoxStyle := MB_ICONQUESTION + MB_YESNO;
83+ Reply := Application.MessageBox('Press either button', 'MessageBoxDemo', BoxStyle);
84+ if Reply = IDYES then Application.MessageBox('Yes ', 'Reply',MB_ICONINFORMATION)
85+ else Application.MessageBox('No ', 'Reply', MB_ICONHAND);
86+end;
87+```
88+
89+Huomaa, että tässä esimerkissä 'Yes' ja 'No' merkkijonot on täytetty välilyönneillä; muuten laatikko ei olisi riittävän leveä kuvatekstin näyttämiseksi oikein
90+
91+<center>
92+
93+![](/wiki-images/c/c2/MessageBoxDemo.png) ![](/wiki-images/0/06/ReplyYes.png)
94+
95+</center>
96+
97+### MessageDLG
98+
99+``` pascal
100+function MessageDlg(const aMsg: string; DlgType: TMsgDlgType;
101+ Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
102+function MessageDlg(const aCaption, aMsg: string; DlgType: TMsgDlgType;
103+ Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
104+```
105+
106+Tämän funktion kaksi versiota, esim. Ensimmäinen 'Caption' -parametri on valinnainen; jos se jätetään pois, otsikkotekstitys puuttuu ruudusta
107+
108+Tämä on kaikkein täydellisin ja yksityiskohtaisin viestien valintaikkunoista, ja antaa ohjelmoijalle huomattavan mahdollisuuden hallita valintaikkunan ulkoasua. Laatikon tyyppiä ja sen kuvaketta määrittelevät parametrit ovat pikemminkin [[Set/fi|set]] tyyppisiä kuin kokonaislukuja. Painikkeet voidaan määrittää [[square brackets/fi|hakasulkeissa]] esim. `[mbRetry, mbIgnore, mbAbort, mbCancel]`. HelpCtx-parametria ei ole tällä hetkellä toteutettu, sen tulisi olla nolla. Funktion paluuarvo on painetun painikkeen tunnus, ilmaistuna kokonaislukuna (katso alla olevat määritelmät, \[mrNone..mrAll\]).
109+
110+Esimerkki:
111+
112+``` pascal
113+uses
114+ Forms, Dialogs, LCLType, Controls;
115+
116+procedure TryMessageDlg;
117+begin
118+ if MessageDlg('Question', 'Do you wish to Execute?', mtConfirmation,
119+ [mbYes, mbNo, mbIgnore],0) = mrYes
120+ then { Execute rest of Program };
121+end;
122+```
123+
124+<center>
125+
126+<figure>
127+<img src="Question.png" title="Question.png" />
128+<figcaption>Question.png</figcaption>
129+</figure>
130+
131+</center>
132+
133+### QuestionDlg
134+
135+Kysymysvalintaikkunassa voidaan muuttaa painikkeiden kuvatekstejä ja asettaa oletus- ja peruutuspainikkeita
136+
137+Esimerkki:
138+
139+``` pascal
140+ case QuestionDlg ('Caption','Message',mtCustom,[mrYes,'Positive', mrNo, 'Negative', 'IsDefault'],'') of
141+ mrYes: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[mrOK,'That is right'],'');
142+ mrNo: QuestionDlg ('Caption','Oh, you mean „No“',mtCustom,[mrOK,'Exactly'],'');
143+ mrCancel: QuestionDlg ('Caption','You canceled the dialog with ESC or close button.',mtCustom,[mrOK,'Exactly'],'');
144+ end;
145+```
146+
147+<center>
148+
149+<figure>
150+<img src="QuestionDlg.png" title="QuestionDlg.png" />
151+<figcaption>QuestionDlg.png</figcaption>
152+</figure>
153+
154+</center>
155+
156+> **Note:** Jos käyttäjä peruuttaa valintaikkunan eikä 'IsCancel' -painiketta ole määritetty, mrCancel palautetaan! Jos haluat ohjata ESC/close määritettyä painiketta, käytä 'IsCancel' -parametria heti peruutuspainikkeen jälkeen.
157+
158+> **Note:** Paikallisten aakkosten kirjainten käyttäminen UnicodeString-tyyppisinä painikkeina voi aiheuttaa virheitä (löytyi v1.6.4).
159+
160+Edistyksellinen esimerkki painikkeille (promptdialog.inc)
161+
162+``` pascal
163+ [mrOk,mrCancel,'Cancel now',mrIgnore,300,'Do it','IsDefault']
164+```
165+
166+Tämän tuloksena saadaan 4 painonappia:
167+
168+- 'Ok' palauttaa mrOk
169+- 'Cancel now' palauttaa mrCancel
170+- 'Ignore' palauttaa mrIgnore
171+- 'Do it' palauttaa 300. Tämä on oletuspainike.
172+
173+Yleensä Lazarus-valintaikkunoiden painikkeissa on kuvakkeet. Kuvakkeiden näkymisen estämiseksi voidaan käyttää viestien tulosten standardoimattomia arvoja. Tällä hetkellä korkein standardoitu arvo on 11. Esimerkiksi:
174+
175+``` pascal
176+ case QuestionDlg ('Caption','Message',mtCustom,[20,'Positive', 21, 'Negative',22,'I do not know','IsCancel'],'') of
177+ 20: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[20,'That is right'],'');
178+ 21: QuestionDlg ('Caption','Oh, you mean „No“',mtCustom,[21,'Exactly'],'');
179+ 22: QuestionDlg ('Caption','So, please find out!',mtCustom,[22,'Maybe'],'');
180+ end;
181+```
182+
183+Työn helpottamiseksi vakiot voidaan määritellä. Esimerkiksi:
184+
185+``` pascal
186+const
187+ mrNoneNI= 20;
188+ mrOkNI= mrNoneNI+1;
189+ mrCancelNI= mrNoneNI+2;
190+ mrAbortNI= mrNoneNI+3;
191+ mrRetryNI= mrNoneNI+4;
192+ mrIgnoreNI= mrNoneNI+5;
193+ mrYesNI= mrNoneNI+6;
194+ mrNoNI= mrNoneNI+7;
195+ mrAllNI= mrNoneNI+8;
196+ mrYesToAllNI= mrNoneNI+10;
197+ mrCloseNI= mrNoneNI+11;
198+ mrLastNI= mrCloseNI;
199+begin
200+ case QuestionDlg ('Caption','Message',mtCustom,[mrYesNI,'Positive', mrNoNI, 'Negative',mrCancelNI,'I do not know','IsCancel'],'') of
201+ mrYesNI: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[mrYesNI,'That is right'],'');
202+ mrNoNI: QuestionDlg ('Caption','Oh, you mean „No“',mtCustom,[mrNoNI,'Exactly'],'');
203+ mrCancelNI: QuestionDlg ('Caption','So, please find out!',mtCustom,[mrCancelNI,'Maybe'],'');
204+ end; //case
205+end;
206+```
207+
208+<center>
209+
210+<figure>
211+<img src="QuestionDlgNoButIcons.png" title="QuestionDlgNoButIcons.png" />
212+<figcaption>QuestionDlgNoButIcons.png</figcaption>
213+</figure>
214+
215+</center>
216+
217+## Tekstinluku dialogit
218+
219+### InputBox
220+
221+Tekstinluku dialogi: näyttää viestin ja odottaa käyttäjän tekstinsyöttöä
222+
223+``` pascal
224+function InputBox(const ACaption, APrompt, ADefault: String): String;
225+```
226+
227+Näyttää laatikon, jossa on määritetty otsikko ja kehote, ja odottaa käyttäjän syöttämää tekstiä tekstikenttään. Oletusmerkkijono voidaan valinnaisesti näyttää tekstiruudussa. Käyttäjän syöttämä tai oletusmerkkijono palautetaan funktion tuloksena.
228+
229+Esimerkki:
230+
231+``` pascal
232+uses
233+ Forms, LCLType, Dialogs, Controls;
234+
235+procedure TryInputBox;
236+var
237+ UserString: string;
238+begin
239+ UserString := InputBox('Get some text input',
240+ 'Please type in some information', 'Some sample text');
241+ ShowMessage(UserString)
242+end;
243+```
244+
245+### InputQuery
246+
247+``` pascal
248+function InputQuery(const ACaption, APrompt : String;
249+ MaskInput : Boolean; var Value : String) : Boolean;
250+function InputQuery(const ACaption, APrompt : String;
251+ var Value : String) : Boolean;
252+```
253+
254+Kaksi tämän funktion erilaista versiota, joka näyttää kehotteen ja odottaa käyttäjän syöttämää tekstitietoa; Ensimmäinen sisältää MaskInput-[[Boolean/fi|boolean]]-parametrin, joka määrittää, onko käyttäjän syöttämät tekstitulokentässä [[*/fi|asteriskimerkki (*)]] peittämässä tekstiä (kuten salasanan syöttämisen aikana), kun taas toinen jättää tämän ominaisuuden pois Käyttäjän syöttämä teksti palautetaan muuttujan parametriin 'Value'; function tulos on boolean arvo, joka paluuarvo on [[True/fi|true]], jos OK-painiketta painetaan, tai [[False|false]], jos ikkuna suljettiin jollain muulla mekanismilla (kuten klikkaamalla 'Sulje'/'close' -kuvaketta yläotsikkopalkissa). MaskInput-parametrin ohittaminen vastaa sen `false` arvon asettamista.
255+
256+Esimerkki:
257+
258+``` pascal
259+uses
260+ Forms, LCLType, Dialogs, Controls;
261+
262+procedure TryInputQuery;
263+var
264+ QueryResult: Boolean;
265+ UserString: string;
266+begin
267+ if InputQuery('Question', 'Type in some data', TRUE, UserString)
268+ then ShowMessage(UserString)
269+ else
270+ begin
271+ InputQuery('Don''t be silly', 'Please try again', UserString);
272+ ShowMessage(UserString);
273+ end
274+end;
275+```
276+
277+<center>
278+
279+<figure>
280+<img src="MessageDlgQuestion.png" title="MessageDlgQuestion.png" />
281+<figcaption>MessageDlgQuestion.png</figcaption>
282+</figure>
283+
284+</center>
285+
286+<center>
287+
288+<figure>
289+<img src="DontBeSillly.png" title="DontBeSillly.png" />
290+<figcaption>DontBeSillly.png</figcaption>
291+</figure>
292+
293+</center>
294+
295+### PasswordBox
296+
297+``` pascal
298+Function PasswordBox(const ACaption, APrompt : String) : String;
299+```
300+
301+Toimii hyvin samalla tavalla kuin InputQuery-toiminto, jossa MaskInput = TRUE; ero on siinä, että kirjoitettu salasana palautetaan funktion tuloksena (kuten InputBox).
302+
303+## Viestinvälitys-dialogeissa käytetyt tyypit ja vakiot
304+
305+Useat valintaikkunoiden kanssa käytettävät vakiot ja tyypit on ennalta määritetty [[LCL/fi|LCL]]-kirjastossa:
306+
307+const { määritelty LCLType.pp }
308+
309+Kokonaislukuvakioita painityyppien määrittelemiseksi ja kuvakkeita näytettäväksi MessageBoxissa
310+
311+``` pascal
312+MB_OK = $00000000;
313+MB_OKCANCEL = $00000001;
314+MB_ABORTRETRYIGNORE = $00000002;
315+MB_YESNOCANCEL = $00000003;
316+MB_YESNO = $00000004;
317+MB_RETRYCANCEL = $00000005;
318+
319+
320+MB_ICONHAND = $00000010;
321+MB_ICONQUESTION = $00000020;
322+MB_ICONEXCLAMATION = $00000030;
323+MB_ICONASTERICK = $00000040;
324+MB_ICONWARNING = MB_ICONEXCLAMATION;
325+MB_ICONERROR = MB_ICONHAND;
326+MB_ICONINFORMATION = MB_ICONASTERICK;
327+```
328+
329+Kokonaislukuvakioita, jotka määrittelevät palautusarvon MessageBoxista sen mukaan, mitä painiketta painettiin
330+
331+``` pascal
332+IDOK = 1; ID_OK = IDOK;
333+IDCANCEL = 2; ID_CANCEL = IDCANCEL;
334+IDABORT = 3; ID_ABORT = IDABORT;
335+IDRETRY = 4; ID_RETRY = IDRETRY;
336+IDIGNORE = 5; ID_IGNORE = IDIGNORE;
337+IDYES = 6; ID_YES = IDYES;
338+IDNO = 7; ID_NO = IDNO;
339+IDCLOSE = 8; ID_CLOSE = IDCLOSE;
340+IDHELP = 9; ID_HELP = IDHELP;
341+```
342+
343+Määrittämään, onko ensimmäinen, toinen tai kolmas painike oletusasetus
344+
345+``` pascal
346+MB_DEFBUTTON1 = $00000000;
347+MB_DEFBUTTON2 = $00000100;
348+MB_DEFBUTTON3 = $00000200;
349+MB_DEFBUTTON4 = $00000300;
350+```
351+
352+MessageBoxin Flags-parametri rakennetaan lisäämällä painikevakio \[MB_OK..MB_RETRYCANCEL\], valinnainen kuvakevakio \[MB_ICONHAND..MB_ICONINFORMATION\] ja valinnainen oletuspainike vakio \[MB_DEFBUTTON1..MB_DEFBUTTON3\]
353+
354+Tyypit käytettäväksi MessageDlg-sovelluksessa, joka tarvitsee parametreja AType of TMsgDlgType ja TMSgDlgButtons
355+
356+``` pascal
357+{ määritelty Dialogs.pp }
358+type
359+ TMsgDlgType = (mtWarning, mtError, mtInformation, mtConfirmation,
360+ mtCustom);
361+ TMsgDlgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore,
362+ mbAll, mbNoToAll, mbYesToAll, mbHelp, mbClose);
363+ TMsgDlgButtons = set of TMsgDlgBtn;
364+
365+
366+const
367+ mbYesNoCancel = [mbYes, mbNo, mbCancel];
368+ mbOKCancel = [mbOK, mbCancel];
369+ mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];
370+
371+
372+ MsgDlgBtnToBitBtnKind: array[TMsgDlgBtn] of TBitBtnKind = (
373+ bkYes, bkNo, bkOK, bkCancel, bkAbort, bkRetry, bkIgnore,
374+ bkAll, bkNoToAll, bkYesToAll, bkHelp, bkClose
375+ );
376+
377+
378+ BitBtnKindToMsgDlgBtn: array[TBitBtnKind] of TMsgDlgBtn = (
379+ mbOk, mbOK, mbCancel, mbHelp, mbYes, mbNo,
380+ mbClose, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToALl, mbYesToAll
381+ );
382+
383+
384+{ määritelty Controls.pp }
385+const
386+ mrNone = 0;
387+ mrOK = mrNone + 1;
388+ mrCancel = mrNone + 2;
389+ mrAbort = mrNone + 3;
390+ mrRetry = mrNone + 4;
391+ mrIgnore = mrNone + 5;
392+ mrYes = mrNone + 6;
393+ mrNo = mrNone + 7;
394+ mrAll = mrNone + 8;
395+ mrNoToAll = mrNone + 9;
396+ mrYesToAll = mrNone + 10;
397+ mrLast = mrYesToAll;
398+```
399+
400+---
401+*From the Free Pascal wiki, page "Dialog Examples/fi", as it stood on 2019-11-10 after a change by Djzepi, 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