AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi File mit SHFileOperation in Papierkorb versch. geht nicht
Thema durchsuchen
Ansicht
Themen-Optionen

File mit SHFileOperation in Papierkorb versch. geht nicht

Ein Thema von Lefko · begonnen am 14. Jul 2004 · letzter Beitrag vom 23. Okt 2015
 
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]=-
 
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz