Sign in Join
Wiki copytemporary

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

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:

pascal
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:

pascal
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

pascal
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

pascal
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

pascal
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:

pascal
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ään TListBox(Control).Canvas.FillRect(ARect). Kuitenkin olisi hyvä silti tarkistaa että tapahtuman aiheutti TListBox-luokka:

pascal
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

->

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.

Revision 1, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.