| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: AutoCAD Event von VB6 aus abfragen (1352 mal gelesen)
|
Huebi Mitglied Vermessungsing.
Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 22. Okt. 2009 18:44 <-- editieren / zitieren --> Unities abgeben:
Hallo liebe VBA-ler, ich bin gerade dabei ein paar VBA-Progrämmchen auf VB6 umzustricken und dabei auf das Problem gestoßen, dass ich AutoCAD-Events (in diesem Fall das Event "AcadDocument_EndCommand") zugreifen muss. Ich bin noch nicht besonders fit mit VB und daher frage ich Euch hier, wie das funktionieren könnte. Für sachdienliche Hinweise, wäre ich sehr dankbar! Der Hübi :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 22. Okt. 2009 18:52 <-- editieren / zitieren -->
Hi, wenn Du mit VB6 arbeitest, dann hast Du über 'CreateObject' oder 'GetObject' eine Verbindung zur AutoCAD-Application, in dieser gibt's eine Collection of Documents und an jedes kannst Du Dich dranhängen. Wie das aber jetzt in Deinen bestehenden Code hineinpasst, kann wohl effizienter beschrieben werden, wenn Du den Teil herzeigst, wo Du's brauchst. - alfred - ------------------ www.hollaus.at |
Huebi Mitglied Vermessungsing.
Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 23. Okt. 2009 07:40 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, Hallo alle anderen, ja dann stell ich hier mal ein Fragment des Programmes ein. Der Sinn der Sache ist der, dass ich von einer externen Schnittstelle Daten einlesen möchte und anhand dieser Daten in AutoCAD neue Elemente erzeuge. Da die Daten jedoch "reinkommen" ohne darauf Rücksicht zu nehmen, ob in AutoCAD gerade ein Befehl ausgeführt wird oder nicht, möchte ich eben abfragen, ob AutoCAD für das Ausführen eines Befehles "bereit" ist (in diesem Fall wird's der Befehl InsertBlock sein). Ich hab's mal auf ganz simpel umgestrickt. Unter VB6 eine Form angelegt und dort einen CommandButton gelegt. Gemäß dem Fall, in AutoCAD wird gerade ein Befhel ausgeführt, soll der Zählen für AnzahlKlicks hochgezählt werden und sobald AutoCAD "frei" ist, soll eine Messagebox gestartet werden. Die AutoCAD-Applikation hab ich sehr *hmmm* frei definiert. Ich möchte mich ungern auf eine AutoCAD-Version festlegen und denke, dass das auch so klappen sollte (hat's zumindest bei allen vorher umgestrickten Progrämmchen). Code:
Option ExplicitPublic Acad_App As Object Public AcadName As String Public ThisDrawing As Variant Public AnzKlicks As Integer Private Sub Command1_Click() AnzKlicks = AnzKlicks + 1 End Sub Private Sub Form_Load() AnzKlicks = 0 'AutoCAD öffnen On Error Resume Next Set Acad_App = GetObject(, "AutoCAD.Application") If Acad_App Is Nothing Then MsgBox ("Bitte erst AutoCAD Starten! ") 'Set Acad_App = CreateObject("AutoCAD.Application") End If Acad_App.Visible = True Set ThisDrawing = Acad_App.ActiveDocument AcadName = Acad_App.Caption AppActivate AcadName On Error GoTo 0 End Sub 'Hier der Versuch, das Event "EndCommand" von AutoCAD einzubauen Public Event Acad_App_EndCommand() MsgBox ("Sie haben während AutoCAD aktiv war " & AnzKlicks & " geklickt") End Sub
Ich hoffe, dass ich mein Anliegen verständlich derlegen konnte und hoffe, dass ihr mir weiterhelfen könnt. Liebe Grüße vom Hübi! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 23. Okt. 2009 07:43 <-- editieren / zitieren --> Unities abgeben: Nur für Huebi
|
Huebi Mitglied Vermessungsing.
Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 23. Okt. 2009 07:58 <-- editieren / zitieren --> Unities abgeben:
Hallo Thomas, ja das wäre sicher auch möglich. Dazu müsste ich allerdings ständig die Systemvariable abfragen - und ob das während eines "laufenden" Befehls in AutoCAD geht, weiß ich auch nicht (ich geb's zu, ich hab's auch nicht ausprobiert). Es gibt ja diesen eleganten Weg in VBA, das Event abzufangen. Das ist auch genau das, was ich gerne machen möchte. Nur leider sind meine Kenntnisse in VB nicht gross genug, um das "einfach" umzusetzen, was in VBA ja schon prima funktioniert. Liebe Grüße Hübi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 23. Okt. 2009 08:18 <-- editieren / zitieren -->
Hi, einerseits sehe ich, dass Du einer Variable 'ThisDrawing' das aktuelle Doc zugeordnet hast, aber dann gibt's 2 Varianten, erstere mit Handycaps: a) ich sehe nicht, wo 'ThisDrawing' deklariert ist und nicht ob dieses mit 'WithEvents' deklariert wurde. Daher sollte zur Eventsüberwachung des Documents (das war ja die erste Frage) das angeführt sein: Code: Private WithEvents ThisDrawing as AcadDocument
Hier hast Du aber auch die Aufgabe, zu überwachen, ob ein der Anwender ev. ein anderes Document geöffnet hat - oder ein anderes aktiviert hat (weil mehrere geöffnet), bzw. Dein 'ThisDrawing'-Objekt mittlerweile geschlossen hat, ... b) gibt es eine Statusabfrage, aus der abgeleitet werden kann, ob AutoCAD aktiv ist, die State-Deklaration muss irgendwo bei der Applikationsinitialisierung stehen:
Code: 'im Header der Deklarationen: Private pState as AcadState'im Code, wo Du dich mit AutoCAD verbindest: Set pState = Acad_App.GetAcadState 'und bevor Du eine Funktion aus dem externen Exe heraus im AutoCAD anstarten willst, kannst Du dann prüfen, ob AutoCAD gerade 'behindert' ist, soll heissen, nicht ansprechbar, weil Befehl aktiv, oder weil (modaler) Dialog geöffnet, oder ....: If pState.IsQuiescent Then 'wenn das True retourniert, dann darfst Du ;)
HTH, - alfred -
------------------ www.hollaus.at [Diese Nachricht wurde von a.n. am 23. Okt. 2009 editiert.] |
Huebi Mitglied Vermessungsing.
Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 23. Okt. 2009 12:05 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|