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.
Talk about this page
Nobody has opened a bench for this page yet. Sign in to open one.
