Usuwanie naraz wielu plików w ShellListView

0

Próbuję usunąć zaznaczone wiele pozycji (plików) w ShellListView, ale za każdym razem usuwa tylko jeden plik. Pozostałych nie rusza...

Oto kod:

procedure TForm1.Button2Click(Sender: TObject);
var
usun_plik: TShellFolder;
i : integer;
begin
  if ShellODB.Selected = nil then Exit
else
  begin
    for i := ShellODB.Items.Count-1 downto 0 do
     begin
      if ShellODB.Selected.Selected then
        begin
          usun_plik := ShellODB.Folders[ShellODB.Selected.Index] as TShellFolder;
          DeleteFile(usun_plik.PathName);
          Application.ProcessMessages;
        end;
     end;
  end;
end;

Co może być źle lub czego brakuje że nie usuwa wielu plików lecz jeden. Proszę o pomoc. [soczek]

0
for i := ShellODB.ItemIndex - 1 downto 0 do
  if ShellODB.Items[i].Selected then
    //usun
0

Hallo Opi!

Moze tak:

... 
for i := 0 to (ShellListView1.Items.Count - 1) do
...

Pozdrawiam
Markus
[???]

0

masz rację - u mnie powinno być oczywiście Items.Count - 1 zamiast ItemIndex - 1

0

Dzięki MarkusB i Misiekd

Połączyłem Wasze podpowiedzi i po drobnej modyfikacji zostosowałem tak:

var
usun_plik: TShellFolder;
i : integer;
begin
  if ShellODB.Selected = nil then Exit
  else
    begin
      for i := ShellODB.Items.Count-1 downto 0 do
        begin
         if ShellODB.Items[i].Selected then
          begin
           usun_plik := ShellODB.Folders[i] as TShellFolder;
           DeleteFile(usun_plik.PathName);
           Application.ProcessMessages;
          end;
        end;
    end;
end;
Misiekd napisał(a)
for i := 0 to (ShellListView1.Items.Count - 1) do

Lepsze downto bo występuje błąd "List index out of...".

MarkusB napisał(a)
if ShellODB.Items[i].Selected then

Pomogło choć nie dokońca...

Zmieniłem jeszcze z

usun_plik := ShellODB.Folders[ShellODB.Selected.index] as TShellFolder;

na

usun_plik := ShellODB.Folders[i] as TShellFolder;
0
Opi napisał(a)
Misiekd napisał(a)
for i := 0 to (ShellListView1.Items.Count - 1) do

Lepsze downto bo występuje błąd "List index out of...".

pomyliłeś się w cytacie - to nie mój tylko Marcusa :d

1 użytkowników online, w tym zalogowanych: 0, gości: 1