Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi shellexecute (ordner öffnen,später löschen) - Problem (https://www.delphipraxis.net/110380-shellexecute-ordner-oeffnen-spaeter-loeschen-problem.html)

Overclocker 17. Mär 2008 11:57


shellexecute (ordner öffnen,später löschen) - Problem
 
Hallo,
mit folgendem Code öffne ich einen Ordner:
Delphi-Quellcode:
procedure ShowFolder(strFolder: string);
begin
  ShellExecute(Application.Handle, PChar('open'), PChar(strFolder), nil, nil, SW_SHOWNORMAL);
end;

procedure Form2.sTabSheet2Show(Sender: TObject);

begin
messagedlg('Es wird nun ein Ordner Fenster geöffnet, indem Sie alle Dateien speichern können',mtInformation,[mbOK],0);
ShowFolder(ExtractFilePath(ParamStr(0))+'\Musik\'+inttostr(strtoint(Musiknr.text)-1));

end;
so, das funktioniert soweit auch ganz gut. jetzt zu meinem problem:
mit

Delphi-Quellcode:
deldir(ExtractFilePath(ParamStr(0))+'Musik\'+inttostr(Musiknr.text));
möchte ich den ordner löschen, das funktioniert auch soweit NUR das problem ist folgendes:
ich öffne mein programm, lass den ordner öffne via delphi und kopier dann alles was ich will in diesen ordner rein. dann geh ich ganz normal auf schließen (da es ja ein "normaler" windows ordner ist).
so, wenn ich das gemacht habe, dann kommt bei der DelDir Funktion:

Delphi-Quellcode:
function deldir(dir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc := FO_DELETE;
    fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
    pFrom := PChar(dir + #0);
  end;
  Result := (0 = ShFileOperation(fos));
end;
ein fehler und zwar dass der Zugriff verweigert wurde (warscheinlich weil irgendwo im hintergrund der ordner trotzdem noch offen ist und somit geschützt ist).
wenn ich mein programm dann schließe, wird der ordner auch gelöscht nur es kommt im programm halt immer der fehler, dass der zugriff verweigert wurde und das irritiert den user ja.

woran liegt das?

mfg

Overclocker 17. Mär 2008 15:58

Re: shellexecute (ordner öffnen,später löschen) - Problem
 
Problem gelöst: lag nicht an einer instanz, sondern durch das nutzen eines shelltreviews war da noch eine gewisse verbindung da (die meiner meinung eigentlich beim schließen des formulars geschlossen werden sollte), die zu diesem fehler führt.
ein
tabsheet2.destroy (wo die shelltreeview komponente vorhanden ist) im onclose ereignis löst das problem

DeddyH 17. Mär 2008 16:45

Re: shellexecute (ordner öffnen,später löschen) - Problem
 
Statt Destroy solltest Du aber Free verwenden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:37 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