// 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





