Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DWF viewer COM automation ? (https://www.delphipraxis.net/89380-dwf-viewer-com-automation.html)

HPW 30. Mär 2007 10:27


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:
procedure TForm1.CExpressViewerControl1SelectObject(ASender: TObject; const pIAdPageObjectNode, pHandled: IDispatch);
begin
  Label1.Caption := ????;
end;
Die autodesk Dokumentation hat leider nur ein VB6 Beispiel:

Delphi-Quellcode:
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
Hat jemand einen Tip wie das in delphi gemacht wird?

Shivan 30. Mär 2007 14:19

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:
Label1.Caption := (pIAdPageObjectNode as EPlotRenderer.IAdPageObjectNode).Name;
dir den Objectnamen geben. Falls nicht, dann musst du pIAdPageObjectNode noch als IDispatch hardcasten
Delphi-Quellcode:
Label1.Caption := (IDispatch(pIAdPageObjectNode) EPlotRenderer.IAdPageObjectNode).Name;
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.

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.

HPW 30. Mär 2007 19:48

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:

Shivan 1. Apr 2007 09:24

Re: DWF viewer COM automation ?
 
Zitat:

Zitat von HPW
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.

Schonmal über Late-Binding nachgedacht? Hat zudem den Vorteil, dass du nicht ganz so abhängig bist von der ActiveX Schnittstelle...

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 22:30 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