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;