Delphi - TTreeView feltöltése a merevlemez könyvtárszerkezetével

forráskód letöltése
Ebben a cikkben azt mutatjuk be, hogy miként tudnunk egy TTreeView komponenst feltölteni a merevlemezen található könyvtárszerkezettel. Ebben a cikkben azt mutatjuk be, hogy miként tudnunk egy TTreeView komponenst feltölteni a merevlemezen található könyvtárszerkezettel.

Ehhez egy rekurzív függvényt használunk fel, amely az alábbiak szerint működik:

Induláskor meghívjuk azzal a két paraméterrel, hogy 'C:\' és nil. Későbbiekben részletezzük, hogy mi is ez.
Első lépésként a függvény a FindFirst hívásával egy TSearchRec típusú rekordba fogja lekérdezni az első paraméterben megadott elérési útvonalon található első állományt. Mivel egy könyvtárban több állománybejegyzés is található, így egy ciklust kezdünk, amely addig fut, amíg találtunk állományt. Ezt abból tudjuk meg, hogy ha a FindFirst, vagy a később felhasználásra kerülő FindNext nullát ad értékül az R változónknak, akkor már nincs több állomány.

Ezután a TSearchRec rekord Attr mezőjének felhasználásával ellenőrizzük, hogy az aktuális állomány bejegyzés alkönyvtár-e, ha igen, akkor egy újabb ellenőrzéssel vizsgáljuk, hogy nem a '.', illetve a '..' bejegyzésekről van-e szó (MS-DOS hagyaték), ha nem, akkor növeljük a számlálót eggyel, majd létrehozunk egy új bejegyzést a TTreeView-ben.

Ez a létrehozás úgy történik, hogy az AddChild eljárást használjuk fel. Itt két paramétert kell megadnunk. Az első egy TTreeNode típus. Ez fogja megmondani, hogy melyik lesz a szülő bejegyzés a TTreeView-ben, amelyik alá fog az új tartozni. Ha visszaemlékszünk, kezdetben ennek a paraméternek nil értéket adunk. Ez arra utasítja az AddChild eljárást, hogy a TTreeView-ben az első hierarchia szintre tegye az új elemet, vagyis nem lesz neki őse.

Második paraméterként az új elem nevét kell megadnunk. Ez pedig a TSearchRec rekord Name mezője lesz, ami az alkönyvtárunk nevét fogja visszaadni.

Mielőtt folytatnánk ezt a ciklust, most rekurzív módon egy újat kell kezdenünk, hogy a megtalált alkönyvtárban esetlegesen meglévő alkönyvtárakat is végig keressük. Ezen a ponton tehát meg kell hívnunk a Loop függvényünket ismét. Most viszont az aktuálisan megtalált könyvtár elérési útvonalával és az AddChild által újonnan létrehozott bejegyzés értékével.

Így rekurzív módon végig megy a ciklusunk az összes alkönyvtár szinten és feltölti a TTreeView-et a megfelelő módon.

A TTreeView-be az alkönyvtárak az eredeti sorrendbe kerülnek és nem ABC szerint rendezetten. Ha szeretnénk rendezni az elemeket, akkor állítsuk át a TTreeView SortType property-ét stText értékre. A rendezéssel vigyázzunk, ha nagyon sok alkönyvtárunk van, akkor feltöltés után a rendezés igen sokáig eltarthat.

A feltöltés nem szükségszerűen a teljes merevlemezre kell hogy megtörténjen, hanem egy tetszőleges könyvtár alkönyvtárait is beolvashatjuk. Ehhez csupán annyit kell módosítani a forráskódon, hogy a nyomógomb lenyomásánál amikor meghívjuk a Loop függvényünket, annak paraméterként ne azt adjuk át, hogy 'C:\', hanem egy tetszőleges alkönyvtárt, mint például 'C:\Windows\'.