Sign in Join
Wiki copytemporary

Dialog Examples/fi: what changed

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

OldNewLine
11# Joitakin hyödyllisiä dialogeja
22
33Lista joistakin hyödyllistä dialogeista joita ei löydy [[Component Palette/fi|komponenttipaletista]]:
44
55- `procedure ShowMessage (const Msg: string);`
66- `function MessageBox (Text, Caption : PChar; Flags: Word): Integer;`
77- `function MessageDlg (const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: LongInt): Word;`
88- `function InputBox (const ACaption, APrompt, ADefault: string); string;`
99- `function InputQuery (const ACaption, APrompt: string; var Value: string): Boolean;`
1010- `function PasswordBox(const ACaption, APrompt : String) : String;`
1111
1212Jokainen 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ä.
1313
1414## Viestinvälitys dialogit
1515
1616Viestinvälitys dialogit näyttävät viestin ja odottavat että painetaan näppäintä tai napsautetaan (klikataan) hiirtä vastaukseksi.
1717
1818### ShowMessage
1919
2020``` pascal
2121procedure ShowMessage(const Msg: string);
2222```
2323
2424{ Määritelty tiedostossa Dialogs.pp }
2525
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.
26+Yksinkertaisin viestinvälitys dialogi: ottaa yksinkertaisesti [[String/fi|merkkijonon (string)]] parametriksi, näyttää sen vakiolaatikon sisällä, ja odottaa hiiren tai `Enter`-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.
2727
2828Esimerkki:
2929
3030``` pascal
3131program LazMessage;
3232uses
3333 Dialogs;
3434begin
3535 ShowMessage('This is a message from Lazarus');
3636end.
3737```
3838
3939On myös mahdollista luoda monirivinen viesti seuraavien rivierottimien avulla, ne kaikki toimivat:
4040
4141- `sLineBreak`
4242- [[End of Line/fi|LineEnding]]
4343- tai merkkikoodilla: \#13#10
4444
4545**monirivinen viestiesimerkki:**
4646
4747``` pascal
4848program LazMessage;
4949uses
5050 Dialogs;
5151begin
5252 ShowMessage('This is a multilines' + sLineBreak + 'message!' );
5353end.
5454```
5555
5656### MessageBox
5757
5858``` pascal
5959function Application.MessageBox(Text, Caption: PChar; Flags: LongInt): Integer;
6060```
6161
6262{ 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 }
6363
6464Funktion kutsussa parametreihin sisältyy (katso yllä olevaa esittelyä)
6565
6666- Text: merkkijono, joka näytetään kehotteena tai ohjeena laatikossa.
6767- Caption: merkkijono, joka näytetään viestikentän yläosassa.
6868- 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.
6969
7070Funktio 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)
7171
7272Esimerkki:
7373
7474``` pascal
7575uses
7676 Forms, Dialogs, LCLType;
7777
7878procedure DisplayMessageBox;
7979var
8080 Reply, BoxStyle: Integer;
8181begin
8282 BoxStyle := MB_ICONQUESTION + MB_YESNO;
8383 Reply := Application.MessageBox('Press either button', 'MessageBoxDemo', BoxStyle);
8484 if Reply = IDYES then Application.MessageBox('Yes ', 'Reply',MB_ICONINFORMATION)
8585 else Application.MessageBox('No ', 'Reply', MB_ICONHAND);
8686end;
8787```
8888
8989Huomaa, 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
9090
91-<center>
92-
9391![](/wiki-images/c/c2/MessageBoxDemo.png) ![](/wiki-images/0/06/ReplyYes.png)
9492
95-</center>
96-
9793### MessageDLG
9894
9995``` pascal
10096function MessageDlg(const aMsg: string; DlgType: TMsgDlgType;
10197 Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
10298function MessageDlg(const aCaption, aMsg: string; DlgType: TMsgDlgType;
10399 Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
104100```
105101
106102Tämän funktion kaksi versiota, esim. Ensimmäinen 'Caption' -parametri on valinnainen; jos se jätetään pois, otsikkotekstitys puuttuu ruudusta
107103
108104Tä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\]).
109105
110106Esimerkki:
111107
112108``` pascal
113109uses
114110 Forms, Dialogs, LCLType, Controls;
115111
116112procedure TryMessageDlg;
117113begin
118114 if MessageDlg('Question', 'Do you wish to Execute?', mtConfirmation,
119115 [mbYes, mbNo, mbIgnore],0) = mrYes
120116 then { Execute rest of Program };
121117end;
122118```
123119
124-<center>
125-
126-<figure>
127-<img src="Question.png" title="Question.png" />
128-<figcaption>Question.png</figcaption>
129-</figure>
130-
131-</center>
120+![](/wiki-images/3/30/Question.png)
132121
133122### QuestionDlg
134123
135124Kysymysvalintaikkunassa voidaan muuttaa painikkeiden kuvatekstejä ja asettaa oletus- ja peruutuspainikkeita
136125
137126Esimerkki:
138127
139128``` pascal
140129 case QuestionDlg ('Caption','Message',mtCustom,[mrYes,'Positive', mrNo, 'Negative', 'IsDefault'],'') of
141130 mrYes: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[mrOK,'That is right'],'');
142131 mrNo: QuestionDlg ('Caption','Oh, you mean „No“',mtCustom,[mrOK,'Exactly'],'');
143132 mrCancel: QuestionDlg ('Caption','You canceled the dialog with ESC or close button.',mtCustom,[mrOK,'Exactly'],'');
144133 end;
145134```
146135
147-<center>
148-
149-<figure>
150-<img src="QuestionDlg.png" title="QuestionDlg.png" />
151-<figcaption>QuestionDlg.png</figcaption>
152-</figure>
153-
154-</center>
136+![](/wiki-images/a/ac/QuestionDlg.png)
155137
156138> **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.
157139
158140> **Note:** Paikallisten aakkosten kirjainten käyttäminen UnicodeString-tyyppisinä painikkeina voi aiheuttaa virheitä (löytyi v1.6.4).
159141
160142Edistyksellinen esimerkki painikkeille (promptdialog.inc)
161143
162144``` pascal
163145 [mrOk,mrCancel,'Cancel now',mrIgnore,300,'Do it','IsDefault']
164146```
165147
166148Tämän tuloksena saadaan 4 painonappia:
167149
168150- 'Ok' palauttaa mrOk
169151- 'Cancel now' palauttaa mrCancel
170152- 'Ignore' palauttaa mrIgnore
171153- 'Do it' palauttaa 300. Tämä on oletuspainike.
172154
173155Yleensä 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:
174156
175157``` pascal
176158 case QuestionDlg ('Caption','Message',mtCustom,[20,'Positive', 21, 'Negative',22,'I do not know','IsCancel'],'') of
177159 20: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[20,'That is right'],'');
178160 21: QuestionDlg ('Caption','Oh, you mean „No“',mtCustom,[21,'Exactly'],'');
179161 22: QuestionDlg ('Caption','So, please find out!',mtCustom,[22,'Maybe'],'');
180162 end;
181163```
182164
183165Työn helpottamiseksi vakiot voidaan määritellä. Esimerkiksi:
184166
185167``` pascal
186168const
187169 mrNoneNI= 20;
188170 mrOkNI= mrNoneNI+1;
189171 mrCancelNI= mrNoneNI+2;
190172 mrAbortNI= mrNoneNI+3;
191173 mrRetryNI= mrNoneNI+4;
192174 mrIgnoreNI= mrNoneNI+5;
193175 mrYesNI= mrNoneNI+6;
194176 mrNoNI= mrNoneNI+7;
195177 mrAllNI= mrNoneNI+8;
196178 mrYesToAllNI= mrNoneNI+10;
197179 mrCloseNI= mrNoneNI+11;
198180 mrLastNI= mrCloseNI;
199181begin
200182 case QuestionDlg ('Caption','Message',mtCustom,[mrYesNI,'Positive', mrNoNI, 'Negative',mrCancelNI,'I do not know','IsCancel'],'') of
201183 mrYesNI: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[mrYesNI,'That is right'],'');
202184 mrNoNI: QuestionDlg ('Caption','Oh, you mean „No“',mtCustom,[mrNoNI,'Exactly'],'');
203185 mrCancelNI: QuestionDlg ('Caption','So, please find out!',mtCustom,[mrCancelNI,'Maybe'],'');
204186 end; //case
205187end;
206188```
207189
208-<center>
209-
210-<figure>
211-<img src="QuestionDlgNoButIcons.png" title="QuestionDlgNoButIcons.png" />
212-<figcaption>QuestionDlgNoButIcons.png</figcaption>
213-</figure>
214-
215-</center>
190+![](/wiki-images/1/15/QuestionDlgNoButIcons.png)
216191
217192## Tekstinluku dialogit
218193
219194### InputBox
220195
221196Tekstinluku dialogi: näyttää viestin ja odottaa käyttäjän tekstinsyöttöä
222197
223198``` pascal
224199function InputBox(const ACaption, APrompt, ADefault: String): String;
225200```
226201
227202Nä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.
228203
229204Esimerkki:
230205
231206``` pascal
232207uses
233208 Forms, LCLType, Dialogs, Controls;
234209
235210procedure TryInputBox;
236211var
237212 UserString: string;
238213begin
239214 UserString := InputBox('Get some text input',
240215 'Please type in some information', 'Some sample text');
241216 ShowMessage(UserString)
242217end;
243218```
244219
245220### InputQuery
246221
247222``` pascal
248223function InputQuery(const ACaption, APrompt : String;
249224 MaskInput : Boolean; var Value : String) : Boolean;
250225function InputQuery(const ACaption, APrompt : String;
251226 var Value : String) : Boolean;
252227```
253228
254229Kaksi 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.
255230
256231Esimerkki:
257232
258233``` pascal
259234uses
260235 Forms, LCLType, Dialogs, Controls;
261236
262237procedure TryInputQuery;
263238var
264239 QueryResult: Boolean;
265240 UserString: string;
266241begin
267242 if InputQuery('Question', 'Type in some data', TRUE, UserString)
268243 then ShowMessage(UserString)
269244 else
270245 begin
271246 InputQuery('Don''t be silly', 'Please try again', UserString);
272247 ShowMessage(UserString);
273248 end
274249end;
275250```
276251
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>
252+![](/wiki-images/d/d0/MessageDlgQuestion.png)
292253
293-</center>
254+![](/wiki-images/c/ce/DontBeSillly.png)
294255
295256### PasswordBox
296257
297258``` pascal
298259Function PasswordBox(const ACaption, APrompt : String) : String;
299260```
300261
301262Toimii hyvin samalla tavalla kuin InputQuery-toiminto, jossa MaskInput = TRUE; ero on siinä, että kirjoitettu salasana palautetaan funktion tuloksena (kuten InputBox).
302263
303264## Viestinvälitys-dialogeissa käytetyt tyypit ja vakiot
304265
305266Useat valintaikkunoiden kanssa käytettävät vakiot ja tyypit on ennalta määritetty [[LCL/fi|LCL]]-kirjastossa:
306267
307268const { määritelty LCLType.pp }
308269
309270Kokonaislukuvakioita painityyppien määrittelemiseksi ja kuvakkeita näytettäväksi MessageBoxissa
310271
311272``` pascal
312273MB_OK = $00000000;
313274MB_OKCANCEL = $00000001;
314275MB_ABORTRETRYIGNORE = $00000002;
315276MB_YESNOCANCEL = $00000003;
316277MB_YESNO = $00000004;
317278MB_RETRYCANCEL = $00000005;
318279
319280
320281MB_ICONHAND = $00000010;
321282MB_ICONQUESTION = $00000020;
322283MB_ICONEXCLAMATION = $00000030;
323284MB_ICONASTERICK = $00000040;
324285MB_ICONWARNING = MB_ICONEXCLAMATION;
325286MB_ICONERROR = MB_ICONHAND;
326287MB_ICONINFORMATION = MB_ICONASTERICK;
327288```
328289
329290Kokonaislukuvakioita, jotka määrittelevät palautusarvon MessageBoxista sen mukaan, mitä painiketta painettiin
330291
331292``` pascal
332293IDOK = 1; ID_OK = IDOK;
333294IDCANCEL = 2; ID_CANCEL = IDCANCEL;
334295IDABORT = 3; ID_ABORT = IDABORT;
335296IDRETRY = 4; ID_RETRY = IDRETRY;
336297IDIGNORE = 5; ID_IGNORE = IDIGNORE;
337298IDYES = 6; ID_YES = IDYES;
338299IDNO = 7; ID_NO = IDNO;
339300IDCLOSE = 8; ID_CLOSE = IDCLOSE;
340301IDHELP = 9; ID_HELP = IDHELP;
341302```
342303
343304Määrittämään, onko ensimmäinen, toinen tai kolmas painike oletusasetus
344305
345306``` pascal
346307MB_DEFBUTTON1 = $00000000;
347308MB_DEFBUTTON2 = $00000100;
348309MB_DEFBUTTON3 = $00000200;
349310MB_DEFBUTTON4 = $00000300;
350311```
351312
352313MessageBoxin 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\]
353314
354315Tyypit käytettäväksi MessageDlg-sovelluksessa, joka tarvitsee parametreja AType of TMsgDlgType ja TMSgDlgButtons
355316
356317``` pascal
357318{ määritelty Dialogs.pp }
358319type
359320 TMsgDlgType = (mtWarning, mtError, mtInformation, mtConfirmation,
360321 mtCustom);
361322 TMsgDlgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore,
362323 mbAll, mbNoToAll, mbYesToAll, mbHelp, mbClose);
363324 TMsgDlgButtons = set of TMsgDlgBtn;
364325
365326
366327const
367328 mbYesNoCancel = [mbYes, mbNo, mbCancel];
368329 mbOKCancel = [mbOK, mbCancel];
369330 mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];
370331
371332
372333 MsgDlgBtnToBitBtnKind: array[TMsgDlgBtn] of TBitBtnKind = (
373334 bkYes, bkNo, bkOK, bkCancel, bkAbort, bkRetry, bkIgnore,
374335 bkAll, bkNoToAll, bkYesToAll, bkHelp, bkClose
375336 );
376337
377338
378339 BitBtnKindToMsgDlgBtn: array[TBitBtnKind] of TMsgDlgBtn = (
379340 mbOk, mbOK, mbCancel, mbHelp, mbYes, mbNo,
380341 mbClose, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToALl, mbYesToAll
381342 );
382343
383344
384345{ määritelty Controls.pp }
385346const
386347 mrNone = 0;
387348 mrOK = mrNone + 1;
388349 mrCancel = mrNone + 2;
389350 mrAbort = mrNone + 3;
390351 mrRetry = mrNone + 4;
391352 mrIgnore = mrNone + 5;
392353 mrYes = mrNone + 6;
393354 mrNo = mrNone + 7;
394355 mrAll = mrNone + 8;
395356 mrNoToAll = mrNone + 9;
396357 mrYesToAll = mrNone + 10;
397358 mrLast = mrYesToAll;
398359```
399360
400361---
401362*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