ich versuche schon seit Tagen, die ShellTreeView und ShellListView zu aktualisieren, nachdem ein Ordner aus der ShellListView gelöscht wird. Für die ShellListView ist mir das mehr oder weniger gelungen, aber nicht für die ShellTreeView, und überhaupt bin ich mit meinem Code irgendwie nicht ganz zufrieden. Kann mir da jemand Optimierungstipp geben? Vielen Dank!
Hier der Code:
Code: Alles auswählen
procedure TMainForm.DeleteEmptyDir();
var
i, j, p: Integer;
str, OrgRoot: String;
delete: Boolean = False;
begin
// Leere Ordner nur in den "Debitoren"-Ordnern löschen
for i := 0 to High(AktiveMitglieder) do
begin
p := Pos('\' + AktiveMitglieder[i, 0] + '\', ShellTreeView1.GetPathFromNode(ShellTreeView1.Selected));
if p <> 0 then
begin
if MainForm.ShellListView1.Items.Count > 0 then
begin
for j := 0 to MainForm.ShellListView1.Items.Count - 1 do
begin
// Aktuelles Verzeichnis
str := MainForm.ShellListView1.GetPathFromItem(MainForm.ShellListView1.Items.Item[j]);
if IstVerzeichnisLeer(str) then
begin
if DeleteDirectory(str, False) then
begin
MainForm.EventLog1.Info('Verzeichnis gelöscht: ' + str);
delete := True;
end else MainForm.EventLog1.Info('Verzeichnis kann nicht gelöscht werden: ' + str);
end;
end;
end;
end;
end;
// Wenn wenigstens ein leerer Ordner gelöscht wurde - ShellListView aktualisieren
if delete then
begin
OrgRoot := Self.ShellListView1.Root;
Self.ShellListView1.Root := '';
Self.ShellListView1.Root := OrgRoot;
MainForm.EventLog1.Info('Verzeichnis aktualisiert: ' + ShellTreeView1.GetPathFromNode(ShellTreeView1.Selected));
end;
end;