Wiki-kopiopeilipalvelin

Tämä on pascal.chatin wikin peilipalvelin. Muokkaus, historia ja kirjautuminen ovat siellä.

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.

Versio 1, viimeksi muokannut WikiArchive .