AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Abfragen, ob Word geschlossen wurde

Ein Thema von s.h.a.r.k · begonnen am 8. Apr 2008 · letzter Beitrag vom 9. Apr 2008
Antwort Antwort
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, 09: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
Benutzerbild von s.h.a.r.k
s.h.a.r.k

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

Re: Abfragen, ob Word geschlossen wurde

  Alt 9. Apr 2008, 10:04
*push*

Hat keiner eine Idee für mich?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Abfragen, ob Word geschlossen wurde

  Alt 9. Apr 2008, 10:09
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;
Andreas
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Abfragen, ob Word geschlossen wurde

  Alt 9. Apr 2008, 10:10
Ich würde .ConnectKind auf ckRunningOrNew setzen und immer neu erstellen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

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

Re: Abfragen, ob Word geschlossen wurde

  Alt 9. Apr 2008, 22:33
Zitat von mkinzler:
Ich würde .ConnectKind auf ckRunningOrNew setzen und immer neu erstellen.
Vielen Dank. Ich glaube, dass das hier eine der besten Lösungen sein wird. Problem wird dann wahrscheinlich nur bestehen, wenn Word gerade startet oder schließt. Dazu werd ich aber mal ein paar Tests anstellen und sehen, was sich machen lässt!

Aber schon mal ein recht herzliches Dankeschön

[OT]

Mein 600. Beitrag *freu* *Fass aufmach* *einen drauf trink*

[/OT]
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:22 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