// Es werden die Ordner
eines Baumes in ein Treeview eingelesen. Dazu setzt man
// Getestet mit D4 unter NT4 var merkpfad: string; procedure findordner(tv: TTreeView; pfad: string; tn: TTreenode); var sr: TWin32FindData; h: THandle; begin h := FindFirstFile(PChar(pfad + '*.*'), sr); if h <> INVALID_HANDLE_VALUE then repeat if (sr.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY > 0) and (string(sr.cFileName) <> '.') and (string(sr.cFileName) <> '..') then begin tn := tv.Items.addchild(tn, sr.cFileName); tn.imageindex := 5; tn.selectedindex := 6; findordner(tv, pfad + sr.cFileName + '\', tn); tn := tn.parent; end; until Findnextfile(h, sr) = false; windows.FindClose(h); end; procedure baum(tv: TTreeView; pfad: string); var ttn: TTreeNode; fnam: string; begin screen.cursor := crhourglass; merkpfad := pfad; if ansilastchar(merkpfad) = '\' then delete(merkpfad, length(merkpfad), 1); tv.Items.BeginUpdate; tv.Items.Clear; if ansilastchar(pfad) <> '\' then pfad := pfad + '\'; if DirectoryExists(pfad) then begin fnam := copy(pfad, 1, length(pfad) - 1); fnam := copy(fnam, lastdelimiter('\', fnam) + 1, max_path); ttn := tv.Items.Add(nil, fnam); if (length(pfad) = 3) and (pfad[2] = ':') then begin case getdrivetype(pchar(pfad)) of DRIVE_REMOVABLE: ttn.imageindex := 0; DRIVE_FIXED: ttn.imageindex := 1; DRIVE_CDROM: ttn.imageindex := 2; DRIVE_REMOTE: ttn.imageindex := 3; DRIVE_RAMDISK: ttn.imageindex := 4; end; ttn.selectedindex := ttn.imageindex; end else begin ttn.imageindex := 5; ttn.selectedindex := 6; end; findordner(tv, pfad, ttn); tv.alphasort; tv.Items[0].expand(false); tv.selected := tv.Items[0]; end; tv.Items.EndUpdate; tv.setfocus; screen.cursor := crdefault; end; //---------------- Beispielaufrufe --------------- // Beim Ändern einer Drivecombobox wird das entsprechende // Laufwerk eingelesen procedure TForm2.DriveComboBox1Change(Sender: TObject); begin baum(TreeView1, DriveComboBox1.drive + ':\'); end; // Das Windows-Verzeichnis wird eingelesen procedure TForm2.Button1Click(Sender: TObject); var s: string; begin setlength(s, max_path); setlength(s, getwindowsdirectory(pchar(s), max_path)); baum(treeview1, s); end; //-------------------------------------------------- // Beim Anklicken eines Ordners zeigt Label1 den // kompletten Pfad an function findPfad(Node: TTreeNode): string; begin if Node = nil then result := '' else begin if Node.Parent <> nil then result := findPfad(Node.Parent) + '\' + Node.Text else result := merkpfad; end; end; procedure TForm2.TreeView1Change(Sender: TObject; Node: TTreeNode); begin label1.caption := findpfad(TreeView1.selected); end;
// evtl. die Länge des Labels kürzen; siehe dazu: |
Zugriffe seit 6.9.2001 auf Delphi-Ecke