ich in der Antwort auf diese qEreignisse MS Word Automatisierung Empfangen von einem Delphi App
Detect when the active element in a TWebBrowser document changes
zu implementieren eine DIY-Version von MS Word Automation gezeigt, um die Technik zu verwenden, habe versucht, Veranstaltungen.
Ein voller Auszug aus meiner app ist unten, von dem Sie in der Lage, die Deklaration der Variablen in diesen Methoden, um zu sehen:
procedure TForm1.StartWord;
var
IU : IUnknown;
begin
IU := CreateComObject(Class_WordApplication);
App := IU as WordApplication;
App.Visible := True;
IEvt := TEventObject.Create(DocumentOpen);
end;
procedure TForm1.OpenDocument;
var
CPC : IConnectionPointContainer;
CP : IConnectionPoint;
Res : Integer;
MSWord : OleVariant;
begin
Cookie := -1;
CPC := App as IConnectionPointContainer;
Res := CPC.FindConnectionPoint(DIID_ApplicationEvents2, CP);
Res := CP.Advise(IEvt, Cookie);
MSWord := App;
WordDoc:= MSWord.Documents.Open('C:\Docs\Test.Docx');
end;
Die StartWord
Routine funktioniert gut. Das Problem ist in OpenDocument
. Der Wert von Res
von Res := CP.Advise(IEvt, Cookie);
zurückgekehrt ist $ 80.040.200 Dieses unter dem HResult Statuscodes in Windows.pas nicht vorhanden ist und „ole Fehler 80040200“ googeln ein paar Hits zurück Einbeziehung der Einrichtung Ado Ereignisse von Delphi, aber nichts offenbar relevant .
Wie auch immer, das Ergebnis ist, dass die Invoke-Methode des EventObject nie aufgerufen wird, so dass ich keine Benachrichtigungen über die Ereignisse der WordApplication erhalten.
Also, meine Frage ist, was bedeutet dieser Fehler $ 80040200 und/oder wie kann ich es vermeiden?
FWIW, ich habe auch versucht, auf die ApplicationEvents2 Schnittstelle verbindet mit diesem Code
procedure TForm1.OpenDocument2;
var
MSWord : OleVariant;
II : IInterface;
begin
II := APP as IInterface;
InterfaceConnect(II, IEvt.EventIID, IEvt as IUnknown, Cookie);
MSWord := App;
WordDoc:= MSWord.Documents.Open('C:\Docs\Test.Docx');
end;
, die ohne Beanstandung führt, aber auch hier event Invoke Methode ist nie genannt. Wenn ich ein TWordApplication auf das leere Formular einer neuen Anwendung ablegen, funktionieren die Ereignisse wie OnDocumentOpen
einwandfrei Ich erwähne das, weil es scheint, zu bestätigen, dass Delphi und MS Word (2007) richtig auf meinem Computer eingerichtet sind.
Code:
uses
... Word2000 ...
TForm1 = class(TForm)
btnStart: TButton;
btnOpenDoc: TButton;
procedure FormCreate(Sender: TObject);
procedure btnOpenDocClick(Sender: TObject);
procedure btnStartClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure WordApplication1DocumentOpen(ASender: TObject; const Doc: _Document);
private
procedure DocumentOpen(Sender : TObject; DispID : Integer; var Params);
procedure StartWord; // see above for implementation
procedure OpenDocument; // --"--
procedure OpenDocument2; // --"--
public
WordDoc: OleVariant;
IEvt : TEventObject; // see linked question
Cookie : Integer;
App : WordApplication;
[...]
procedure TForm1.WordApplication1DocumentOpen(ASender: TObject; const Doc:
_Document);
begin
//
end;
Ich konnte eine MCVE stattdessen schreiben, aber es wäre meist nur der Code aus der früheren Antwort.
Crikey, diese Antwort von mir ist zurückgekommen, um mich zu verfolgen. Ich werde sehen, ob ich Ihre 80040200 reproduzieren kann. Später ... – MartynA