A példában a „C:\Program Files” könyvtár tartalmát jelenítjük meg a TreeView komponensben. Amikor kiválasztunk egy fájlt a TreeView-ből, akkor annak tulajdonságai megjelennek a komponens alatt. Ezt a feladatot úgy oldjuk meg, hogy létrehozunk egy TFileProperties nevű összetett adattípust (record), amiben a tartalomjegyzék beolvasásakor a fájl adatai eltárolhatók. Az új elemet a TreeView-hoz az Items property AddNode függvényével adjuk hozzá.
TreeView1.Items.AddNode(nil, node, f.Name, fi, naAddChild);
Az első paraméter TTreeNode típusú (Node). Ha már egy előzőleg létrehozott TTreeNode objektumot szeretnénk hozzáadni a listához, akkor azt ebben a paraméterben tudjuk megtenni. Ha a TreeView egy már létező elemét adjuk meg, akkor ezzel áthelyezhetjük azt.
Ha nil-t adunk meg, akkor a függvény automatikusan létrehozza az objektumot.
A második (Relative) és az utolsó (Method) paraméterek együtt határozzák meg, hogy az új elem a listában hova kerüljön. A Method paraméter értékétől függően a Relative paraméterben megadott elem lesz a szülő, vagy a testvér eleme az új elemnek.
A Relative paraméter értékei a következők lehetnek:
- naAdd: az új elem a testvér eleme lesz a Relative paraméterben megadott elemnek, és az utolsó helyre kerül.
- naAddFirst: annyiban különbözik az naAdd-tól, hogy az elem az első helyre kerül.
- naInsert: az új elemet a Relative paraméterben megadott elem elé fogja beszúrni.
- naAddChild: a Relative paraméterben megadott elem a szülője lesz az új elemnek, az új elem pedig az utolsó helyre kerül.
- naAddChildFirst: ua. mint az előző, de az elem az első helyre kerül.
A harmadik paraméter (S) az elem neve, ami a listában megjelenik.
A negyedik (Data) paraméter egy pointer az elemhez fűzendő objektumra. Mivel ez egy egyszerű pointer, így ez az objektum bármi lehet, egy egyszerű változótól kezdve egy összetettebb objektumig. Az elemhez fűzött objektumokhoz a Data property-n keresztül férhetünk hozzá.
var
fi: ^TFileProperties;
...
fi:=TreeView1.Selected.Data;
A példában a fi egy pointer, amely egy TFileProperties típusú változóra mutat. Ennek a változónak futásidőben foglaljuk le a memóriát, amit az elemek törlésekor fel is kell szabadítani. Ezt a Form OnDestroy eseményénél tesszük meg.
A második példaprogramban a MultiSelect lehetőséget vizsgáljuk meg. Ha a MultiSelect property értéke igaz, akkor a listából a felhasználó egyszerre több elemet is kijelölhet. Ennek lehetőségeit a MultiSelectStyle property-ben szabályozhatjuk. Ez egy tömb típusú property. amelyben a következő értékeket lehet megadni:
- msControlSelect: a Ctrl billentyű nyomva tartása mellett lehet több elemet kijelölni.
- msShiftSelect: a Shift billentyű használatával egyszerre több elem is kijelölhető. Az elsőnek kijelölt elemtől (Selections[0]), a Shift billentyű nyomva tartása mellett kijelölt elemig az összes elemet kijelöli. Ha például kijelöljük az első elemet, majd a Shift billentyűvel az utolsót, akkor az összes közbenső elem kijelölt lesz.
- msVisibleOnly: csak a látható elemeket jelöli ki. Ha ez az érték nincs megadva, akkor a Shift-tel történő kijelölésnél az összes elemet kijelöli, ellenkező esetben csak azokat, amelyek látszanak.
- msSiblingOnly: csak a testvér elemeket engedi kijelölni.
A kijelöléseket a ClearSelection eljárással tudjuk törölni. A KeepPrimary logikai típusú paraméterben megadhatjuk, hogy az elsőnek kiválasztott elem (Selections[0]) kijelölését is törölje-e. Ha a paraméter értéke igaz, akkor nem törli, ha hamis, akkor pedig törli. Ez utóbbi a paraméter alapértelmezett értéke, tehát ha az összes kijelölést törölni szeretnénk, akkor nem kötelező megadni a paramétert.
A Deselect eljárás a TTreeNode típusú paraméterben (Node) megadott elem kijelölését szünteti meg.
A FindNextToSelect függvény visszatérési értéke a következő kiválasztható elem objektuma (TTreeNode). A kiindulási pont mindig Selected property-n keresztül elérhető elem. Először ennek testvér elemeit nézi meg, és ha talál olyat, amelyik még nincs kijelölve, akkor annak objektumával tér vissza. Ha az összes testvér elem ki van már jelölve, akkor a szülő elemet, és annak testvér elemeit nézi meg. Ez így megy egészen addig, amíg nem talál egy kiválasztható elemet, illetve nem ér el a gyökér elemhez. Ha nem talált kiválasztható elemet, akkor a függvény visszatérési értéke nil.
A GetSelections függvény egy TList típusú listába kimásolja a kijelölt elemeket. A lista objektumát kell paraméterként megadni. A függvény visszatérési értéke megegyezik a Selected property-vel.
A Subselect eljárás a paraméterként megadott elemet (TTreeNode) kijelöli. Ha a Validate logikai típusú paramétert is megadjuk igaz értékkel, akkor ellenőrzi, hogy a kijelölés a MultiSelectStyle property-ben meghatározott szabályoknak megfelel-e. Ennek a paraméternek az alapértelmezett értéke hamis, ha tehát ha nem akarjuk, hogy a kijelölés után ellenőrzést végezzen, akkor egyszerűen hagyjuk el a paramétert.
A Select eljárással egyszerre több elemet jelölhetünk ki a listából. Az eljárásnak háromféle formája van, ezek természetesen csak a paraméterezésben térnek el egymástól.
Az első formában a paraméter egy TTreeNode típusú elemeket tartalmazó tömb. A második formátum, amikor egy TList típusú listában vannak az elemek tárolva, és az ebben a listában tárolt elemeket kell kijelölni. Mindkét esetben az előző kijelölések törölve lesznek.
A Select eljárás harmadik formája eltér az előző kettőtől. Ebben paraméterként megadhatjuk egy elem objektumát, valamit egy másik paraméterben a Shift illetve Ctrl billentyű állapotát. Ha ez egy üres tömb, akkor ugyanaz történik, mintha csak egyszerűen kattintottunk volna az elemen, tehát az elem ki lesz jelölve, míg az előzőleg kiválasztott elemek kijelölése törlődik. Ha a paraméterben megadjuk az ssShift értéket, akkor a kijelölés úgy történik meg, mintha lenyomva tartottuk volna a Shift billentyűt, illetve az ssCtrl érték mellett a Ctrl billentyűt.