Sign in Join
Wiki copytemporary

TComboBox/fi: what changed

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

Title: TComboBox/fi

OldNewLine
1+**TComboBox** (yhdistelmäruutu) ![](/wiki-images/7/75/Tcombobox.png) on yhdistelmä tekstin muokkausruudusta ja (avattavasta) luettelosta josta mahdollista valita yksi monista vaihtoehdoista.
2+
3+## Käyttö
4+
5+Jos halutaan käyttää [[doc:lcl/stdctrls/tcombobox.html|TComboBox]] [[TForm|lomakkeella]], niin se voidaan valita yksinkertaisesti [[Component Palette|komponenttipaletin]] [[Standard tab/fi|Standard-välilehdeltä]] ja sijoittaa haluttuun paikkaan klikkaamalla lomaketta.
6+
7+TComboBox:n [[String|merkkijonot (string)]] on tallennettu *Items* ominaisuuteen. Se on TStrings tyyppiä. Täten voidaan liittää ja poistaa yhdistelmäruudun merkkijonoja kuten [[TStringList-TStrings Tutorial|TStringList]]:sä tai sen vanhemmassa [[TStringList-TStrings Tutorial|TStrings]]
8+
9+Seuraavassa on muutamia esimerkkejä käyttää yhdistelmäruutua *ComboBox1* lomakkeella *Form1*:
10+
11+### ComboBox:n täyttö
12+
13+#### Komponettimuokkaimella
14+
15+- Valitse ComboBox lomakkeella yhdellä napsautuksella.
16+- Mene komponenttimuokkaimessa on Properties-välilehden ominaisuuteen *Items*.
17+- Napsauta painiketta, jossa on kolme pistettä. Merkkijonojen muokkain avautuu.
18+- Kirjoita teksti ja vahvista tekemäsi työ *OK*-painikkeella.
19+
20+#### Koodilla lomakkeen luonnin yhteydessä
21+
22+- Luo *onCreate* tapahtumakäsittelijä lomakkeelle, klikkaa lomaketta, komponenttimuokkaimessa klikkaa tapahtumat-välilehteä, valitse *onCreate* tapahtumaa ja klikkaa painiketta \[...\]. Tai vaihtoehtoisesti tuplaklikkaa lomakketta.
23+- Täydennä lähdekoodi editorissa muodostunutta *FormCreate* raamia esimerkiksi seuraavanlaisella tekstillä:
24+
25+``` pascal
26+procedure TForm1.FormCreate(Sender: TObject);
27+begin
28+ ComboBox1.Items.Clear; //Poista kaikki olemassa olevat vaihtoehdot
29+ ComboBox1.Items.Add('Red'); //Lisätään vaihtoehto
30+ ComboBox1.Items.Add('Green');
31+ ComboBox1.Items.Add('Blue');
32+ ComboBox1.Items.Add('Random Color');
33+end;
34+```
35+
36+### Tee, että jotain tapahtuu valinnan jälkeen
37+
38+Kuten kaikki komponentit, niin TComboBox tarjoaa erilaisia ​​[[Event order|tapahtumia]] , joita kutsutaan, kun käyttäjä käyttää yhdistelmäruutua. Vastatakseen yhdistelmäruudun muutosvalintaan, niin siihen voidaan käyttää *OnChange* tapahtumaa:
39+
40+- Tuplaklikkaa yhdistelmäruutua lomakkeella tai valitse *OnChange* tapahtuma komponenttimuokkaimessa ja klikkaa painiketta \[...\].
41+- Tapahtumakäsittelijän raami on nyt luotu, nyt voidaan lisätä haluttu lähdekoodi, tässä esimerkissä halutaan vaihtaa taustaväriä lomakkeella:
42+
43+``` pascal
44+procedure TForm1.ComboBox1Change(Sender: TObject);
45+begin
46+ case ComboBox1.ItemIndex of // Tarkistetaan minkä kohdan ohjelman käyttäjä on valinnut
47+ 0: Color:=clRed;
48+ 1: Color:=clGreen;
49+ 2: Color:=clBlue;
50+ 3: Color:=Random($1000000);
51+ end;
52+end;
53+```
54+
55+- Suorita sovellus, valinta muuttaa lomakkeen taustavärin.
56+
57+### Oma piirretty yhdistelmäruutu
58+
59+Yleensä on edullista antaa yhdistelmäruudun näyttää [teemaa](http://en.wikipedia.org/wiki/Skin_%28computing%29) jonka käyttäjä on valinnut hänen asetuksilla. Joissakin tapauksissa (esimerkiksi jos ohjelmoidaan värikäs peli), voidaan poiketa tästä standardista ja piirtää oman valinnan mukaan. Näin tämä toimii:
60+
61+> **Note:** **ComboBoxDrawItem parametrit:**\
62+> \
63+> **Control:**\
64+> Jos useilla olioilla (esimerkiksi useita yhdistelmäruutuja)on pääsy tähän tapahtumaan, tiedetään mikä olio aiheutti tapahtuman. Esimerkiksi esimerkissä **`ComboBox1.Canvas.FillRect(ARect)`**sijasta käytetään **`TComboBox(Control).Canvas.FillRect(ARect)`**. Kuitenkin olisi hyvä silti tarkistaa että tapahtuman aiheutti TComboBox-luokka:
65+>
66+> ``` pascal
67+> if Control is TComboBox then
68+> TComboBox(Control).Canvas.FillRect(ARect);
69+> ```
70+>
71+> **Index:** Määrittää kohteen sijainnin, joten voit käyttää merkkijonoa **`<ComboBox>.Items[Index]`**.\
72+> **ARect:** Määrittää suorakulmion joka on tarpeen taustan piirtämisessä.\
73+> **State:** Kohteen tila, onko normaali, keskittynyt, valittu jne
74+
75+#### Täytetyn suorakulmion piirtäminen
76+
77+- Käytä pohjana edellä esitettyä esimerkkiä [[TComboBox/fi|"Täytä yhdistelmäruutu koodilla lomakkeen luonnin yhteydessä"]].
78+- Vaihda komponenttimuokkaimessa *ComboBox1*:n ominaisuus *Style* arvoon *csOwnerDrawFixed*.
79+- Luodaan komponenttimuokkaimessa *OnDrawItem*-tapahtuman tapahtumakäsittelijä, klikkaamalla painiketta \[...\].
80+- Täydennä kyseinen tapahtuman koodi seuraavanlaiseksi:
81+
82+``` pascal
83+procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
84+ ARect: TRect; State: TOwnerDrawState);
85+var
86+ ltRect: TRect;
87+
88+ procedure FillColorfulRect(aCanvas: TCanvas; myRect: TRect); //Piirretään satunnaisella värillä
89+ // Fills the rectangle with random colours
90+ var
91+ y: Integer;
92+ begin
93+ for y:=myRect.Top to myRect.Bottom - 1 do begin
94+ aCanvas.Pen.Color:=Random($1000000);
95+ aCanvas.Line(myRect.Left, y, myRect.Right, y);
96+ end;
97+ end;
98+
99+begin
100+ ComboBox1.Canvas.FillRect(ARect); //Ensin piirretään normaali tausta
101+ ComboBox1.Canvas.TextRect(ARect, 22, ARect.Top, ComboBox1.Items[Index]); //Piirretään kyseisen kohdan teksti
102+
103+ ltRect.Left := ARect.Left + 2; //värin suorakulmio
104+ ltRect.Right := ARect.Left + 20;
105+ ltRect.Top := ARect.Top + 1;
106+ ltRect.Bottom := ARect.Bottom - 1;
107+
108+ ComboBox1.Canvas.Pen.Color:=clBlack;
109+ ComboBox1.Canvas.Rectangle(ltRect); //Piirretään kehys
110+
111+ if InflateRect(ltRect, -1, -1) then //muutetaan suorakulmion kokoa yhdellä pikselillä
112+ if Index = 3 then
113+ FillColorfulRect(ComboBox1.Canvas, ltRect) //Piirretään satunnaisella värillä
114+ else begin
115+ case Index of
116+ 0: ComboBox1.Canvas.Brush.Color := clRed;
117+ 1: ComboBox1.Canvas.Brush.Color := clGreen;
118+ 2: ComboBox1.Canvas.Brush.Color := clBlue;
119+ end;
120+ ComboBox1.Canvas.FillRect(ltRect); //Piirretään annetulla värillä
121+ end;
122+end;
123+```
124+
125+- Tältä tämä esimerkki voisi näyttää:
126+
127+![](/wiki-images/1/1d/ComboBoxBsp1.png) -\> ![](/wiki-images/7/70/ComboBoxBsp2.png)
128+
129+#### Lisätään kuva
130+
131+Tässä esimerkissä ladataan muutamia kuvia [[TImageList]]-komponentista ja piirretään ne yhdistemäruudun valittavien kohteiden eteen. Tämä on vain yksinkertainen esimerkki, joka vain yleisesti näyttää, mitä voit tehdä. I don't run explicitly details, such as checking, whether the corresponding image exists etc. in this example. This should be done by you depending on the need.
132+
133+- Käytä pohjana aikaisemmin esitettyä esimerkkiä [[TComboBox/fi|"Täytä yhdistelmäruutu koodilla lomakkeen luonnin yhteydessä"]].
134+- Vaihda komponenttimuokkaimessa *ComboBox1*:n ominaisuus *Style* arvoon *csOwnerDrawFixed*.
135+- Lisää [[TImageList]] komponenttipaletin *Common controls*-välilehdeltä lomakkeelle.
136+- *Height* (korkeus) ja *Width* (leveys) on esiasetettu 16 pikseliin *ImageList1*:llä oletuksena. Tähän se on hyvä oletusasetus. Jotta kuvat tulevat "siististi" asetetaan yhdistelmäruudun *ComboBox1* ominaisuus *ItemHeight* arvoon *18* komponenttimuokkaimessa.
137+- Lisätään neljä kuvaa ImageList-komponenttiin:
138+ - Tuplaklikkaa *ImageList1*:ä tai klikkaa hiiren vasenta näppäintä *ImageList1*-koponentin päällä ja valitse *Kuvaluettelon muokkain...*.
139+ - Klikkaa *Lisää...* ja valitse kuva (katso \<Lazarus directory\>/images/... siellä on erilaisia kuvia tai kuvakkeita 16x16 pikselin kokoisena).
140+ - Kun on lisätty neljä kuvaa, vahvista se \[OK\]-painikkeella.
141+- Luodaan komponenttimuokkaimessa *OnDrawItem*-tapahtuman tapahtumakäsittelijä, klikkaamalla painiketta \[...\].
142+- Täydennä kyseinen tapahtuman koodi seuraavanlaiseksi:
143+
144+``` pascal
145+procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
146+ ARect: TRect; State: TOwnerDrawState);
147+begin
148+ ComboBox1.Canvas.FillRect(ARect); //Ensin piirretään normaali tausta
149+ ComboBox1.Canvas.TextRect(ARect, 20, ARect.Top, ComboBox1.Items[Index]); //Piirretään kyseisen kohdan teksti
150+ ImageList1.Draw(ComboBox1.Canvas, ARect.Left + 1, ARect.Top + 1, Index); //Piirretään indeksin mukainen kuva
151+end;
152+```
153+
154+- Tältä tämä esimerkki voisi näyttää:
155+
156+![](/wiki-images/1/1d/ComboBoxBsp1.png) -\> ![](/wiki-images/c/ca/ComboBoxBsp3.png)
157+
158+## Katso myös
159+
160+- [[doc:lcl/stdctrls/tcombobox.html|TComboBox dokumentaatio]]
161+- [[TEdit/fi|TEdit]]
162+- [[TListBox]]
163+- [[TDBComboBox]]
164+- [[TDBLookupComboBox]]
165+
166+---
167+*From the Free Pascal wiki, page "TComboBox/fi", as it stood on 2020-02-29 after a change by Trev, 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