![]() |
OLE-Object bei mehreren Instanzen der Exe
Hallo zusammen,
ich stehe vor folgendem Problem: Ich möchte aus meiner Anwendung einen Text per Drag&Drop nach MS Word ziehen und anschließend den Text in Word als Textmarke festlegen. Für die D&D-Funktionalität benutze ich die Komponenten von melander.dk Bisher sieht mein Code so aus:
Delphi-Quellcode:
Funktioniert eigentlich super ... solange der Anwender nicht die WINWORD.EXE mehrfach laufen hat. Denn dann erhielt ich bei meinen Tests in 1 von ca. 20 Fällen mit GetActiveOLEObject die falsche WINWORD-Instanz.
procedure TFrmOffice.DTSOfficeAfterDrop(Sender: TObject; DragResult: TDragResult; Optimized: Boolean);
var app, doc: OLEVariant begin app := GetActiveOLEObject('Word.Application'); doc := app.ActiveDocument; doc.bookmarks.add(_Text, app.selection.range); doc := UnAssigned; app := UnAssigned; end; Kennt einer von Euch einen Trick, wie ich über das Handle (mittels GetForegroundWindow erhalten) das richtige OLE-Object verbinden kann? Natürlich bin ich auch für andere Lösungsansätze offen. Gruß aus Köln Thomas |
AW: OLE-Object bei mehreren Instanzen der Exe
Du könntest dir alle OLE-Objekte geben lassen,
zu jedem das zugehörige Parent-Fenster auslesen (und/oder die Prozess-ID) und dann nimmst du dir das OLE-Objekt davon, welches auf dem GetForegroundWindow liegt. (bzw. die selbe Prozess-ID besitzt, wie das GetForegroundWindow) Ist der Eingabefokus im AfterDrop eigentlich wirklich immer beim Word, oder vielleicht doch wo anders? (z.B. wieder/noch bei deinem Programm) Wenn nicht, dann liefert GetForegroundWindow natürlich nicht Word, sondern das andere Programm. |
AW: OLE-Object bei mehreren Instanzen der Exe
Jetzt die allseits beliebte Frage, wofür soll das gut sein?
Wenn der Benutzer schon einen Text in Word einfügt, warum dann nicht gleich das Setzen einer Textmarke durch Word erledigen lassen? Solch ein Benutzer/Programm1/Programm2 Kuddelmuddel ist nur sehr schwierig in den Griff zu bekommen, sprich es gibt mehr Fehlermöglichkeiten, als es die Phantasie des Programmierers sich ausmalen kann. Gruß K-H |
AW: OLE-Object bei mehreren Instanzen der Exe
Zitat:
Die Anwender müssen ihre Aufträge in einem zentralen System verwalten. Leider hat dieses System keinen so flexiblen Report-Generator, wie es die Vielzahl an Prüfmethoden in einem naturwissenschaftlichen Auftragslabor erfordern. Dafür gibt es aber eine Schnittstelle zu MS Word und MS Excel, welche die Daten in benannte Zellen bzw. an Textmarken einträgt. Hierbei ist der Syntax für die Benennung der Namen bzw. Textmarken nicht gerade anwenderfreundlich. Deshalb habe ich ein Tool entwickelt, mit denen die Benennung anhand von Beispieldaten aus einem vorhandenen Auftrag erfolgen kann. Damit können jetzt die Laborant(inn)en ihre Vorlagen selber erstellen. Funktioniert bei Excel phantastisch (hier kommt man relativ einfach an den Titel der aktiven Mappe und anschließend über die ROT an das OLE Object). Nur bei Word klappt dies nicht, da der Titel immer "Microsoft Word Dokument" ist. Bisher ist es immer so, daß beim Drop die Ziel-Applikation des Fokus erhalt und der eingefügte Text markiert ist. Bzgl. des Tipp mit "alle OLE-Objekte ermitteln ..." stehe ich auf dem Schlauch. Ich habe so etwas noch nie programmiert und sege auch keinen Ansatz dafür. Gruß aus Köln Thomas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 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