Tym razem programem do napisania jest lista elementów. Do tego celu wykorzystamy komponent o nazwie "listbox". Program musi pozwalać na dodawanie elementów listy. Dodatkowo będzie miał także prostą opcję zapisywania listy na dysku.
Na formularzu umieszczamy następujące komponenty: 5xTButton, 1xTListbox, 1xTEdit
Wszystkim przyciskom stworzymy zdarzenia OnClick.
Pierwszy button będzie odpowiadał za zamknięciu programu czyli po prostu wykona "close;".
Najistotniejszym elementem będzie jednak oczywiście listbox, a konkretnie pole listbox.items, które jest obiektem typu tstrings czyli listą stringów. Każdy string z tej listy odpowiada jednemu wierszowi widocznemu w programie.
Stwórzmy zatem metodę onClick dla przycisku który nazwiemy "dodaj" który będzie do listy dodawał tekst wpisany do TEdit
listbox1.items.add(edit1.text);
edit1.text:='';
czyli po polsku: korzystamy z metody dodaj (add), której parametr jest łańcuchem znaków. W naszym przypadku używamy tekstu wpisanego do pola edycyjnego. Po dodaniu czyścimy pole edycyjne.
Żeby usunąć element potrzebna jest pętla sprawdzająca wszystkie elementy i kasująca te, które są zaznaczone
var i:integer;
...
for i:=listbox1.items.count-1 downto 0 do
if listbox1.selected[ i ] then listbox1.items.delete(i); {jeżeli element i jest zaznaczony to go kasuj)
właśność count zwraca ilość elementów w obiekcie TStrings. Od tej liczby odejmujemy 1 ponieważ indeksy elementów zaczynają się od zera.
Bardzo ważne aby usuwając elementy z jakichkolwiek list robić to od końca czyli przeglądać elementy od ostatniego do pierwszego za pomocą "downto" zamiast "to". Gdbyśmy korzystali z "to" po usunięciu k-tego elementu wszystkie następne automatycznie przechodzą w górę zatem zmieniają sie ich indeksy. Co za tym idzie dotychczasowy k+1 element bedzie miał index k, natomiast w kolejnym przebiegu pętli będziemy się odwoływać do elementu o indeksie k+1 czyli dotychczasowego k+2, istnieje więc ryzyko, że pewne elementy zostaną pominięte w sprawdzaniu a także że wystąpi niedozwolona próba odczytu danych z elementu który już nie istnieje, i będzie większe od ilości elementów minus 1. W przypadku użycia downto usnięcie k-tego elementu oczywiście że na k pozycję wskoczy k+1, ale ponieważ sprawdzaliśmy od końca, to ten element został już sprawdzony i bez obaw mozna przejść do sprawdzania wcześniejszego.
Ostatnie 2 przyciski które nam zostały do zaprogramowania będą służyć odczytowi i zapisowi do pliku linii z listboxa. Okazuje się że nie jest to nic trudnego ponieważ klasa tstrings oferuje metody loadfromfile i savetofile, które przyjmują jako argument nazwę pliku. Wystarczy więc stworzyć zdarzenia dla przycisków i wpisać odpowiednio:
listbox1.items.savetofile('lista.txt');
oraz
listbox1.items.loadfromfile('lista.txt');