Einzelnen Beitrag anzeigen

Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 

Ende von MDI-Anwendungen erfahren

  Alt 26. Sep 2009, 22:43
Hallo,

ich starte aus meinem Programm heraus über den einfachen Auruf bestimmter Dateien die damit verknüpften Programm. Z.B. öffnet mir ein Aufruf der Datei "Test.odt" diese Datei mit dem SWriter von OpenOffice. Da ich diese Datei aus bestimmten Gründen zuvor in ein temporäres Verzeichnis kopiere und von dort aus aufrufe/öffne, muss sie natürlich nach der Bearbeitung durch den SWriter wieder zurück kopiert werden. Das ganze geschieht (im Moment) so:
Delphi-Quellcode:
Procedure ExecuteProgramm(Const PFileName,Params: String; Warten: Boolean = True);
Var
   SEInfo      : TShellExecuteInfo;
   ExecuteFile   : String;
Begin
   ExecuteFile:='"'+PFileName+'"';
   FillChar(SEInfo,SizeOf(SEInfo),0);
   SEInfo.cbSize:=SizeOf(TShellExecuteInfo);
   With SEInfo Do
   Begin
      fMask:=         SEE_MASK_NOCLOSEPROCESS;
      Wnd:=            Application.Handle;
      lpFile:=         PChar(ExecuteFile);
      lpParameters:=   PChar(Params);
      nShow:=         SW_SHOWNORMAL;
   End;
   If ShellExecuteEx(@SEInfo) Then
      If Warten Then
         While Not Application.Terminated And
            (MsgWaitForMultipleObjects(1,SEInfo.hProcess,False,INFINITE,QS_ALLINPUT)=WAIT_OBJECT_0+1) Do
               Application.ProcessMessages;
End;

[...]

Procedure TForm1.Irgendwas;
Begin
   ExecuteProgramm('D:\Test.odt','',True);
Handelt es sich um eine SDI-Anwendung ist das ja kein Problem, da die Awendung fast immer beendet wird, wenn das Dokument geschlossen wird. Ich weiß, es gibt Ausnahmen, was aber nicht diskutiert werden soll. Bei MDI-Anwendungen läuft es so leider nicht.

So habe ich das Problem, dass der Benutzer z.B. die Test.odt über mein Programm lädt und ich warte. Danach öffnet er eine andere Datei, ohne den SWriter zu beenden. Selbst wenn er die Test.odt schließt, bekomme ich das nicht mit und warte weiter (auf das Ende vom SWriter). Am Ende kann das dazu führen, dass auch immer mehr Instanzen von meinem Programm im Speicher rumlungern. Schlimmer ist aber, dass die Dateien von mehreren Nutzern bearbeitet werden. Die aktuelle Datei steht dann nicht allen zur Verfügung.
Ich hoffe, Ihr könnte mein Problem nachvollziehen. Ansonsten bitte fragen.

Kann mir da jemand helfen?

Gruß, Alex
Alex Winzer
  Mit Zitat antworten Zitat