Difference between revisions of "TListBox/fi"

From Free Pascal wiki
Jump to navigationJump to search
(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) 日本語 (ja)

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;

Light bulb  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 • TIpHtmlDataProvider • TIpHttpDataProvider • TIpHtmlPanel
Virtual Controls TVirtualDrawTree • TVirtualStringTree • TVTHeaderPopupMenu