Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Per Delphi mit laufender Word-Instanz verbinden / WORD OLE (https://www.delphipraxis.net/18492-per-delphi-mit-laufender-word-instanz-verbinden-word-ole.html)

mbs 19. Mär 2004 14:09


Per Delphi mit laufender Word-Instanz verbinden / WORD OLE
 
Hallo!

Ich suche eine Möglichkeit, mein Delphi-Programm was immer laufen soll jeweils mit einer laufenden Instanz von Word zu verbinden.

Zunächst hatte ich versucht, die Server-Komponenten (Word XP Application) im Designer zu verwenden und habe der Eigenschaft ConnectKind den Wert ckRunningOrNew zugewiesen. Das funktioniert, nur: Wenn Word nicht läuft, wird immer ein Prozess von Word gestartet der dann läuft. Das will ich nicht, sondern mein Programm soll eine Verbindung zu Word herstellen, wenn es vom Benutzer gestartet wurde.

Dafür habe ich dann im Quellcode folgendes mit einem Timer versucht:

Prozedur des Timer-Events:

Delphi-Quellcode:
  try
    word := TWordApplication.Create(Application);
    word.AutoConnect := False;
    word.AutoQuit := False;
    word.ConnectKind := ckRunningInstance;
    word.Connect;
    // ...
    // -- hier dann: Operationen auf dem Word-Objekt --
    // ...
    word.Disconnect;
  finally
    word.Free;
  end;
Das ganze klappt nicht. Ich bekomme "Unable to retrieve a pointer to a running object registered with OLE for Word.Application [...]".

Hat jemand eine Idee, was ich ändern muss? Oder eine ganz andere Idee, wie ich mein Delphi-Programm immer mit einer Word-Instanz verbinden kann?? Das ganze soll halt im Hintergrund passieren und es sollen NICHT extra Word-Prozesse (mit oder ohne Fenster) gestartet werden.

toms 19. Mär 2004 14:29

Re: Per Delphi mit laufender Word-Instanz verbinden / WORD O
 
Hi,

Du könntest zuerst mit FindWindow nach 'OpusApp'
(Femsterklasse von MSWord) suchen.
Wenn FindWindow 0 zurück gibt, dann läuft Word nicht.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Word: TWordApplication;
  WordWnd: HWND;
begin
  WordWnd := FindWindow('OpusApp', nil);
  if WordWnd <> 0 then
  begin
    Word := TWordApplication.Create(nil);
    try
        Word.ConnectKind := ckRunningInstance;
        Word.Connect;
        ShowMessage(Word.ActiveDocument.Name);
        Word.Disconnect;
    finally
      Word.Free;
    end;
  end;
end;

mbs 19. Mär 2004 14:56

Re: Per Delphi mit laufender Word-Instanz verbinden / WORD O
 
Ich probies mal. Danke zunächst!

Wie wär es aber dann bei den anderen Office-Komponenten? Ist die Festerklasse in allen Versionn gleich?

toms 19. Mär 2004 15:15

Re: Per Delphi mit laufender Word-Instanz verbinden / WORD O
 
Zitat:

Wie wär es aber dann bei den anderen Office-Komponenten?
Ist die Festerklasse in allen Versionn gleich?
Nein. So heissen die Fensterklassen für:

Code:
Excel          : XLMAIN
Word           : OpusApp
Powerpoint 2002 : PP10FrameClass
PowerPoint 2000 : PP9FrameClass
PowerPoint 97   : PP97FrameClass
PowerPoint 95   : PP7FrameClass
Access         : OMain
FrontPage      : FrontPageExplorerWindow40
Outlook        : rctrl_renwnd32
MS Project     : JWinproj-WhimperMainClass

Mario 19. Mär 2004 15:33

Re: Per Delphi mit laufender Word-Instanz verbinden / WORD O
 
Hallo MB,

ist die Exception
Zitat:

Unable to retrieve a pointer to a running object registered with OLE for Word.Application [...]
nicht eigentlich genau das, was Du möchtest? Wenn es nicht geht, musst Du so nur eigentlich nur noch den Fehler abfangen und fertig...

mbs 20. Mär 2004 12:47

Re: Per Delphi mit laufender Word-Instanz verbinden / WORD O
 
Mist... Du hast recht. Irgendwann habe ich den inneren try-except-block entfernt. Und das habe ich dann auch übersehen.... Der Fehler sitzt eben meistens doch vor der Tastatur ... ;-)

mbs 22. Apr 2004 12:51

Re: Per Delphi mit laufender Word-Instanz verbinden / WORD O
 
Hi!


Nun gibt es doch noch ein Problem: das ganze funktioniert, nur Word 2000 hängt sich auf, wenn mein Programm läuft und ich dann - auf normalem Wege - Word starten will. Mit anderern Word VErsionen tritt das Problem nicht auf.

Hat da jemand eine Idee??


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