Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Selbsterstellte Befehle mit AcadDocument_BeginCommand abfangen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Selbsterstellte Befehle mit AcadDocument_BeginCommand abfangen (1589 mal gelesen)
insidERR
Mitglied
2/3D Konstruktion, VBA/.net/Android Programmierung, EDV


Sehen Sie sich das Profil von insidERR an!   Senden Sie eine Private Message an insidERR  Schreiben Sie einen Gästebucheintrag für insidERR

Beiträge: 128
Registriert: 27.08.2007

Win10 x64 Pro, ACAD Mech.2022, AI 2022 Sim., AV WG 2022, VBA/.NET, Android Studio, Arduino

erstellt am: 10. Apr. 2008 14:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von oscarr an!   Senden Sie eine Private Message an oscarr  Schreiben Sie einen Gästebucheintrag für oscarr

Beiträge: 198
Registriert: 02.10.2007

erstellt am: 10. Apr. 2008 16:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für insidERR 10 Unities + Antwort hilfreich

Ruf doch mit deinem Knopf direkt deine VBA Funktion auf.
Dann sparst du dir das Abfangen.

Holger

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 13. Apr. 2008 15:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für insidERR 10 Unities + Antwort hilfreich

Hallo,
Zitat:
Original erstellt von insidERR:
...
Ziel ist es, eigene mit Befehlen(z.B. _doSomething) Buttons anzulegen und mit VBA zu verarbeiten.
...


Schau dir diesen Artikel mal an. So kannst du deine VBA Makros auf einen Button legen.

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 Programmierung, EDV


Sehen Sie sich das Profil von insidERR an!   Senden Sie eine Private Message an insidERR  Schreiben Sie einen Gästebucheintrag für insidERR

Beiträge: 128
Registriert: 27.08.2007

erstellt am: 16. Apr. 2008 07:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hab es schon hinbekommen. Danke.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

insidERR
Mitglied
2/3D Konstruktion, VBA/.net/Android Programmierung, EDV


Sehen Sie sich das Profil von insidERR an!   Senden Sie eine Private Message an insidERR  Schreiben Sie einen Gästebucheintrag für insidERR

Beiträge: 128
Registriert: 27.08.2007

Win10 x64 Pro, ACAD Mech.2022, AI 2022 Sim., AV WG 2022, VBA/.NET, Android Studio, Arduino

erstellt am: 22. Apr. 2008 10:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 22. Apr. 2008 12:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für insidERR 10 Unities + Antwort hilfreich

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 Programmierung, EDV


Sehen Sie sich das Profil von insidERR an!   Senden Sie eine Private Message an insidERR  Schreiben Sie einen Gästebucheintrag für insidERR

Beiträge: 128
Registriert: 27.08.2007

erstellt am: 22. Apr. 2008 13:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von wronzky an!   Senden Sie eine Private Message an wronzky  Schreiben Sie einen Gästebucheintrag für wronzky

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für insidERR 10 Unities + Antwort hilfreich

Hallo,
Wie wäre ein Ausflug ins LISP? Mit Lisp könntest Du einen reactor vom typ "unknown-command" abfangen und auswerten. Ein Beispiel dazu HIER.
Mit VBA sehe ich da keine Chance.

Grüsse, Henning

------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

insidERR
Mitglied
2/3D Konstruktion, VBA/.net/Android Programmierung, EDV


Sehen Sie sich das Profil von insidERR an!   Senden Sie eine Private Message an insidERR  Schreiben Sie einen Gästebucheintrag für insidERR

Beiträge: 128
Registriert: 27.08.2007

erstellt am: 22. Apr. 2008 14:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Entwicklungsingenieur für Konstruktion Robotik (m/w/d)

EvoLogics ist ein innovatives High-Tech-Unternehmen mit Sitz in Berlin.

Wir entwickeln und vermarkten weltweit Produkte und Schlüsseltechnologien in der maritimen und Offshore-Technik. Unsere Expertise umfasst die Schwerpunkte Robotik (USV, AUV und ROV), High-Tech-Sensorik, künstliche Intelligenz, fortgeschrittene Informatik, Kommunikationstechnologie sowie Positionierung.

Das Unternehmen ...

Anzeige ansehenEntwicklung
Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 22. Apr. 2008 16:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für insidERR 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz