Director de arbore, delfisită

Astăzi, hai să vorbim despre cum să folosiți TreeView pentru a face un arbore director, adică ceva asemănător cu partea stângă a Explorer-ului. Cea mai ușoară cale este la începutul programului de a găsi toate directoarele de pe disc și a le pune în TreeView. Dar această metodă are mai multe dezavantaje. În primul rând, este lung, mai ales dacă zif este activat. În al doilea rând, chiar dacă închideți și deschideți un dosar, acesta nu va fi actualizat. Prin urmare, este mai bine să faceți mai întâi o listă de discuri în TreeView cu un semn "+", adică să specificați existența pe disc a directoarelor. Acest lucru nu este întotdeauna adevărat, ci pentru a verifica dacă acest lucru este adevărat, mult timp datorită unității. Când încercați să deschideți un director sau o unitate, programul caută subdirectoare și le adaugă în ListView. În fiecare subdirector, programul încearcă să găsească cel puțin un subdirector. În funcție de rezultatele căutării, apare mesajul "+" sau nu.
Acest program utilizează pictograme din fișierul FileCtrl.res, localizat în directorul "Delphi5 \ lib".
punerea în aplicare

nivel de procedură # 40; Nume părinte: TTreeNode # 41; ;

funcția DirectoryName # 40; nume: șir # 41;. boolean;

rezultat: = # 40; nume <> '' # 41; și # 40; nume <> '..' # 41; ;

sr, srChild: TSearchRec;

cale: = nod. Text + '\' + cale;

nod: = nod. părinte;

până la nod = zero;

dacă FindFirst # 40; calea + '*. *'. faDirectory, sr # 41; = 0 atunci începe

dacă # 40; sr. Attr și faDirectory <> 0 # 41; și DirectoryName # 40; sr. nume # 41; apoi începe

nod: = Form1. TreeView1. Articole. AddChild # 40; ParentNode, sr. nume # 41; ;

nod. ImageIndex: = 0;

nod. SelectedIndex: = 1;

nod. HasChildren: = false;

dacă FindFirst # 40; cale + sr. Nume + '\ *. *'. faDirectory, srChild # 41; = 0 atunci începe

dacă # 40; srChild. Attr și faDirectory <> 0 # 41; și DirectoryName # 40; srChild. nume # 41;

apoi nod. HasChildren: = adevărat;

până # 40; găsi # 40; srChild # 41; <> 0 # 41; sau nod. hasChildren;

FindClose # 40; srChild # 41; ;

până la Find # 40; sr # 41; <> 0;

incheia altceva ParentNode. HasChildren: = false;

FindClose # 40; sr # 41; ;

procedura TForm1. FormCreate # 40; Expeditor: TObject # 41; ;

IconNames: matrice # 91; 0. 6 # 93; de șir = # 40; 'CLOSEDFOLDER'. 'OPENFOLDER',

'FLOPPY'. 'HARD'. „Rețea“. „CD-ROM“. 'RAM' # 41; ;

bm, mască: TBitmap;

TreeView1. Articole. BeginUpdate;

TreeView1. Imagini: = TImageList. CreateSize # 40; 16. 16 # 41; ;

bm: = TBitmap. Creați;

mască: = TBitmap. Creați;

pentru i: = scăzut # 40; IconNames # 41; la mare # 40; IconNames # 41; începeți

bm. Manipulați: = LoadBitmap # 40; HInstance, PChar # 40; IconNames # 91; eu # 93; # 41; # 41; ;

masca. atribui # 40; bm # 41; ;

masca. masca # 40; clBlue # 41; ;

TreeView1. Imagini. adăuga # 40; bm, mască # 41; ;

pentru c: = 'A' la 'Z' începe

DriveType: = GetDriveType # 40; PChar # 40; s # 41; # 41; ;

dacă DriveType = 1 continuați;

nod: = Form1. TreeView1. Articole. AddChild # 40; zero. s # 41; ;

caz tip DriveType

DRIVE_REMOVABLE: nod. ImageIndex: = 2;

DRIVE_FIXED: nod. ImageIndex: = 3;

DRIVE_REMOTE: nod. ImageIndex: = 4;

DRIVE_CDROM: nod. ImageIndex: = 5;

alt nod. ImageIndex: = 6;

nod. SelectedIndex: = nod. ImageIndex;

nod. HasChildren: = adevărat;

TreeView1. Articole. EndUpdate;

procedura TForm1. TreeView1Expanding # 40; Expeditor: TObject; Nod: TTreeNode;

var AllowExpansion: Boolean # 41; ;

TreeView1. Articole. BeginUpdate;

nivel # 40; nod # 41; ;

TreeView1. Articole. EndUpdate;