Difference between revisions of "TListBox/fi"

From Free Pascal wiki
(Created page with "{{TListBox}} '''TListBox''' image:tlistbox.png on komponentti, joka näyttää (vieritettävän) luettelon merkkijonoista, joista käyttäjä voi valita jonkun. TListBox...")
 
m (Fixed syntax highlighting)
 
Line 6: Line 6:
 
Seuraavassa on muutamia esimerkkejä kuinka käyttää TListBox:a ''ListBox1'' lomakkeella ''Form1'':
 
Seuraavassa on muutamia esimerkkejä kuinka käyttää TListBox:a ''ListBox1'' lomakkeella ''Form1'':
  
 +
==ListBox:n täyttö==
  
==ListBox:n täyttö==
 
 
=== Komponettimuokkaimella ===
 
=== Komponettimuokkaimella ===
 +
 
* Valitse ListBox lomakkeella yhdellä klikkauksella.
 
* Valitse ListBox lomakkeella yhdellä klikkauksella.
 
* Mene komponenttimuokkaimessa ominaisuus-välilehden ominaisuuteen ''Items''.
 
* Mene komponenttimuokkaimessa ominaisuus-välilehden ominaisuuteen ''Items''.
Line 15: Line 16:
  
 
===Koodilla painikkeen painamisen yhteydessä===
 
===Koodilla painikkeen painamisen yhteydessä===
 +
 
Lisätään lomakkeelle [[TButton/fi|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:  
 
Lisätään lomakkeelle [[TButton/fi|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:  
<source>
+
 
 +
<syntaxhighlight lang=pascal>
 
procedure TForm1.btnFillClick(Sender: TObject);
 
procedure TForm1.btnFillClick(Sender: TObject);
 
begin
 
begin
Line 25: Line 28:
 
   ListBox1.Items.Add('Even a random number '+IntToStr(Random(100)));
 
   ListBox1.Items.Add('Even a random number '+IntToStr(Random(100)));
 
end;
 
end;
</source>
+
</syntaxhighlight>
  
 
==StringList:n liittäminen==
 
==StringList:n liittäminen==
 +
 
Lisätään lomakkeelle [[TButton/fi|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:  
 
Lisätään lomakkeelle [[TButton/fi|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:  
<source>
+
 
 +
<syntaxhighlight lang=pascal>
 
procedure TForm1.btnFillClick(Sender: TObject);
 
procedure TForm1.btnFillClick(Sender: TObject);
 
var
 
var
Line 42: Line 47:
 
   myStringList.Free;                              //Vapautetaan myStringList muistista  
 
   myStringList.Free;                              //Vapautetaan myStringList muistista  
 
end;
 
end;
</source>
+
</syntaxhighlight>
  
 
==Merkkijonon lisääminen==
 
==Merkkijonon lisääminen==
 +
 
* Laajennetaan esimerkkiä [[TListBox/fi#Koodilla painikkeen painamisen yhteydessä|''Koodilla painikkeen painamisen yhteydessä'']] komponenteilla [[TEdit/fi|TEdit]] ja [[TButton/fi|TButton]] joka nimetään ''btnAdd'' ja sen caption saa arvokseen ''add string''. Tyhjennä ''Edit1'' komponentin ominaisuus ''Text'' - tyhjä merkkijono.
 
* Laajennetaan esimerkkiä [[TListBox/fi#Koodilla painikkeen painamisen yhteydessä|''Koodilla painikkeen painamisen yhteydessä'']] komponenteilla [[TEdit/fi|TEdit]] ja [[TButton/fi|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:   
 
* Painikkeen ''OnClick'' tapahtumankäsittelijään täydennetään seuraavanlaiseksi:   
<source>
+
 
 +
<syntaxhighlight lang=pascal>
 
procedure TForm1.btnAddClick(Sender: TObject);
 
procedure TForm1.btnAddClick(Sender: TObject);
 
begin
 
begin
Line 53: Line 60:
 
   Edit1.Text:='';
 
   Edit1.Text:='';
 
end;  
 
end;  
</source>
+
</syntaxhighlight>
  
 
==Merkkijonon poistaminen==
 
==Merkkijonon poistaminen==
 +
 
Oletuksena voidaan TListBox:sta valita vain yksi rivi. Jos halutaan että voidaan valita useita rivejä niin pitää laittaa ominaisuus ''MultiSelect'' arvoon ''True''.
 
Oletuksena voidaan TListBox:sta valita vain yksi rivi. Jos halutaan että voidaan valita useita rivejä niin pitää laittaa ominaisuus ''MultiSelect'' arvoon ''True''.
  
 
===ItemIndex===
 
===ItemIndex===
 +
 
* Laajennetaan esimerkkiä [[TListBox/fi#Koodilla painikkeen painamisen yhteydessä|''Koodilla painikkeen painamisen yhteydessä'']] komponentilla [[TButton/fi|TButton]] joka nimetään ''btnDel'' ja sen caption saa arvokseen ''delete string''.
 
* Laajennetaan esimerkkiä [[TListBox/fi#Koodilla painikkeen painamisen yhteydessä|''Koodilla painikkeen painamisen yhteydessä'']] komponentilla [[TButton/fi|TButton]] joka nimetään ''btnDel'' ja sen caption saa arvokseen ''delete string''.
 
* Painikkeen ''OnClick'' tapahtumankäsittelijään täydennetään seuraavanlaiseksi:   
 
* Painikkeen ''OnClick'' tapahtumankäsittelijään täydennetään seuraavanlaiseksi:   
<source>
+
 
 +
<syntaxhighlight lang=pascal>
 
procedure TForm1.btnDelClick(Sender: TObject);
 
procedure TForm1.btnDelClick(Sender: TObject);
 
begin
 
begin
Line 67: Line 77:
 
     ListBox1.Items.Delete(ListBox1.ItemIndex);
 
     ListBox1.Items.Delete(ListBox1.ItemIndex);
 
end;  
 
end;  
</source>
+
</syntaxhighlight>
  
 
===Kaikki valitut merkkijonot===
 
===Kaikki valitut merkkijonot===
 +
 
* Muutetaan edellisen esimerkin koodi seuraavanlaiseksi:
 
* Muutetaan edellisen esimerkin koodi seuraavanlaiseksi:
<source>
+
 
 +
<syntaxhighlight lang=pascal>
 
procedure TForm1.btnDelClick(Sender: TObject);
 
procedure TForm1.btnDelClick(Sender: TObject);
 
var
 
var
Line 81: Line 93:
 
         ListBox1.Items.Delete(i);              //...poistetaan kyseinen merkkijono (String)
 
         ListBox1.Items.Delete(i);              //...poistetaan kyseinen merkkijono (String)
 
end;
 
end;
</source>
+
</syntaxhighlight>
  
 
==Owner-drawn ListBox==
 
==Owner-drawn ListBox==
Line 90: Line 102:
 
* Komponenttimuokkaimen tapahtumat välilehdellä luodaan tapahtumankäsittelijä tapahtumalle ''OnDrawItem'' klikkaamalla  [...]-painiketta.
 
* Komponenttimuokkaimen tapahtumat välilehdellä luodaan tapahtumankäsittelijä tapahtumalle ''OnDrawItem'' klikkaamalla  [...]-painiketta.
 
* tapahtumankäsittelijän koodi täydennetään seuraavanlaiseksi::
 
* tapahtumankäsittelijän koodi täydennetään seuraavanlaiseksi::
<source>
+
 
 +
<syntaxhighlight lang=pascal>
 
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
 
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
 
   ARect: TRect; State: TOwnerDrawState);
 
   ARect: TRect; State: TOwnerDrawState);
Line 106: Line 119:
 
   ListBox1.Canvas.TextRect(ARect, 2, ARect.Top+2, ListBox1.Items[Index]);  //Piirretään teksti
 
   ListBox1.Canvas.TextRect(ARect, 2, ARect.Top+2, ListBox1.Items[Index]);  //Piirretään teksti
 
end;
 
end;
</source>  
+
</syntaxhighlight>  
 +
 
 
{{Note|'''ListBoxDrawItem:n parametrit'''<br><br>
 
{{Note|'''ListBoxDrawItem:n parametrit'''<br><br>
 
'''Control:'''<br> Jos useilla olioilla (esimerkiksi useita TListBox)on pääsy tähän tapahtumaan, tiedetään mikä olio aiheutti tapahtuman. Esimerkiksi esimerkissä '''<code>ListBox1.Canvas.FillRect(ARect)</code>'''sijasta käytetään '''<code>TListBox(Control).Canvas.FillRect(ARect)</code>'''. Kuitenkin olisi hyvä silti tarkistaa että tapahtuman aiheutti TListBox-luokka:
 
'''Control:'''<br> Jos useilla olioilla (esimerkiksi useita TListBox)on pääsy tähän tapahtumaan, tiedetään mikä olio aiheutti tapahtuman. Esimerkiksi esimerkissä '''<code>ListBox1.Canvas.FillRect(ARect)</code>'''sijasta käytetään '''<code>TListBox(Control).Canvas.FillRect(ARect)</code>'''. Kuitenkin olisi hyvä silti tarkistaa että tapahtuman aiheutti TListBox-luokka:
<source>
+
 
 +
<syntaxhighlight lang=pascal>
 
   if Control is TListBox then
 
   if Control is TListBox then
 
     TListBox(Control).Canvas.FillRect(ARect);     
 
     TListBox(Control).Canvas.FillRect(ARect);     
</source>
+
</syntaxhighlight>
 +
 
 
'''Index:''' Määrittää kohteen sijainnin, joten voit käyttää merkkijonoa '''<code><ListBox>.Items[Index]</code>'''.<br>
 
'''Index:''' Määrittää kohteen sijainnin, joten voit käyttää merkkijonoa '''<code><ListBox>.Items[Index]</code>'''.<br>
 
'''ARect:''' Määrittää suorakulmion  joka on tarpeen taustan piirtämisessä.<br>
 
'''ARect:''' Määrittää suorakulmion  joka on tarpeen taustan piirtämisessä.<br>
Line 118: Line 134:
 
   
 
   
 
}}
 
}}
 +
 
* Tältä tämä esimerkki voisi näyttää:
 
* Tältä tämä esimerkki voisi näyttää:
 +
 
[[image:ListBoxBsp1.png]] -> [[image:ListBoxBsp2.png]]
 
[[image:ListBoxBsp1.png]] -> [[image:ListBoxBsp2.png]]
  
 
==Katso myös==
 
==Katso myös==
 +
 
* [[doc:lcl/stdctrls/tlistbox.html|TListBox dokumentaatio]]
 
* [[doc:lcl/stdctrls/tlistbox.html|TListBox dokumentaatio]]
 
* [[TDBListBox]]
 
* [[TDBListBox]]
  
 
{{LCL Components}}
 
{{LCL Components}}

Latest revision as of 07:50, 1 March 2020

Deutsch (de) English (en) suomi (fi) français (fr)

TListBox tlistbox.png 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

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-icon.png

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

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

ListBoxBsp1.png -> ListBoxBsp2.png

Katso myös


LCL Components
Component Tab Components
Standard TMainMenu • TPopupMenu • TButton • TLabel • TEdit • TMemo • TToggleBox • TCheckBox • TRadioButton • TListBox • TComboBox • TScrollBar • TGroupBox • TRadioGroup • TCheckGroup • TPanel • TFrame • TActionList
Additional TBitBtn • TSpeedButton • TStaticText • TImage • TShape • TBevel • TPaintBox • TNotebook • TLabeledEdit • TSplitter • TTrayIcon • TControlBar • TFlowPanel • TMaskEdit • TCheckListBox • TScrollBox • TApplicationProperties • TStringGrid • TDrawGrid • TPairSplitter • TColorBox • TColorListBox • TValueListEditor
Common Controls TTrackBar • TProgressBar • TTreeView • TListView • TStatusBar • TToolBar • TCoolBar • TUpDown • TPageControl • TTabControl • THeaderControl • TImageList • TPopupNotifier • TDateTimePicker
Dialogs TOpenDialog • TSaveDialog • TSelectDirectoryDialog • TColorDialog • TFontDialog • TFindDialog • TReplaceDialog • TTaskDialog • TOpenPictureDialog • TSavePictureDialog • TCalendarDialog • TCalculatorDialog • TPrinterSetupDialog • TPrintDialog • TPageSetupDialog
Data Controls TDBNavigator • TDBText • TDBEdit • TDBMemo • TDBImage • TDBListBox • TDBLookupListBox • TDBComboBox • TDBLookupComboBox • TDBCheckBox • TDBRadioGroup • TDBCalendar • TDBGroupBox • TDBGrid • TDBDateTimePicker
Data Access TDataSource • TCSVDataSet • TSdfDataSet • TBufDataset • TFixedFormatDataSet • TDbf • TMemDataset
System TTimer • TIdleTimer • TLazComponentQueue • THTMLHelpDatabase • THTMLBrowserHelpViewer • TAsyncProcess • TProcessUTF8 • TProcess • TSimpleIPCClient • TSimpleIPCServer • TXMLConfig • TEventLog • TServiceManager • TCHMHelpDatabase • TLHelpConnector
Misc TColorButton • TSpinEdit • TFloatSpinEdit • TArrow • TCalendar • TEditButton • TFileNameEdit • TDirectoryEdit • TDateEdit • TTimeEdit • TCalcEdit • TFileListBox • TFilterComboBox • TComboBoxEx • TCheckComboBox • TButtonPanel • TShellTreeView • TShellListView • TXMLPropStorage • TINIPropStorage • TJSONPropStorage • TIDEDialogLayoutStorage • TMRUManager • TStrHolder
LazControls TCheckBoxThemed • TDividerBevel • TExtendedNotebook • TListFilterEdit • TListViewFilterEdit • TLvlGraphControl • TShortPathEdit • TSpinEditEx • TFloatSpinEditEx • TTreeFilterEdit • TExtendedTabControl •
RTTI TTIEdit • TTIComboBox • TTIButton • TTICheckBox • TTILabel • TTIGroupBox • TTIRadioGroup • TTICheckGroup • TTICheckListBox • TTIListBox • TTIMemo • TTICalendar • TTIImage • TTIFloatSpinEdit • TTISpinEdit • TTITrackBar • TTIProgressBar • TTIMaskEdit • TTIColorButton • TMultiPropertyLink • TTIPropertyGrid • TTIGrid
SQLdb TSQLQuery • TSQLTransaction • TSQLScript • TSQLConnector • TMSSQLConnection • TSybaseConnection • TPQConnection • TPQTEventMonitor • TOracleConnection • TODBCConnection • TMySQL40Connection • TMySQL41Connection • TMySQL50Connection • TMySQL51Connection • TMySQL55Connection • TMySQL56Connection • TMySQL57Connection • TSQLite3Connection • TIBConnection • TFBAdmin • TFBEventMonitor • TSQLDBLibraryLoader
Pascal Script TPSScript • TPSScriptDebugger • TPSDllPlugin • TPSImport_Classes • TPSImport_DateUtils • TPSImport_ComObj • TPSImport_DB • TPSImport_Forms • TPSImport_Controls • TPSImport_StdCtrls • TPSCustomPlugin
SynEdit TSynEdit • TSynCompletion • TSynAutoComplete • TSynMacroRecorder • TSynExporterHTML • TSynPluginSyncroEdit • TSynPasSyn • TSynFreePascalSyn • TSynCppSyn • TSynJavaSyn • TSynPerlSyn • TSynHTMLSyn • TSynXMLSyn • TSynLFMSyn • TSynDiffSyn • TSynUNIXShellScriptSyn • TSynCssSyn • TSynPHPSyn • TSynTeXSyn • TSynSQLSyn • TSynPythonSyn • TSynVBSyn • TSynAnySyn • TSynMultiSyn • TSynBatSyn • TSynIniSyn • TSynPoSyn
Chart TChart • TListChartSource • TRandomChartSource • TUserDefinedChartSource • TCalculatedChartSource • TDbChartSource • TChartToolset • TChartAxisTransformations • TChartStyles • TChartLegendPanel • TChartNavScrollBar • TChartNavPanel • TIntervalChartSource • TDateTimeIntervalChartSource • TChartListBox • TChartExtentLink • TChartImageList
IPro TIpFileDataProvider • TIpHttpDataProvider • TIpHtmlPanel
Virtual Controls TVirtualDrawTree • TVirtualStringTree • TVTHeaderPopupMenu