![]() |
DWF viewer COM automation ?
Hallo,
Ich versuche das DWF-viewer 7 ActiveX von autodesk in delphi zu benutzen. Ich bekomme das ActiveX importiert und es läuft soweit in der Testanwendung. Ich habe aber keine Erfahrung mit der COM automation, daher weiss ich nicht wie ich die events der ActivX nutzen kann: Zum Beispiel möchte ich den Object-Namen eines Object anzeigen:
Delphi-Quellcode:
Die autodesk Dokumentation hat leider nur ein VB6 Beispiel:
procedure TForm1.CExpressViewerControl1SelectObject(ASender: TObject; const pIAdPageObjectNode, pHandled: IDispatch);
begin Label1.Caption := ????; end;
Delphi-Quellcode:
Hat jemand einen Tip wie das in delphi gemacht wird?
Private Sub CExpressViewerControl1_OnSelectObject(ByVal pIAdPageObjectNode As Object, ByVal pHandled As Object)
Dim strResult As String Dim objPageObjectNode As EPlotRenderer.IAdPageObjectNode Dim tHandled As AdCommon.CAdToggle 'First parameter : piAdPageObjectNode Set objPageObjectNode = pIAdPageObjectNode strResult = "Object node name is " + objPageObjectNode.Name lstLog.AddItem (strResult) 'Second parameter : pHandled Set tHandled = pHandled tHandled.State = True strResult = "Selected object shouldn't be highlighted (in yellow)" lstLog.AddItem (strResult) End Sub |
Re: DWF viewer COM automation ?
Hi,
du bekommst ja pIAdPageObjectNode als Parameter mit. Da es als IDispatch übergeben wird, kannst du das casten und zwar so wie im VB-Beispiel. IDispatch musst du in COM sehen wie ein TObject... ein Pointer auf eine Instanz von etwas... also müsste
Delphi-Quellcode:
dir den Objectnamen geben. Falls nicht, dann musst du pIAdPageObjectNode noch als IDispatch hardcasten
Label1.Caption := (pIAdPageObjectNode as EPlotRenderer.IAdPageObjectNode).Name;
Delphi-Quellcode:
Aber da es bereits als IDispatch übergeben wird, sollte das so funktionieren. Manchmal muss man auch ein Unknown Interface noch als IUnknown und dann als zweites (!) als IDispatch casten, so dass es dann später in die nächst höhere Klasse gecastet werden kann. Delphi ist da etwas arg seltsam.
Label1.Caption := (IDispatch(pIAdPageObjectNode) EPlotRenderer.IAdPageObjectNode).Name;
Du kannst natürlich wie in dem Beispiel dir auch eine weitere Variable machen vom Typ EPlotRenderer.IAdPageObjectNode ... ist EPlotRenderer eigentlich die TLB? Weil dann musst du ggf. diesen "Präfix" nicht angeben. |
Re: DWF viewer COM automation ?
Shivan,
Danke für die Info. Da ich leider gar nicht weiss wo EPlotRenderer aus der VB source herkommt, komme ich damit im Moment nicht weiter. Ich habe ja bislang nur diese ActiveX importiert: // Typbib: C:\Programme\Gemeinsame Dateien\Autodesk Shared\dwf Common\AdView.dll (1) // Hilfe-String: ExpressViewerDll 1.0 Type Library Und darin gibt es kein EPlotRenderer. :gruebel: |
Re: DWF viewer COM automation ?
Zitat:
Dafür hast dann nur keine Syntaxprüfung und siehst Fehler erst, wenn die Zeile zur Laufzeit ausgeführt wurde... Hast du mal nach EPlotRenderer.dll auf deiner Festplatte gesucht? (nicht unbedingt mit der Windows Suche oder zumindest in der Windows-Suche so eingestellt, dass er auch versteckte Dateien + Systemdateien durchsucht) Die Datei sollte nämlich in %PROGRAMFILES%\Autodesk\Autodesk DWF Viewer\EPlot\EPlotRenderer.dll sein :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 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