| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Lisp einbinden?? (2865 mal gelesen)
|
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 29. Jan. 2009 14:21 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, ich als Anfänger in VBA hätte mal eine fragen an euch Profis. Hab vor kurzen mit dem VBA- Programmieren angefangen. Habe vorher Lisp Routinen geschrieben. Jetzt bin ich auf die verrückte Idee gekommen meine Lisproutinen mit einer Grafischen Oberfläche zu verschönern. Jetzt zu meinen Fragen: 1.Wie kann ich nach den Klicken eines Button eine Lisp Routine starten? Geht das überhaupt? 2. Jetzt komm die frage die mich als Anfänger entlarvt. Kann ich eine VBA Anwendung durch einen Textbefehl so wie bei Lisp ausführen? Ich danke eich an dieser stelle schon mal. FirephoeniX
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 ich hab eh keine Probleme damit...
|
erstellt am: 29. Jan. 2009 15:03 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
|
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007
|
erstellt am: 30. Jan. 2009 09:03 <-- editieren / zitieren --> Unities abgeben:
Danke für die Antwort tunnelbauer, tut mir leid das ich euch wieder auf die Nerven gehen muss aber ich bekomme das nicht hin. Bin halt noch extremer Anfänger. Hab jetzt nach dem rat des Tunnelbauers das Kommando „SendCommand“ genommen. Hier der Code ist nur ein Test: Private Sub CBtest_Click() Me.Hide ThisDrawing.SendCommand ("text") End Sub
Es funktioniert auch. Das Pogramm schreib mir den wert unten in die Textleisten. Jetzt muss ich nur wissen wie ich es ausführen kann. Und wie ich das hinbekomme, dass das Useform so lange verschwindet wie der Befehl noch läuft ? Hab mal gelesen das es mit Me.hide gehen soll aber irgendwie geht das nicht. Weiß jemand rat oder kann mir eine Gute Anfänger Seite empfählen wo ich mir so was durchlesen kann ? Danke im voraus. FiRepheoniX
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 30. Jan. 2009 09:48 <-- editieren / zitieren -->
Hi, Zitat: ThisDrawing.SendCommand ("text") ... Jetzt muss ich nur wissen wie ich es ausführen kann
In der Sprache des Anwenders hätte ich mal gesagt, die Buchstaben T E X T hinschreiben, ist ok, aber dann musst Du <ENTER> drücken;) , in der Sprache des Programmierers heisst das dann: Code: ThisDrawing.SendCommand ("text" & vbcr)
Zitat: Und wie ich das hinbekomme, dass das Useform so lange verschwindet wie der Befehl noch läuft
Ich schreibe meine Programme in der Regel so, dass ich nicht einen AutoCAD-Befehl anstarte und dem User die Eingaben zu dem Befehl machen lasse, denn ich werde kaum (ausser ev. durch Überwachung von ObjectAdded oder ähnliches) im Nachhinein feststellen können, ob der Anwender jetzt alles richtig gemacht hat oder den Befehl abgebrochen hat. In diesem Fall würde ich zuerst nach einem Einfügepunkt abfragen (über Thisdrawing.Utility.GetPoint), wenn der User hier nicht abgebrochen hat, nach dem Textinhalt (den kannst Du vielleicht sogar schon in Deinem Form mittels einer Textbox eingeben lassen, samt Höhe, ...) und dann verwende ich (für Modellbereich) ThisDrawing.ModelSpace.AddText. Da habe ich die Kontrolle und weiss auch, dass die Form nach 'GetPoint' wieder da sein muss. Beispiel dafür kannst Du auch in der AutoCAD-VBA-Hilfe finden, suche nach 'AddText Example'. ------------------------------------------------- Und Lisp kann auch noch ohne SendCommand gestartet werden (ich forumuliere es mal vorsichtig: für Fortgeschrittene;) )
Code: Public Function Acad_EvalLisp(ByRef AcadDoc As AcadDocument, ByVal LispStr As String) As Variant 'fuehrt ein lispstatement durch, wenn vorhanden, dann wird ergebnis retourniert Dim tVL As Object Dim tPL As Object Dim tRetVal As Variant On Error Resume Next Set tVL = AcadDoc.Application.GetInterfaceObject("VL.Application.16") ' .16 ... muss an jeweilige Version angepasst werden If Err.Number = 0 Then Set tPL = tVL.ActiveDocument.Functions.Item("read").funcall(LispStr) If Err.Number = 0 Then tRetVal = tVL.ActiveDocument.Functions.Item("eval").funcall(tPL) Set tPL = Nothing Set tVL = Nothing If Err Then Err.Clear Else Acad_EvalLisp = tRetVal End If On Error GoTo 0 End Function
......und in den 'normalen' Fällen bekomme ich damit sogar den Return-Wert aus Lisp zurück, leider nur als String. Das ist auch nur ein CodeSchnippsel, d.h. bei oftmaligem Aufruf empfiehlt es sich, das Object 'tVL' getrennt in einer Initialisierung aufzurufen, damit dies eben nur einmal passiert und nicht bei jedem Aufruf.
Zitat: das ich euch wieder auf die Nerven gehen
Mach Dir deswegen mal keine Sorgen, die Antworten passieren hier freiwillig, auf die Nerven kann mir nur wer gehen, der 'von mir' etwas verlangt, und das vielleicht auch noch 'begrenzt intelligent' ist. Beides ist bei Dir nicht der Fall - alfred -
------------------ www.hollaus.at |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007
|
erstellt am: 30. Jan. 2009 12:27 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 30. Jan. 2009 12:55 <-- editieren / zitieren -->
Hi, bei Büchern musst Du unterscheiden, was ist AutoCAD-spezifisch und was ist allgemeines VBA (auch gültig dann in Excel, Word, ...) Allgmein hätte ich (auf die schnelle) gefunden: http://www.vb-seminar.de/ welches mir nach ein paar Minuten überfliegen ganz ok aussieht, aber finden wirst Du im Internet jede Menge. Schwerer wird es dann schon, wenn Du VBA mit AutoCAD in Kombinaton suchst. Da hätte ich aber mal vermutet, nachdem Du den internen Aufbau der AutoCAD-Objekte durch Lisp ja schon kennst, dass Du nach obiger allgemeiner 'Schulung' relativ einfach reinkommen wirst. Viel Erfolg, - alfred - ------------------ www.hollaus.at |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 30. Jan. 2009 13:04 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
|
Hunchback Mitglied CAD-Tech
Beiträge: 63 Registriert: 10.10.2007
|
erstellt am: 03. Feb. 2009 08:41 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
Und wenn's bloß um die Benutzeroberfläche der Lisp's geht: Schau Dir mal OpenDCL an (opendcl.com). kost' nix! Damit kriegst Du Dialoge hin wie Du sie mit VB nicht so leicht zusammenbringst. Grüße Martin ------------------ You seem (in my (humble) opinion (which doesn't mean much)) to be (or possibly could be) more of a Lisp programmer (but I could be (and probably am) wrong). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 05. Feb. 2009 09:41 <-- editieren / zitieren --> Unities abgeben:
Hallo Hunchback, dein Programm finde ich Super. Habe es mir sofort geholt und ausprobiert. Aber irgendwie verstehe ich es nicht ganz. Gibt es vielleicht ein Deutsches Tutorial womit mir der Einstieg ein bisschen leichter fällt. Zur Not würde ich auch ein Englische nehmen. mfg FirePhoenix
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hunchback Mitglied CAD-Tech
Beiträge: 63 Registriert: 10.10.2007
|
erstellt am: 05. Feb. 2009 13:48 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
Am einfachsten im OpenDCL Forum registrieren. Im Forum gibt's dann einen Downloadlink zu einem AU - Tutorial (mit vielen Beispielen).Ist aber leider nur auf Englisch. Im Help-Menu des OpenDCL-Studios ist auch ein kleines Tutorial (Englisch) zu finden. Grüße Martin ------------------ You seem (in my (humble) opinion (which doesn't mean much)) to be (or possibly could be) more of a Lisp programmer (but I could be (and probably am) wrong). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |