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?