HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Könyvtárszerkezet fastruktúrában, állományokhoz rendelt ikonokkal


Példaprogram letöltése

5471 bájt

Gyakran találkozhatunk olyan dialógusablakokkal, melyek egy fastruktúrában jelenítik meg a számítógép meghajtóinak szerkezetét. Lehetőség van arra, hogy a Delphi eszközeivel készítsük el a saját mappa-, vagy állományválasztó dialógusablakunkat. A mellékelt példában elkészített ablakban minden állomány és mappa neve mellett az adott objektumhoz rendelhető ikon jelenik meg.

A mellékelt példában egyetlen nyomógombot találunk a Form-on, melynek segítségével a kiválasztott meghajtó vagy mappa gyermekeit kigyűjthetjük, és a TreeView komponensben megjeleníthetjük. A nyomógombra kattintva megjelenik egy mappaválasztó ablak, melyben megadhatjuk az elérési útvonalat.
Ez utóbbi műveletet a GetFolder metódusban végezzük el. A metódusban egy TBrowseInfo rekordot töltünk fel a megfelelő adatokkal, majd meghívjuk a SHBrowseForFolder metódust, hogy megjelenjen a mappaválasztó dialógusablak.
FillChar(BrowseInfo,SizeOf(BrowseInfo),#0);
BrowseInfo.hwndOwner := Handle;
BrowseInfo.pszDisplayName := @path[0];
BrowseInfo.lpszTitle := 'Select a folder';
BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
PIDL := SHBrowseForFolder(BrowseInfo);
A metódus visszatérési értékét vizsgáljuk meg a következő lépésben, majd amennyiben az megfelelő, visszaadjuk a kapott elérési útvonalat.
if Assigned(PIDL) then begin
  if SHGetPathFromIDList(PIDL, path) then
    Result := string(path);
end;
Miután az elérési útvonal rendelkezésünkre áll, elhelyezünk egy gyökérelemet a Treeview komponensben, majd meghívjuk a FilesCollect metódust, mely rekurzívan kigyűjti a mappa gyermekobjektumait.
TreeView1.Items.Clear;
root := TreeView1.Items.Add(nil, path);
root.ImageIndex := ISAClosedFolder;
root.SelectedIndex := ISAOpenFolder;
FilesCollect(path + '\' + '*.*', root);
A metódusban meghívjuk a FindFilesIcon függvényt, mely a megfelelő módszerekkel lekérdezi az adott elemhez (mappa, vagy állomány) tartozó ikont.
A megoldás lényege, hogy a Shell32.dll, illetve a Windows rendszerben található egyéb állományok bináris kódja tartalmaz ikonokat, csupán az adott ikon erőforrás sorszámát kell ismerni.
Mappák esetében könnyű dolgunk van, hiszen ott minden esetben a hagyományos ikont kell megjeleníteni. Az állományok esetében viszont meghívjuk a RegistryIconExtraction metódust, melyben megvizsgáljuk, hogy az adott kiterjesztéshez milyen állomány van eltárolva a Registry-ben, vagyis milyen állományban tárolódik az ikon.
A Registry HKEY_CLASSES_ROOT nevű főkulcsa alatt találjuk meg a kiterjesztéseket. A kiterjesztés kulcsának első bejegyzése egy újabb kulcsnév, melynek DefaultIcon kulcsa alatt találjuk meg az állomány nevét, valamint egy sorszámot, mely az ikon sorszámát jelenti.
Amennyiben ezek az információk rendelkezésre állnak, akkor hívjuk meg az ExtractIconEx metódust, melynek segítségével kinyerjük az állományból az ikon kezelőjét, melyet már felhasználhatunk az ikon objektum létrehozásához.
IconHandle := ExtractIconEx(PChar(FileName), IconPos,PLargeIcon, PSmallIcon, 1);

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 756. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |