Einzelnen Beitrag anzeigen

Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Abfragen, ob Word geschlossen wurde

  Alt 8. Apr 2008, 10:01
Hallo erst mal.

Ich stehe gerade mal wieder vor einem Problem, bei dem ich einfach nicht weiter weiß. Ich habe eine Anwendung, welche Daten aus den Eingabefeldern einer Word-Datei liest. Dazu steuere ich Word per OLE. Hier mein Code zum Öffnen und Schließen:
Delphi-Quellcode:
// Klassendefinition
private
  //...
  FWordApplication : TWordApplication;
  //...

////////////////////////////////////////////////////////////////////////////////
////
// Method : openWordApplication
// Comment : Startet eine Word-Applikation im Hintergrund

function TImportTimer.openWordApplication(): Boolean;
begin
  // Word und Dokument instanziieren
  if not Assigned(FWordApplication) then
    FWordApplication := TWordApplication.Create(nil);

  Result := Assigned(FWordApplication);
  if Result then
    try
      FWordApplication.Visible := False;
      FWordApplication.Connect; // Word starten
    except
      closeWordApplication; // Word bei Fehler schließen
      Result := False;
    end;
end;

////////////////////////////////////////////////////////////////////////////////
////
// Method : closeWordApplication
// Comment : Schließt eine gestartete Word-Applikation.

procedure TImportTimer.closeWordApplication();
begin
  try
    // Word schließen
    if Assigned(FWordApplication) then
    begin
      FWordApplication.Quit;
      FWordApplication.Disconnect;
      FreeAndNil(FWordApplication);
    end;
  except
    // Hier wird eigentlich was geloggt...
  end;
end;
Ich halte zwar Word im Hintergrund, d.h. es ist, außer über den TaskManager, nicht sichtbar, allerdings kann folgendes immer noch passieren: ein User öffnet ein Word-Dokument an dem Rechner und schließt die Word-Applikation, weil er eben nicht weiß, dass dort Word gestartet ist und gestartet sein muss. Die Word-Applikation ist also komplett zu, auch für mein Programm.

Nun ist es so, dass ich mit der Methode Assigned() prüfe, ob die WordApplication noch vorhanden ist. Der Zeiger drauf exisitert ja noch, ergo liefert mit Assigned(FWordApplication) True, obwohl das Objekt (wenn man das so sagen darf) geschlossen ist.

Ich weiß nun nicht genau wie ich darauf reagieren bzw. eben handeln soll, dass ich eben dieses Problem umgehe. Ich muss ja aus meiner Anwendung heraus entweder Word neu starten, nur wann genau? Oder es evtl. komplett sperren, im Sinne von: wenn der User es schließen will, dieses Event abfangen, das Schließen abbrechen, nur alle internen Dokumente schließen und Word in den Hintergrund schicken. Die Frage dabei ist aber wie kann ich sowas implementieren!?

Ich wäre echt froh um jede Hilfe.

Mit freundlichen Grüßen
der Hai
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat