![]() |
Abfragen, ob Word geschlossen wurde
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:
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.
// 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; 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 ;) |
Re: Abfragen, ob Word geschlossen wurde
*push* :oops:
Hat keiner eine Idee für mich? |
Re: Abfragen, ob Word geschlossen wurde
Word trägt sich selber in die ROT (Running Object Table) ein.
Das kann man ausnützen:
Delphi-Quellcode:
var
word : Olevariant; begin try word := GetActiveOleObject('Word.Application'); ShowMessage('Word läuft'); word := unassigned; except ShowMessage('Word läuft nicht'); end; |
Re: Abfragen, ob Word geschlossen wurde
Ich würde .ConnectKind auf ckRunningOrNew setzen und immer neu erstellen.
|
Re: Abfragen, ob Word geschlossen wurde
Zitat:
Aber schon mal ein recht herzliches Dankeschön :thumb: [OT] Mein 600. Beitrag *freu* *Fass aufmach* *einen drauf trink* :dp: [/OT] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz