| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Selbsterstellte Befehle mit AcadDocument_BeginCommand abfangen (1596 mal gelesen)
|
insidERR Mitglied 2/3D Konstruktion, VBA/.net/Android/Arduino Programmierung, EDV
Beiträge: 138 Registriert: 27.08.2007 Win10 x64 Pro, ACAD Mech.2024, Inventor 2024 Sim., Vault Pro 2024, VBA/.NET, Android Studio, Arduino
|
erstellt am: 10. Apr. 2008 14:02 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich suche nach einer Möglichkeit selbst erstellte Buttons in VBA abzufangen. Ziel ist es, eigene mit Befehlen(z.B. _doSomething) Buttons anzulegen und mit VBA zu verarbeiten. Wenn ich auf LINE (oder einen anderen AutoCADbutton anklicke wird das Ereignis "AcadDocument_BeginCommand" ausgelöst. Aber wenn ich auf den selbst erstellten "doSomething" Button klicke passiert garnichts im VBA-Editor. Im AutoCAd Befehlsmanager steht "Befehl DOSOMETHING nicht gefunden..." Wie kann ich eigene Buttons registrieren damit bei Klick das "AcadDocument_BeginCommand" Ereignis ausgelöst wird und "CommandName" nicht leer bleibt? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oscarr Mitglied CAD-Manager
Beiträge: 198 Registriert: 02.10.2007
|
erstellt am: 10. Apr. 2008 16:58 <-- editieren / zitieren --> Unities abgeben: Nur für insidERR
|
Stelli1 Moderator Verm.-Ing.
Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 13. Apr. 2008 15:06 <-- editieren / zitieren --> Unities abgeben: Nur für insidERR
|
insidERR Mitglied 2/3D Konstruktion, VBA/.net/Android/Arduino Programmierung, EDV
Beiträge: 138 Registriert: 27.08.2007
|
erstellt am: 16. Apr. 2008 07:55 <-- editieren / zitieren --> Unities abgeben:
|
insidERR Mitglied 2/3D Konstruktion, VBA/.net/Android/Arduino Programmierung, EDV
Beiträge: 138 Registriert: 27.08.2007 Win10 x64 Pro, ACAD Mech.2024, Inventor 2024 Sim., Vault Pro 2024, VBA/.NET, Android Studio, Arduino
|
erstellt am: 22. Apr. 2008 10:52 <-- editieren / zitieren --> Unities abgeben:
Und jetzt mal ne andere Frage. Ich will jetzt Befehle von Hand eingeben und mit "BeginnCommand" abfangen. Hat einer ne Idee? Mein Gedanke ist, Zeichnungen direkt über Eingabeleiste zu öffnen. Mit "_open" ist es nicht getan. Unsere Zeichnungen sind numerisch sortiert. D.h. "97236" befindet sich auf "server/CAD/9/" Ich will es so machen, dass man direkt die Zeichnungsnummer eingibt und beim Bestätigen die Strg-Taste gedrückt hällt. In der Funktion "BeginnCommand" wird überprüft ob die Strg-Taste gehalten wird, und wenn ja, soll AutoCAD "CommandName" als Zeichnungsnummer ansehen, auf dem Server automatisch suchen und öffnen. Sparrt einige Klicks. [Diese Nachricht wurde von insidERR am 22. Apr. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 22. Apr. 2008 12:07 <-- editieren / zitieren --> Unities abgeben: Nur für insidERR
Hallo, das dürfte nicht so ganz einfach sein. Dann müsstes du über die WIN Api ermitteln welche Tasten gedrückt sind. Ausserdem, und das ist die größte Hürde, wird der Event erst ausgelöst wenn es einen bekannten Befehl gibt. 471101 ist kein bekannter Befehl. Ich würde mir da einen eigenen Befehl z.B. xopen definieren der eine eigene Maske aufmacht. Da gibts du die Zeichnungsnummer ein, ermittelst den Pfad und öffnest diese. Wenn du keine Maske willst, kannst du ja auch die Nummer in der Befehlszeile anfordern. Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
insidERR Mitglied 2/3D Konstruktion, VBA/.net/Android/Arduino Programmierung, EDV
Beiträge: 138 Registriert: 27.08.2007
|
erstellt am: 22. Apr. 2008 13:27 <-- editieren / zitieren --> Unities abgeben:
Windows API ist kein Problem. Nehme vorgerfertigte Module aus "VisualBasic". Mein Problem ist, dass ich nicht weiss wie man Befehle definiert. Es wäre schon gut zu wissen, wie man aus der Befehlszeile Makros aufrufen und Parameter übergeben kann. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - ACA 2013 Arcibem System: Windows NT, 2000, XP Internet-Startseite: http://www.archi.de
|
erstellt am: 22. Apr. 2008 13:58 <-- editieren / zitieren --> Unities abgeben: Nur für insidERR
|
insidERR Mitglied 2/3D Konstruktion, VBA/.net/Android/Arduino Programmierung, EDV
Beiträge: 138 Registriert: 27.08.2007
|
erstellt am: 22. Apr. 2008 14:22 <-- editieren / zitieren --> Unities abgeben:
Sieht nett aus. LISP ist für mich ein absolutes Neuland. Das einzige was ich darüber weiss, ist dass es ne AutoCAD Sprache ist. Da kann man sich denken was ich mit der Info anfangen kann . Aber danke... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 22. Apr. 2008 16:45 <-- editieren / zitieren --> Unities abgeben: Nur für insidERR
Hallo, ich verstehe nicht wo das Problem ist. Im obigen Link war eine Lösung aufgeführt wie man ein VBA Makro als AutoCAD Befehl definieren kann. Ich habe die Lisp Zeile zum Test mal in eine Funktion gepackt. Diese Sub muss du als erstes ausführen. Später wird die Zeile in die AcadDoc.Lsp eingefügt. Dann steht der Befehl nach jedem laden des Dokumentes zur Verfügung.
Code: Sub EigenerBefehl() ' Dieser wird normalerweise in der AcadDoc.Lsp untergebracht ThisDrawing.SendCommand "(defun c:MyLoad (/) (vl-vbarun ""MyLoad""))" & vbCr End Sub
Danach kannst du in der AutoCAD Befehlszeile den Befehl MYLOAD eingeben. Den kannst du auch auf einen Button packen, mit der Befehlswiederholung arbeiten,... halt wie ein AutoCAD Befehl.
Code:
Sub MyLoad() Dim Eingabe As Variant Dim Pfad As String Dim Datei As String Dim Doc As AcadDocument On Error Resume Next Eingabe = ThisDrawing.Utility.GetString(True, Chr$(10) & "MyLoad--> Zeichnungsnummer eingeben:") If Not Err.Number Then On Error GoTo 0 If Left$(Eingabe, 1) = "1" Then Pfad = "C:\Temp\1\" Datei = Eingabe & ".DWG" ElseIf Left$(Eingabe, 1) = "2" Then Pfad = "C:\Temp\2\" Datei = Eingabe & ".DWG" End If On Error Resume Next Set Doc = Application.Documents.Open(Pfad & Dateiname) If Err.Number <> 0 Then MsgBox "Es ist ein Fehler aufgetreten!" & vbCrLf & Err.Description Else MsgBox "Es wurde die Zeichnung " & Doc.Name & " geöffnet" End If End If End Sub
Wilfried Stelberg------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |