Einzelnen Beitrag anzeigen

Lefko

Registriert seit: 31. Jul 2003
359 Beiträge
 
Delphi 6 Enterprise
 
#1

File mit SHFileOperation in Papierkorb versch. geht nicht

  Alt 14. Jul 2004, 21:54
Hi,
Ich hab des Katers (in manchen Kreisen auch als "Sakura" o.Ä bekannt) function "DoFileWork" aus der CodeLibrary verwendet, jedoch hab ich da mal ne Frage zu den Parametern FOF_ALLOWUNDO etc.

Ich will mit folgendem Code ein paar Dateien, die in einer Listbox stehen, in den Papierkorb verschieben (so, dass man sie notfalls noch wiederherstellen kann):

sakuras function:
Delphi-Quellcode:
function DoFileWork(aOperation: FILEOP_FLAGS; aFrom, aTo: AnsiString;
                    Flags: FILEOP_FLAGS): Integer;
var FromPath, ToPath: AnsiString;
    SHFileOpStruct: TSHFileOpStruct;
begin
FromPath := aFrom + #0#0;
ToPath := aTo + #0#0;
with SHFileOpStruct do
 begin
  Wnd := Application.Handle;
  wFunc := aOperation;
  pFrom := PAnsiChar(FromPath);
  if ToPath <> ''
    then pTo := PAnsiChar(ToPath)
    else pTo := nil;
  fFlags := Flags;
 end;
Result := SHFileOperationA(SHFileOpStruct);
end;
Meine Verwendung:
Delphi-Quellcode:
procedure TForm3.Dateilschen1Click(Sender: TObject); //Dateilschen1 ist ein PopUp-MenuItem
var a : integer;
    s : string;
begin
if MessageDlg('Datei(en) wirklich endgültig löschen?', mtConfirmation, [mbYes, mbNo], 0) = idYes
  then
   begin
    //#0 immer dazwischensetzen
    s := '';
    if LbFiles.SelCount > 1
      then
       begin
        for a := 0 to LbFiles.SelCount-1 do
         s := s + LbFiles.Items[LbFiles.itemindex-(LbFiles.SelCount-1)+a] + #0;
        s := copy(s, 0, length(s)-1); //<--- letztes #0 entfernen
       end
      else s := LbFiles.Items[LbFiles.ItemIndex];

    DoFileWork(FO_DELETE, s, '', FOF_NOCONFIRMATION); //Das geht nicht!!
    LbFiles.DeleteSelected;
   end;
end;

Problem dabei: Die Dateien sind zwar weg, aber er hat sie nicht in den Papierkorb verschoben, der ist leer
Wenn ich statt FOF_NOCONFIRMATION aber FOF_ALLOWUNDO nehme, dann sind die Dateien drin, wie sie sollen, nur will ich nicht immer bestätigen müssen!

Woran liegt das?
Johannes
-=[Nennst du meinen Namen, bin ich schon nicht mehr da]=-