TListBox/fi
Deutsch · English · Français · Suomi · 日本語
TListBox
on komponentti, joka näyttää (vieritettävän) luettelon merkkijonoista, joista käyttäjä voi valita jonkun. TListBox löytyy komponenttipaletin Standard välilehdeltä. TListBox:n merkkijonot (string) on tallennettu Items ominaisuuteen. Se on TStrings tyyppiä. Täten voidaan liittää ja poistaa yhdistelmäruudun merkkijonoja kuten TStringList:sä tai sen vanhemmassa TStrings
Seuraavassa on muutamia esimerkkejä kuinka käyttää TListBox:a ListBox1 lomakkeella Form1:
ListBox:n täyttö
Komponettimuokkaimella
- Valitse ListBox lomakkeella yhdellä klikkauksella.
- Mene komponenttimuokkaimessa ominaisuus-välilehden ominaisuuteen Items.
- Klikkaa painiketta, jossa on kolme pistettä. Merkkijonojen muokkain avautuu.
- Kirjoita teksti ja vahvista tekemäsi työ OK-painikkeella.
Koodilla painikkeen painamisen yhteydessä
Lisätään lomakkeelle painike (TButton) joka nimetään btnFill ja caption-ominaisuuteen kirjoitetaan fill ListBox. Tehdään sille OnClick tapahtumankäsittelijä jota täydennetään niin että se näyttää seuraavalta:
procedure TForm1.btnFillClick(Sender: TObject);
begin
ListBox1.Items.Clear; //Poista kaikki olemassa olevat merkkijonot
ListBox1.Items.Add('First line');
ListBox1.Items.Add('Line with random number '+IntToStr(Random(100)));
ListBox1.Items.Add('Third line');
ListBox1.Items.Add('Even a random number '+IntToStr(Random(100)));
end;StringList:n liittäminen
Lisätään lomakkeelle painike (TButton) joka nimetään btnFill ja caption-ominaisuuteen kirjoitetaan fill ListBox. Tehdään sille OnClick tapahtumankäsittelijä jota täydennetään niin että se näyttää seuraavalta:
procedure TForm1.btnFillClick(Sender: TObject);
var
myStringList: TStringList;
begin
myStringList:=TStringList.Create; //Luodaan myStringList
myStringList.Add('This is the first line.'); //Tämä rivi lisätään
myStringList.Add('This is the second first line.');
myStringList.Add('This is the third line.');
myStringList.Add('etc.');
ListBox1.Items.Assign(myStringList); //Liitetään ListBox1:n myStringList:n tekstisisältö
myStringList.Free; //Vapautetaan myStringList muistista
end;Merkkijonon lisääminen
- Laajennetaan esimerkkiä Koodilla painikkeen painamisen yhteydessä komponenteilla TEdit ja TButton joka nimetään btnAdd ja sen caption saa arvokseen add string. Tyhjennä Edit1 komponentin ominaisuus Text - tyhjä merkkijono.
- Painikkeen OnClick tapahtumankäsittelijään täydennetään seuraavanlaiseksi:
procedure TForm1.btnAddClick(Sender: TObject);
begin
ListBox1.Items.Add(Edit1.Text);
Edit1.Text:='';
end;Merkkijonon poistaminen
Oletuksena voidaan TListBox:sta valita vain yksi rivi. Jos halutaan että voidaan valita useita rivejä niin pitää laittaa ominaisuus MultiSelect arvoon True.
ItemIndex
- Laajennetaan esimerkkiä Koodilla painikkeen painamisen yhteydessä komponentilla TButton joka nimetään btnDel ja sen caption saa arvokseen delete string.
- Painikkeen OnClick tapahtumankäsittelijään täydennetään seuraavanlaiseksi:
procedure TForm1.btnDelClick(Sender: TObject);
begin
if ListBox1.ItemIndex > -1 then //Poistetaan vain silloin, kun merkkijono valittu
ListBox1.Items.Delete(ListBox1.ItemIndex);
end;Kaikki valitut merkkijonot
- Muutetaan edellisen esimerkin koodi seuraavanlaiseksi:
procedure TForm1.btnDelClick(Sender: TObject);
var
i: Integer;
begin
if ListBox1.SelCount > 0 then //Poistetaan vain, jos vähintään yksi merkkijono on valittuna
for i:=ListBox1.Items.Count - 1 downto 0 do //Käydään läpi kaikki
if ListBox1.Selected[i] then //Jos on valittu...
ListBox1.Items.Delete(i); //...poistetaan kyseinen merkkijono (String)
end;Owner-drawn ListBox
Yleensä on edullista antaa TListBox:n näyttää teemaa 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. Tätä voi kokeilla:
- Voidaan muokata edellistä lähdekoodia tai tehdä uusi sovellus jossa on TListBox nimeltään ListBox1.
- Muutetaan komponenttimuokkaimessa ListBox1 ominaisuutta Style arvoon lbOwnerDrawFixed.
- Komponenttimuokkaimen tapahtumat välilehdellä luodaan tapahtumankäsittelijä tapahtumalle OnDrawItem klikkaamalla [...]-painiketta.
- tapahtumankäsittelijän koodi täydennetään seuraavanlaiseksi::
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
ARect: TRect; State: TOwnerDrawState);
var
aColor: TColor; //Taustavärin värimuuttuja
begin
if (Index mod 2 = 0) //Index kertoo mikä rivi on kysessää
then aColor:=$FFFFFF //Joka toinen rivi saa valkoisen taustavärin
else aColor:=$EEEEFF; //Joka toinen rivi saa pinkin taustavärin
if odSelected in State then aColor:=$0000FF; //Jos rivi on valittu niin se saa punaisen taustavärin
ListBox1.Canvas.Brush.Color:=aColor; //Asetetaan taustaväri
ListBox1.Canvas.FillRect(ARect); //Piirrä täytetty suorakulmio
ListBox1.Canvas.Font.Bold:=True; //Asetetaan kirjaisin lihavoiduksi
ListBox1.Canvas.TextRect(ARect, 2, ARect.Top+2, ListBox1.Items[Index]); //Piirretään teksti
end;Note: ListBoxDrawItem:n parametrit
Control:
Jos useilla olioilla (esimerkiksi useita TListBox)on pääsy tähän tapahtumaan, tiedetään mikä olio aiheutti tapahtuman. Esimerkiksi esimerkissä **ListBox1.Canvas.FillRect(ARect)**sijasta käytetäänTListBox(Control).Canvas.FillRect(ARect). Kuitenkin olisi hyvä silti tarkistaa että tapahtuman aiheutti TListBox-luokka:if Control is TListBox then TListBox(Control).Canvas.FillRect(ARect);Index: Määrittää kohteen sijainnin, joten voit käyttää merkkijonoa
<ListBox>.Items[Index].
ARect: Määrittää suorakulmion joka on tarpeen taustan piirtämisessä.
State: Kohteen tila, onko normaali, keskittynyt, valittu jne
- Tältä tämä esimerkki voisi näyttää:
-> 
Katso myös
From the Free Pascal wiki, page "TListBox/fi", as it stood on 2020-03-01 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.