Pod pojmom zoznamy môžeme v programe Lazarus rozumieť napríklad tieto komponenty: ListBox, ComboBox (paleta Standard), CheckListBox, ColorBox (Additional). Slúžia na výber konkrétneho prvku (resp. prvkov) z určitej množiny údajov.
Jeho najdôležitejšou vlastnosťou je Items (zoznam položiek) typu TStrings
. Tento typ sme spomínali už pri komponente Memo. Teraz ho však skúsime upraviť už v dobe návrhu.
V Object Inspectore kliknite na vlastnosť Items. Uvidíte tlačidlo s troma bodkami. Keď naňho kliknete, zjaví sa okno Strings Editor Dialog. Tam môžete napísať jednotlivé položky zoznamu - každú do jedného riadku. Na zoradenie sa dá použiť tlačidlo Sort. Všetko potvrdíte stlačením tlačidla OK.
Ako vidíte, hneď po potvrdení sa vami zadané hodnoty zjavili v ListBoxe na formulári. Rovnaké hodnoty sa objavia aj po spustení programu; zo zoznamu môžete momentálne vybrať jednu položku - skúste si to.
Index vybranej položky (prvá má index 0) sa zisťuje a nastavuje vlastnosťou ItemIndex. Tá nie je dostupná v Object Inspectore - môžeme ju meniť len počas behu programu (vďaka zdrojovému kódu, ktorý napíšeme). Hovorí sa tomu „runtime premenná“.
V prípade, že nastavíte vlastnosť MultiSelect na true
, získate možnosť výberu viacerých položiek naraz (podržte kláves Ctrl a klikajte). Zistiť, či je prvok s daným indexom vybraný, sa dá vlastnosťou Selected[index], ktorá je typu boolean
. SelCount zas vráti počet vybraných položiek. Uvediem príklad (MultiSelect je už nastavené na true
):
procedure TfrmMoj.btnTlacClick(Sender: TObject); var i: integer; s: string = ''; begin {postupne zistujeme, ci su polozky vybrane} for i := 0 to lbxZoznam.Items.Count-1 do {ak je polozka vybrana, pridame ju k retazcu} if lbxZoznam.Selected[i] then s := s+#13+lbxZoznam.Items[i]; ShowMessage(s); // vypiseme hotovy retazec end;
Program má za úlohu zobraziť v dialógovom okienku názvy všetkých vybraných položiek zoznamu, oddelených novým riadkom (znak #13).
Od ListBoxu sa líši tým, že nezobrazí hneď všetky položky - je „zbalený“. Navyše v ňom nemôžeme vybrať viac položiek naraz.
Ak nastavíme vlastnosť Style na csDropDown, budeme dokonca môcť vpisovať do ComboBoxu vlastný text, nenachádzajúci sa medzi položkami (Items). Naopak, hodnota csDropDownList nám umožní vyberať si len z definovaných položiek. Odporúčam vyskúšať (spustiť program raz s jedným, raz s druhým nastavením), uvidíte značný rozdiel.
Komponent veľmi podobný LisBox-u. Jednotlivé položky však pri sebe majú zaškrtávacie políčka. Logická vlastnosť Checked[index] určuje, či je položka s daným indexom zaškrtnutá (true
) alebo nie (false
).
Obdoba ComboBoxu, avšak miesto textu si vyberáme jednu z ponúknutých farieb. Rôznorodosť farieb, z ktorých môžeme vyberať, určíme vlastnosťou Palette (hodnoty cpDefault, cpFull).
Vybraná farba je dostupná v runtime vlastnosti Selection typu TColor
. Je to špeciálny typ premennej určený pre ukladanie farieb. Nasledujúci príklad stručne ukazuje možnosti práce s TColor
.
procedure Farby; var Farba: TColor; begin Farba := $7FFFFFFF; // hexadecimalny zapis Farba := clWhite; // jednoducho biela Farba := clText; // farba textu, aku mame // nastavenu vo Windows {pretypovanie farby na retazec} ShowMessage(ColorToString(Farba)); end;