Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi OnClose-Ereignis eines Word-Dokumentes abfangen? (https://www.delphipraxis.net/82875-onclose-ereignis-eines-word-dokumentes-abfangen.html)

mjenke 21. Dez 2006 07:19


OnClose-Ereignis eines Word-Dokumentes abfangen?
 
Guten Morgen, alle miteinander!

Vielleicht kann mir jemand bei folgendem Problem helfen. Ich schreibe derzeit für meine Firma ein Word-AddIn (DLL). Jetzt stehe ich vor einem Problem, bei dem ich noch nicht genau weiß, wie ich es lösen soll:

Wie kann man beim Erzeugen oder Öffnen eines Dokumentes in Word einen MessageHandler auf das OnClose-Ereignis dieses Dokumentes setzen? Folgender Code funktioniert NICHT:

Deklaration des MessageHandlers:

Delphi-Quellcode:
procedure MsgHandle_DocumentClose ( Sender: TObject );
Implementierung im DocumentOpen-Handler, der bereits mit der Word-Application verbunden ist

Delphi-Quellcode:
procedure TXConMag.MsgHandle_DocumentOpen(Sender: TObject;
  var Doc: OleVariant);
begin
  TWordDocument(WordApp.Documents.Item(Doc)).OnClose := MsgHandle_DocumentClose;
end;
Ebensowenig kann ich einfach

Delphi-Quellcode:
Doc.OnClose := MsgHandle_DocumentClose;
benutzen, da ich dann die Fehlermeldung bekomme, dass das Automatisierungs-Objekt diese Funktion nicht unterstütze...


:?:
Matthias

mjenke 27. Dez 2006 07:11

Re: OnClose-Ereignis eines Word-Dokumentes abfangen?
 
Guten Morgen!


Inzwischen habe ich einiges versucht, um im OnWindowDeactivate-Ereignis der Application, in Verbindung mit dem OnDocumentBeforeClose-Ereignis der Application etwas zusammenzustricken. Aber leider bin ich nicht wirklich weiter gekommen.

Wenn also jemand eine Idee hat... Mein Abgabetermin rückt näher, und ich werde langsam ein wenig hektisch... :-D

Matthias

mjenke 2. Jan 2007 14:06

Re: OnClose-Ereignis eines Word-Dokumentes abfangen?
 
Hallo, an alle!

Habe das Problem mit dem OnClose-Ereignis gerade gelöst:

Für jedes Dokument, das in Word erzeugt oder geöffnet wird, wird ohnehin von mir eine Umgebung angelegt (Objekt). Innerhalb dieser Umgebung habe ich ein Feld "FWordDok" eingefügt, das vom Typ TWordDocument ist.

Wenn ich im Create meiner Umgebung folgenden Code einfüge:

Delphi-Quellcode:
constructor TEnv.Create(Dok: _Document; Word: PWordApplication; EventButton: TOfficeButtonClickEvent;
                        EventDok: TNotifyEvent);
begin
  FOfficeButtonClass := TSimpleOfficeButton;
  FEvent            := EventButton;
  FDok              := Dok;
[...]
  // WordDokument vorbereiten
  FWordDok          := TWordDocument.Create ( nil );
  FWordDok.ConnectTo (Dok as Word_TLB._Document);
  FWordDok.OnClose  := EventDok;
end;
habe ich eine Verbindung zwischen meinem Feld "FWordDok" und dem eigentlichen Dokument hergestellt. In das OnClose des TWordDocument kann ich mein NotifyEvent eintragen, und das Ereignis ist abgefangen!

:-D


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