Днес нека да поговорим за това как да използвате с дървовидна структура, за да се направи една директория дърво, тоест, нещо подобно на лявата страна на Explorer. Най-лесният начин - е, когато започнете програма за намиране на всички директории на диска и ги подкрепям в дървовидна структура. Но този метод има няколко недостатъка. На първо място, това е дълъг, особено ако са включени ZIF. На второ място, дори и да се затвори и отвори някаква папка, тя няма да бъде актуализиран. Ето защо, най-добре е първо да се направи списък на дискове в TreeView с "+", а именно, да се отбележи, че има директории на диска. Това не винаги е вярно, но провери дали това е вярно, за дълго време, се дължи на устройството. Когато се опитате да разкрие директория или да карате програмата търси за поддиректории и ги добавя в ListView. Във всяка поддиректория на програмата се опитва да намери най-малко една поддиректория. В зависимост от резултатите от търсенето "+" се появява, или не.
Тази програма използва икони от FileCtrl.res файл, намиращ се в "Delphi5 \ либералните" в директорията.
изпълнение
Ниво процедура # 40; ParentNode: TTreeNode # 41; ;
функция DirectoryName # 40; име: низ # 41. булева;
резултат: = # 40; име <> '.' # 41; и # 40; име <> ".." # 41; ;
SR, srChild: TSearchRec;
път: = възел. Текст + '\' + пътека;
възел: = възел. майка;
докато възел = нула;
ако FindFirst # 40; път + "*. *". faDirectory, со # 41; = 0, тогава започва
ако # 40; SR. ATTR и faDirectory <> 0 # 41; и DirectoryName # 40; SR. име # 41; след това да започне
възел: = Form1. TreeView1. Предмети. AddChild # 40; ParentNode, SR. име # 41; ;
възел. ImageIndex: = 0;
възел. SelectedIndex: = 1;
възел. HasChildren: = фалшива;
ако FindFirst # 40; път + SR. Наименование + '\ *. * ". faDirectory, srChild # 41; = 0, тогава започва
ако # 40; srChild. ATTR и faDirectory <> 0 # 41; и DirectoryName # 40; srChild. име # 41;
След това възел. HasChildren: = вярно;
до # 40; намирам # 40; srChild # 41; <> 0 # 41; или възел. HasChildren;
FindClose # 40; srChild # 41; ;
докато Намери # 40; SR # 41; <> 0;
сложи край на друг ParentNode. HasChildren: = фалшива;
FindClose # 40; SR # 41; ;
процедура TForm1. FormCreate # 40; Подател: TObject # 41; ;
IconNames: масив # 91; 0 6 # 93; на низ = # 40; "CLOSEDFOLDER". "OPENFOLDER"
"FLOPPY". "Твърди". "Мрежа". "CDROM". "RAM" # 41; ;
т.м., маска: TBitmap;
TreeView1. Предмети. BeginUpdate;
TreeView1. Снимки: = TImageList. CreateSize # 40; 16. 16 # 41; ;
BM: = TBitmap. Създаване;
маска: = TBitmap. Създаване;
защото: = ниско # 40; IconNames # 41; високата # 40; IconNames # 41; започвайте
BM. Дръжка: = LoadBitmap # 40; HInstance, PChar # 40; IconNames # 91; аз # 93; # 41; # 41; ;
маска. Присвояване # 40; т.м. # 41; ;
маска. маска # 40; clBlue # 41; ;
TreeView1. Изображения. Добави # 40; т.м., маска # 41; ;
за C: = "А" до "Z" не започвайте
DriveType: = GetDriveType # 40; PChar # 40; ите # 41; # 41; ;
ако DriveType = 1 и след това да продължи;
възел: = Form1. TreeView1. Предмети. AddChild # 40; нула. ите # 41; ;
При DriveType на
DRIVE_REMOVABLE: възел. ImageIndex: = 2;
DRIVE_FIXED: възел. ImageIndex: = 3;
DRIVE_REMOTE: възел. ImageIndex: = 4;
DRIVE_CDROM: възел. ImageIndex: = 5;
друг възел. ImageIndex: = 6;
възел. SelectedIndex: = възел. ImageIndex;
възел. HasChildren: = вярно;
TreeView1. Предмети. EndUpdate;
процедура TForm1. TreeView1Expanding # 40; Подател: TObject; Възела: TTreeNode;
Var AllowExpansion: Булева # 41; ;
TreeView1. Предмети. BeginUpdate;
ниво # 40; възел # 41; ;
TreeView1. Предмети. EndUpdate;