Sign in Join
Wiki copytemporary

Form Tutorial/fi: what changed

Revision 3 to 4. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11Lyhyt esittely lomakkeiden käytöstä Lazaruksessa.
22
3-## Contents
4-
5- * 1 Mikä on lomake?
6- * 2 Ensimmäinen GUI-sovellus
7- * 3 Kahden lomakkeen käyttö
8- * 3.1 Show ja ShowModal-erot
9- * 4 Kaksi lomaketta, jotka voivat kutsua toisiaan
10- * 5 Muuttujien siirtäminen muihin lomakkeisiin
11- * 6 Muut lomakkeeseen liittyvät aiheet
12- * 6.1 Käytä toista lomaketta päälomakkeena
13- * 6.2 Tallenna lomakkeen ominaisuudet ohjelman lopussa
14- * 7 Luo lomake dynaamisesti
15- * 7.1 Luo Lazaruksessa suunniteltu lomake dynaamisesti
16- * 7.2 Uuden lomakkeen luominen dynaamisesti
17- * 8 Katso myös
18-
193## Mikä on lomake?
204
215Lomake (luokka [[TForm/fi|TForm]]) edustaa ikkunaa tai valintaikkunaa, joka on [[Application|sovelluksen]] käyttöliittymä. Säiliö, johon kaikki muut [[LCL Components|komponentit]] (esim. Painikkeet, label:t, muokkauskentät, kuvat jne.) lisätään.
226
237## Ensimmäinen GUI-sovellus
248
259Lazaruksen onnistuneen asentamisen ja uuden sovelluksen käynnistämisen jälkeen luodaan tyhjä lomake. Se voidaan luoda uuden [[Overview of Free Pascal and Lazarus|GUI-sovelluksen]] päävalikosta -> Projekti -> Uusi projekti -> Sovellus ja paina OK painiketta.
2610
2711Näin luotiin uusi, täysin toimiva lomake projekti:
2812
2913[![Form1 Designmodus.png](/wiki-images/7/73/Form1_Designmodus.png)](</File:Form1_Designmodus.png>)
3014
3115Uusi projekti voidaan käynnistää painamalla `F9`-näppäintä tai klikkaamalla hiirellä päävalikon kuvaketta [![Start.png](/wiki-images/b/b8/Start.png)](</File:Start.png>) (tai valitaan päävalikosta: Suorita -> Suorita). Projekti kootaan ja suoritetaan.
3216
3317Mitään todella jännittävää ei tapahdu. Lomake (Form1) muuttuu hieman ulkonäöltään ja rasteriruudukon pisteet (joita käytetään yksittäisten komponenttien paikannusapuna) katoavat (niin kauan kuin ruudukon pisteet ovat näkyvissä, tiedät myös, että se on edelleen suunnittelutilassa):
3418
3519[![Form1 Designmodus.png](/wiki-images/7/73/Form1_Designmodus.png)](</File:Form1_Designmodus.png>) -> [![Form1 Runmodus.png](/wiki-images/d/dc/Form1_Runmodus.png)](</File:Form1_Runmodus.png>)
3620
3721Seuraavaksi voidaan asettaa [[TButton/fi|TButtonin]] lomakkeelle. Tätä käytetään myöhemmin mahdollistamaan toisen lomakkeen avaaminen:
3822
3923Valitaan TButton [[Component Palette/fi|komponenttipaletin]] [[Standard tab/fi|Standard]]-välilehdeltä.
4024
4125[![TButtonStandardpalette.png](/wiki-images/4/49/TButtonStandardpalette.png)](</File:TButtonStandardpalette.png>)
4226
4327ja klikataan lomaketta: Nyt siinä on painike, joka on sijoitettu Form1: een, jonka nimi ja kuvateksti on "Button1".
4428
4529Jotta tämä painike voisi tehdä jotain, niin on ilmoitettava, että aiotaan tehdä jotain, kun sitä klikataan. Tätä voidaan pitää yksinkertaisena tapahtumana. Tätä varten tarvitaan [[Event order|tapahtuman käsittelijä]], jota kutsutaan klikkauksen jälkeen. Hiiren klikkauksen tapahtumakäsittelijä on melko helposti saavutettavissa kaksoisklikkaamalla Button1-painiketta (tai komponenttimuokkaimessa), valitaan Button1 -> Tapahtumat-välilehti -> OnClick ja klikataan sitten [...] -painiketta. Tämä luo aliohjelman procedure TForm1.Button1Click koodieditoriin, jota kutsutaan aina ([[runtime|ajonaikaisesti]], ei suunnittelun aikana), kun Button1:stä klikataan:
4630
4731[![NeuesProjekt2.png](/wiki-images/9/9b/NeuesProjekt2.png)](</File:NeuesProjekt2.png>)
4832
4933Jotta sovellus voi tehdä jotain Button1:n klikkaamisen jälkeen, lisätään koodia [[Begin/fi|Begin]] ja [[End/fi|End]] lauseiden väliin aliohjelman rungoon procedure TForm1.Button1Click näin:
5034```
5135procedure TForm1.Button1Click(Sender: TObject);
5236 begin
5337 Caption:='My first Form'; //Lomakkeen Form1 otsikko muuttuu
5438 //or
5539 Button1.Caption:='Hello'; //Painikkeen teksti muuttuu
5640 end;
5741```
5842
5943Suorita lomake nyt painamalla `F9` ja huomaa, että kun painiketta klikataan niin lomakkeen otsikko ja painikkeen otsikko muuttuvat.
6044
6145Nyt voidaan kokeilla hieman ja oppia käyttämään standardikomponentteja. Alussa suosittellaan kokeilemaan seuraavia komponentteja:
6246
6347[[TButton/fi|TButton]] | [![tbutton.png](/wiki-images/b/b2/tbutton.png)](</File:tbutton.png>)
6448---|---
6549[[TLabel/fi|TLabel]] | [![tlabel.png](/wiki-images/3/3a/tlabel.png)](</File:tlabel.png>)
6650[[TEdit/fi|TEdit]] | [![tedit.png](/wiki-images/0/07/tedit.png)](</File:tedit.png>)
6751[[TMemo/fi|TMemo]] | [![tmemo.png](/wiki-images/f/f3/tmemo.png)](</File:tmemo.png>)
6852[[TToggleBox/fi|TToggleBox]] | [![ttogglebox.png](/wiki-images/5/5e/ttogglebox.png)](</File:ttogglebox.png>)
6953[[TCheckBox/fi|TCheckBox]] | [![tcheckbox.png](/wiki-images/3/3c/tcheckbox.png)](</File:tcheckbox.png>)
7054[[TRadioButton/fi|TRadioButton]] | [![tradiobutton.png](/wiki-images/e/ef/tradiobutton.png)](</File:tradiobutton.png>)
7155[[TListBox/fi|TListBox]] | [![tlistbox.png](/wiki-images/7/7f/tlistbox.png)](</File:tlistbox.png>)
7256[[TComboBox/fi|TComboBox]] | [![tcombobox.png](/wiki-images/b/be/tcombobox.png)](</File:tcombobox.png>)
7357[[TScrollBar/fi|TScrollBar]] | [![tscrollbar.png](/wiki-images/0/05/tscrollbar.png)](</File:tscrollbar.png>)
7458
7559Lisää muita hyödyllisiä tietoja on [[Lazarus Tutorial/fi|Lazarus Tutorial opetussivulla]].
7660
7761## Kahden lomakkeen käyttö
7862
7963Tässä nähdään, kuinka voidaan käyttää useita lomakkeita projektissa. Tässä esimerkissä luodaan vain kaksi lomaketta, Form1 (päälomake) ja Form2, mutta prosessi on identtinen lisälomakkeiden osalta.
8064
8165Päälomakkeella on painike, joka klikkaamalla avataan uusi lomake. Uusi lomake saa myös painikkeen, jota klikkamalla sulkee tämän uuden lomakkeen ja palaa takaisin päälomakkeeseen.
8266
8367Jos ollaan tehty ensimmäinen opetusohjelma: [[Form Tutorial/fi|Ensimmäinen käyttöliittymäsovellus]], niin on poistettava koodi aliohjelmassa procedure TForm1.Button1Click lauseiden begin ja end väliltä. Muutoin on luotava uusi projekti (sovellus), tuotava painike lomakkeelle ja luotava OnClick-tapahtumakäsittelijä tälle painikkeelle.
8468Klikkaa uutta painiketta, jos halutaan kirjoittaa painikkeen Caption ominaisuuteen (näkyvä teksti painikkeella). Tämä voidaan tehdä valitsemalla painike (klikkaa sitä kerran) ja komponenttimuokkaimessa valisemalla Ominaisuudet-välilehti -> ja kirjoittamalla Caption ominaisuuteen teksti "Avaa Lomake2" tai "Open Form2".
8569
8670
8771[![Objektinspektor.png](/wiki-images/5/52/Objektinspektor.png)](</File:Objektinspektor.png>)
8872
8973Klikkaa päävalikossa Tiedosto -> Uusi lomake, jos halutaan lisätä toinen lomake (Form2) projektiin. Sijoitetaan painike (Button1) Form2: een ja luodaan siihen OnClick-tapahtumankäsittelijä. Muuta tämän painikkeen Caption ominaisuuden teksti "Sulje" (tai "Close").
9074
9175Nyt projektissa on kaksi lomaketta, joista jokainen voidaan valita ja näyttää päävalikossa Projekti -> Lomakkeet (tai näppäinyhdistelmällä `⇧ Shift` \+ `F12`). Vaihtoehtoisesti voidaan valita käännösyksikön välilehti lähdekoodieditorissa ja käyttää sitten `F12`-näppäintä vaihtamaan koodieditori ja lomakkeen suunnittelun välillä vastaavan käännösyksikön lomakkeella.
9276
9377Siirrytään [[source code editor|lähdekoodieditorissa]] Form1:tä vastaavaan [[Unit/fi|käännösyksikköön]] (Unit1) ja lisätään "Unit2" sen [[Uses/fi|uses]] lauseeseen :
9478```
9579uses
9680 Classes, SysUtils, ... , Unit2; // On tärkeää, että yksittäiset käännösyksiköt erotetaan pilkulla
9781 // ja lauseke päättyy puolipisteeseen.
9882```
9983
10084Nyt voidaan kutsua Unit2:sta (ja siten Form2:sta) Unit1:ltä.
10185
10286Seuraavaksi muokataan OnClick-tapahtumaa, joka kuuluu Form1:n painikkeelle:
10387```
10488unit Unit1;
10589 ...
10690 procedure TForm1.Button1Click(Sender: TObject);
10791 begin
10892 Form2.ShowModal; //Näytetään Form2 ja fokus asetetaan Form2:lle.
10993 end;
11094```
11195```
11296unit Unit2;
11397 ...
11498 procedure TForm2.Button1Click(Sender: TObject);
11599 begin
116100 Close; //Suljetaan Form2.
117101 end;
118102```
119103
120104Nyt voidaan käynnistää projekti ([![Start.png](/wiki-images/b/b8/Start.png)](</File:Start.png>) tai `F9`) ja avata Form2 klikkaamalla Form1-painiketta.
121105
122106### Show ja ShowModal-erot
123107
124108Molemmat menetelmät _Show_ ja _ShowModal_ tekevät lomakkeen näkyväksi. Nähdäksesi eron _Show_ \- ja _ShowModal_ :n välillä:
125109
126110 * Laajenna edellisen esimerkin [[Form Tutorial/fi|Kahden lomakkeen käyttö]] lisäämällä toinen TButton _Form1_ :een.
127111 * Valitse _Button1_ ja muuta ominaisuuksien _Name_ arvoon _btnShow_ ja Caption arvoon _Show_.
128112 * Valitse _Button2_ ja muuta ominaisuudet _Name_ arvoon _btnShowModal_ ja Caption arvoon _ShowModal_.
129113 * Luo (tai muokkaa) kahden painikkeen _OnClick_ -tapahtumakäsittelijää seuraavasti:
130114
131115```
132116procedure TForm1.btnShowClick(Sender: TObject);
133117 begin
134118 Form2.Show;
135119 ShowMessage('Form2 is opened!');
136120 end;
137121
138122 procedure TForm1.btnShowModalClick(Sender: TObject);
139123 begin
140124 Form2.ShowModal;
141125 ShowMessage('Form2 is opened and closed again!');
142126 end;
143127```
144128
145129Käynnistä ohjelma ja katso eroa!
146130
147-Show
148-
131+**Show**
149132
150133Tämä aliohjelma tekee lomakkeen näkyväksi ja jatkaa kutsuvan ohjauksen koodin (_Form1_) suorittamista. Esimerkissä viesti ([[Dialog Examples/fi|ShowMessage]]) näkyy lähes samanaikaisesti _Form2_ :n kanssa. Voidaan myös jatkaa kutsuvan lomakkeen _Form1_ käyttöä. Esimerkiksi on mahdollista siirtää sitä tai klikata _Show_ -painiketta uudelleen (mutta klikkaamalla _ShowModal_ aiheuttaa virheen).
151134
152135**`<myForm>.Show;`**: n käyttämisen sijaan on mahdollista käyttää **`<myForm>.Visible:=True;`**. Metodi _Show_ tekee seuraavaa:
153136```
154137procedure TCustomForm.Show;
155138 begin
156139 Visible := True;
157140 BringToFront;
158141 end;
159142```
160143
161144Ainoa ero **< myForm>.Show;** ja **< myForm>.Visible: = True;** on, että lomake, joka näytetään _Show_ , on kaikkien muiden tällä hetkellä näkyvien lomakkeiden päällä.
162145
163-ShowModal
164-
146+**ShowModal**
165147
166148ShowModal pysäyttää koodin käsittelyn kutsun tehneessä kontrollissa (_Form1_), kunnes vasta avattu lomake (_Form2_) on suljettu. Esimerkissä _ShowModal_ in välittömästi seuraava _ShowMessage_ -rivi suoritetaan vasta kun _Form2_ on suljettu. Kutsulomake on jäädytetty: Ei voi siirtää _Form1_ :tä eikä klikata mitään sen painikkeista.
167149
168150ShowModal on funktio, joka palauttaa kokonaisluvun, katso [TModalResult](<http://lazarus-ccr.sourceforge.net/docs/lcl/forms/tmodalresult.html> "doc:lcl/forms/tmodalresult.html"). Palautettu arvo sallii haarautumisen sen mukaan, miten lomake suljettiin.
169151
170152## Kaksi lomaketta, jotka voivat kutsua toisiaan
171153
172154Yleensä on hyvä ohjelmasuunnittelu välttää päälomakkeen kutsuminen toisesta lomakkeesta. On parempi palata päälomakkeeseen sulkemalla toinen lomake (kuten edellisessä esimerkissä) ja antamalla fokuksen palata päälomakkeelle. On kuitenkin mahdollista kutsua alilomakkeelta päälomaketta, kuten tämä esimerkki näyttää.
173155
174156Jotta Form1 voi kutsua Form2:sta, niin Unit1:n uses-lausekkeessa on oltava unit2. Ja päinvastoin, kun Form2:sesta kutsutaan Form1:stä niin Unit2:n on käytettävä unit1 sen uses-lausekkeessa. Tämä johtaa mahdolliseen Circular Unit Reference-kääntäjän virheeseen, kun kukin yksikkö viittaa toiseen. Tämä esimerkki osoittaa myös, miten Circular Unit Reference virhe voidaan välttää.
175157
176158Jos halutaan tehdä tämä esimerkki, muokkaa edellisen esimerkin lomakkeita ([[Form Tutorial|Kahden lomakkeen käyttö]]) tai luo uusi projekti, jossa on kaksi lomaketta, joista jokaisella on yksi painike. Aseta Form1.Button1:n caption arvoon "Open Form2" ja määritä Form2.Button1: n caption "Open Form1".
177159
178160Jos muokataan edellistä esimerkkiä niin poistetaan "Unit2" Unit1:n uses-lausekkeesta.
179161
180162Lisätään uses-lauseke kunkin [[Unit/fi|käännösyksikön]] [[Implementation]]-osaan. Lisätään unit2 Unit1:n-lausekkeeseen ja lisätään Unit1 Unit2:n-lausekkeeseen seuraavasti:
181163```
182164unit Unit1;
183165 ...
184166 implementation
185167
186168 uses
187169 Unit2;
188170 ...
189171```
190172```
191173unit Unit2;
192174 ...
193175 implementation
194176
195177 uses
196178 Unit1;
197179 ...
198180```
199181
200182Sitten muutetaan OnClick-tapahtumien takana olevaa koodia painikkeiden tapahtuman käsittelijässä:
201183```
202184unit Unit1;
203185 ...
204186 procedure TForm1.Button1Click(Sender: TObject);
205187 begin
206188 Form2.Show;
207189 end;
208190```
209191```
210192unit Unit2;
211193 ...
212194 procedure TForm2.Button1Click(Sender: TObject);
213195 begin
214196 Form1.Show;
215197 end;
216198```
217199
218200## Muuttujien siirtäminen muihin lomakkeisiin
219201
220-Edellä esitetyn esimerkin "[[Form Tutorial|Kahden lomakkeen käyttö]]" mukaisesti on mahdollista esitellä [[Global variables|globaali muuttuja]] Unit2: n rajapinnassa. Tämä mahdollistaisi pääsyn sekä unit1:n että unit2:n samaan [[Variable/fi|muuttujaan]] (tämä johtuu siitä, että asettamalla Unit2 unit1:n uses-lausekkeeseen, kaikki unit2 rajapinnassa ilmoitetut muuttujat ovat myös saatavilla käännösyksikössä unit1). Tämä käytäntö on rajoitettava minimiin, koska siitä on vaikea muistaa, mikä yksittäisen muuttujan "näkölaajuus", se mahdollisesti lisää virheitä. On parempi käyttää [[Local variables/fi|paikallisia muuttujia]], määritellä [[Object Oriented Programming with Free Pascal and Lazarus|Property]] [luokassa](</index.php?title=Class/fi&action=edit&redlink=1> "Class/fi \(page does not exist\)") tai vaihtoehtoisesti muuttujana luokassa.
202+Edellä esitetyn esimerkin "[[Form Tutorial|Kahden lomakkeen käyttö]]" mukaisesti on mahdollista esitellä [[Global variables|globaali muuttuja]] Unit2: n rajapinnassa. Tämä mahdollistaisi pääsyn sekä unit1:n että unit2:n samaan [[Variable/fi|muuttujaan]] (tämä johtuu siitä, että asettamalla Unit2 unit1:n uses-lausekkeeseen, kaikki unit2 rajapinnassa ilmoitetut muuttujat ovat myös saatavilla käännösyksikössä unit1). Tämä käytäntö on rajoitettava minimiin, koska siitä on vaikea muistaa, mikä yksittäisen muuttujan "näkölaajuus", se mahdollisesti lisää virheitä. On parempi käyttää [[Local variables/fi|paikallisia muuttujia]], määritellä [[Object Oriented Programming with Free Pascal and Lazarus|Property]] [[Class/fi|luokassa]] tai vaihtoehtoisesti muuttujana luokassa.
221203
222204Seuraavassa projektissa avataan toinen lomake klikkaamalla painiketta. Tällöin päälomakkeen käännösyksikössä lasketaan, kuinka usein toinen muoto on näytetty. Tässä toisessa lomakkeessa voit kysyä, klikkaamalla painiketta, kuinka usein se on avattu:
223205
224206 * Tehdään uusi projekti, jossa on kaksi lomaketta, jokainen painike sen päällä ja niiden OnClick-tapahtumat arvioida.
225207 * nyt luokan TForm2 (unit2) julkisessa osassaon muuttuja (tässä tapauksessa [[Const/fi|vakio]], joka määriteltiin muuttuvaksi). Se on kokonaisluku tyyppinen, jonka nimi on Count:
226208
227209```
228210unit Unit2;
229211 ...
230212 TForm2 = class(TForm)
231213 Button1: TButton;
232214 procedure Button1Click(Sender: TObject);
233215 private
234216 { private declarations }
235217 public
236218 { public declarations }
237219 const Count: Integer = 0; //Tässä
238220 end;
239221```
240222
241223 * nyt voidaan jopa mukauttaa painikkeen tapahtuman käsittelijää vastaavasti:
242224
243225```
244226unit Unit1;
245227 ...
246228 procedure TForm1.Button1Click(Sender: TObject);
247229 begin
248230 inc(Form2.Count); //Lisää laskuria yhdellä jokaiselle Form2-kutsulla
249231 Form2.ShowModal;
250232 end;
251233```
252234```
253235unit Unit2;
254236 ...
255237 procedure TForm2.Button1Click(Sender: TObject);
256238 begin
257239 ShowMessage('Form2 would be displayed '+IntToStr(Count)+' times');
258240 end;
259241```
260242
261243Tällä tavoin voidaan käyttää Unit1:ssä kaikkia Unit2:n julkisia muuttujia / ominaisuuksia / funktioita / aliohjelmia (yleisiä metodeja).
262244
263245## Muut lomakkeeseen liittyvät aiheet
264246
265247### Käytä toista lomaketta päälomakkeena
266248
267249Jos päätät jonkin ajan kuluttua, että haluat näyttää eri lomakkeita tai uuden lomakkeen näkymään käynnistyksen aikana, voit valita päävalikosta Projekti -> Projektiasetukset -> Lomakkeet:
268250
269251[![Projekteinstellungen Formulare.png](/wiki-images/7/76/Projekteinstellungen_Formulare.png)](</File:Projekteinstellungen_Formulare.png>)
270252
271253Vaihtoehtoisesti voit valita Päävalikko -> Projekti -> Näytä projektin lähdekoodi, eli Project1.lpr (pääohjelman Pascal-koodi) ja luo ensimmäinen lomake, joka näytetään ensimmäisenä:
272254```
273255program Project1;
274256 ...
275257 Application.CreateForm(TForm2, Form2); //Form2 luotiin ekana ja näytetään kun sovellus käynnistyy
276258 Application.CreateForm(TForm1, Form1);
277259```
278260
279261### Tallenna lomakkeen ominaisuudet ohjelman lopussa
280262
281263 * [[Remember form position and size|Remember form position and size#Using_TForm.SessionProperties and TXMLPropStorage]]
282264
283265## Luo lomake dynaamisesti
284266
285267### Luo Lazaruksessa suunniteltu lomake dynaamisesti
286268
287269Aina ei tarvitse luoda kaikkia lomakkeita käynnistyksen aikana, joita voidaan kutsua sovelluksen aikana. Jotkut kehittäjät eivät yleensäkään pidä mitään niistä ja poistaa koodin, joka luodaan automaattisesti, kun lisätään projektiin uusi lomake Projekt.lpr: stä. Jos halutaan kirjoittaa kirjasto, jossa on muutama graafinen käyttöliittymä, ei voida muodostaa muotojen dynaamista luomista.
288270
289271Esimerkki:
290272
291273 * uusi sovellus, jossa on kaksi lomaketta, Form1:llä painike (lisää unit1 uses lausekkeeseen "Unit2")
292274 * avaa Projekt.lpr (Projekti -> Näytä projektin lähdekoodi).
293275 * poista rivi "Application.CreateForm (TForm2, Form2)";
294276 * Button1: n OnClick-tapahtuma, Form1 lisää seuraavaa koodia:
295277
296278```
297279procedure TForm1.Button1Click(Sender: TObject);
298280 begin
299281 Form2:=TForm2.Create(Nil); //Form2 luodaan
300282 Form2.ShowModal; //Form2 näytetään
301283 FreeAndNil(Form2); //tuhotaan Form2
302284 end;
303285```
304286
305287 * nyt yksinkertaisesti suorita
306288
307289### Uuden lomakkeen luominen dynaamisesti
308290
309291Seuraava esimerkki osoittaa, miten uudet lomakkeet voidaan luoda koodilla ilman Form Designer -ohjelmaa.
310292
311293Tässä esimerkissä painikkeen painaminen avaa toisen lomakkeen, joka itse sisältää painikkeen. Tämän toisen painikkeen klikkaaminen ilmoittaa, että lomake sulkeutuu; sitten lomake on suljettu.
312294
313295 * Luo uusi sovellus lomakkeella ja painikkeella
314296 * Lisää Button1: n OnClick-tapahtumassa lomakkeessa 1 seuraava koodi:
315297
316298```
317299procedure TForm1.Button1Click(Sender: TObject);
318300 var
319301 MyForm: TForm;
320302 MyButton: TButton;
321303 begin
322304 MyForm:=TForm.Create(nil);
323305 MyForm.SetBounds(100, 100, 220, 150);
324306 MyForm.Caption:='My dynamic created form';
325307
326308 MyButton:=TButton.create(MyForm);
327309 MyButton.Caption:='Close my form';
328310 MyButton.SetBounds(10, 10, 200, 30);
329311 MyButton.Parent:=MyForm;
330312
331313 MyButton.OnClick:=@MyButtonClick;
332314
333315 MyForm.ShowModal;
334316
335317 FreeAndNil(MyForm);
336318 end;
337319```
338320
339321![Light bulb](https://upload.wikimedia.org/wikipedia/commons/d/d8/Nuvola_apps_ktip.png) **Huomaa:** Jos komponentti on luotu omistajan (owner) kanssa (TButton.Create (Owner: TComponent)), se kuuluu omistajalle, joka vastaa sitten komponentin vapauttamisesta. Näin MyButton vapautetaan automaattisesti vapauttamalla MyForm.
340322
341323 * nyt on luotava MyButton.OnClick-tapahtuman käsittelijä. Tätä varten kirjoita luokan TForm1 yksityiseen (private) osioon seuraava aliohjelman määrittely:
342324
343325```
344326TForm1 = class(TForm)
345327 ...
346328 private
347329 { private declarations }
348330 procedure MyButtonClick(Sender: TObject);
349331```
350332
351333 * Paina `Ctrl]`+`⇧ Shift`+`C` (code completion eli koodin täydentäminen) ja aseta seuraava koodi toteutukseen:
352334
353335```
354336procedure TForm1.MyButtonClick(Sender: TObject);
355337 begin
356338 Showmessage('Attention, closing my dynamically created form!');
357339 if Sender is TButton then
358340 TForm(TButton(Sender).Parent).Close;
359341 end;
360342```
361343
362344 * nyt projekti voidaan koota ja suorittaa
363345
364346
365347
366348## Katso myös
367349
368350 * [[LCL Tips|Vinkkejä kontrollien manuaaliseen generointiin]]
369351 * [[LCL Tips|Esimerkki luoda täydellinen GUI-sovellus koodin mukaan]]
370352 * [[Testing, if form exists|Testi onko lomake jo olemassa]]
371353 * [[Canvas draw vertical line on form/de|piirtää pystysuoran viivan lomakkeelle]]
372354 * [[Drawing with canvas|Piirretään lomakkeelle]]
373355 * [[user should not be able to close form|Käyttäjän ei pitäisi pystyä sulkemaan lomaketta]]
374356 * [[LCL Tips|Luodaan ei-suorakulmainen ikkuna tai kontrolli]]
375357 * [[Remember form position and size|Muistetaan lomakkeen sijainti ja koko]]
376358
377359---
378360*From the Free Pascal wiki, page "Form Tutorial/fi", as the Internet Archive kept it on 2025-01-17, last changed on 2020-02-16. 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