| | | 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: Menü tauschen mit einem LISP-Skript?? (1120 mal gelesen)
|
Marando Mitglied Informatiker
Beiträge: 31 Registriert: 14.03.2006
|
erstellt am: 14. Mrz. 2006 16:01 <-- editieren / zitieren --> Unities abgeben:
Hi, ich habe gehört, man kann ja mit LISP-Skripte das Problem lösen, aber ich nin ein Anfänger in dem Gebiet. Ich weiß beispielweise nicht, wo und wie man ein LISP-Skript definiert. Aber nun zu meiner Frage: meine Anwendung unter AutoCAD-VB verfügt über ein Menü (dienst.cui). Das wurde von mir erstellt. Man kann über AutoCAD eine Menüzeile durch einen anderen erstezen. Das kann ich manuel mit dem Befehl _menu durchführen. Nach der Eingabe des Befehles _menu erscheint ein Dialogfenster, in dem ich die neue Menüzeile auswählen und übernehmen kann. So habe ich die alte Menüzeile aus meiner Anwendung entfernt und die neue hinzugefügt. Wie kann ich aber das Ganze in VB programmieren? Über LISP? Falls ja, wie rufe ich mein Lisp-Skrip auf? Ich habe die Hilfe mir angeschaut, aber blicke ich nicht durch, wie ich es machen sollte. Hat Jemnad eine Idee? Gruß Beispiel: Es gibt 2 Anwendern: Anw1 und Anw2 Anwender1 darf Speichern und Anwender2 darf nicht Speichern Ich habe zwei Menüs erstellt. men1 un men2 Wenn der Anw1 sich einliggt, soll die Menüzeile men1 geladen werden und wenn An2 sich anmelder, soll die Menüzeile men2 geladen werden. Das Ganze aber irgendwie in VB einbauen und von dort aus das Tauschen der Menüzielen steuern. Marando
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 18.1, LibreOffice 5+
|
erstellt am: 14. Mrz. 2006 17:02 <-- editieren / zitieren --> Unities abgeben: Nur für Marando
Hallo und Willkommen! Vorab eine Bitte: Fülle Deine Systemangaben aus, das macht es anderen Mitgliedern leichter :-) Zu Deinen Fragen: Steuern lässt sich das schon. Zunächst solltest Du herausfinden, wer denn der aktuelle Benutzer ist. Dies erfährst Du über die Systemvariable "Loginname". Der Befehlsaufruf in der ACAD-Zeile: Befehl: (getvar "loginname") Dann würde ich - solange es bei zwei Benutzern bleibt - mit "if" arbeiten (Ansonsten: evtl. "cons"?!). Also: Code: ... (if (= (getvar "loginname") User1) ; wenn-Bedingung (_.menuload1 ...) ; dann mach... (_.menuload2 ...) ; sonst mach... )...
Du kannst natürlich auch mit "_.menu" arbeiten. Um das zu automatisieren, muss vorher die Sysvar "filedia" auf "0" gesetzt werden - diese steuert die Anzeige der Dialogfenster. Tip: Schau Dir mal die Pfadangaben für ACAD/Lisp an. Ein Slash "/" ist was anderes als ein Backslash "\". Lisp akzeptiert nur "\\" oder "/". Dann kannst Du den Pfad für Deine Menüdateien eingeben. Für Grundlagen, die Du Dir wohl selbst aneignen solltest, besuche mal diese empfehlenswerte Seite eines (leider ehemaligen) Mitglieds: http://autolisp.mapcar.net/ Zum Schluss noch eine Anmerkung: LISP ist nicht gleich SCRIPT :-( Frohes Schaffen! Freddy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Marando Mitglied Informatiker
Beiträge: 31 Registriert: 14.03.2006
|
erstellt am: 14. Mrz. 2006 17:19 <-- editieren / zitieren --> Unities abgeben:
Hallo Freddy, danke für Deine ausführliche Antwort. Wie ich auch in meiner Frage geschrieben habe, bin erst seit 2 Monate in dem Bereich tätig. Ich habe eine Anwendung in AutoCAD_VB Version 2006 geschrieben. Sie funktioniert ja. Nun kam der Wunsch, daß man zwei verschiedene Menüzeile haben sollte, je nach Anwender. Ich muß eigentlich nicht mehr abfragen, wer der Anwender ist, denn es gibt eine Maske, auf der der Anwender enstcheiden muß, ob er die weitere Anwenidungen zum "Berabeiten" oder "Ansehen" öffnen möchte. Wer was machen darf, ist ja über die datenbank (Berechtigungen) schon geregelt. Es ist nur so, daß ein Anwender sich anmeldet zum "Ansehen". Die Menüzeile muß dann so angepasst sein, daß er zum Beispiel nicht speichern kann. Ich habe es herausgefunden, daß man mit "~" Vor dem Menüpunktnamen den Menüpunkt deaktivieren kann (gerau darstellung). Da ich zu wenig Ahnung habe, dachte ich mir, ich erstelle ein Menü mit allen Untermenüs und noch mach eine Kopie davon für die die Anwendung nur ansehen können bzw, dürfen. Ich muß nur bei der Auswahl zwischen "Bearbeiten" oder "Ansehen" die richtige Menüzeile laden. Normaleweise mache ich mit _menu und dann die richtige Menüzeile (name.cui) aufrufen und damit erstze ich die alte durch die neue Menüzeile. Das genau möchte ich automatisieren und habe leider keine Ahnung davon, wo ich anfangen sollte??? Kannst Du bitte mir schreiben, wie so ein Lisp-Programm KOMPLETT aussieht und wie ich es in mein Visual-Basic Programm (bei der Auswahl von Bearbeiten oder Ansehen) anbinden könnte??? Muß ich ein Makro schreiben, das das Lisp-Programm aufruft? wie komme ich an das Lisp-Programm vom VB-Programm?? Grüße
Marando
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 18.1, LibreOffice 5+
|
erstellt am: 14. Mrz. 2006 17:43 <-- editieren / zitieren --> Unities abgeben: Nur für Marando
Hallo Marando, hier ein klitzekleines Beispiel, einfach mal in die ACAD-Befehlszeile kopieren...
Code: (defun test () (_> (princ "\nHello World") (_> (princ) )
... und mit "(test)" aufrufen - ohne Anführungszeichen natürlich.Wie eingangs erwähnt - Grundlagen musst Du Dir selbst aneignen! Leider habe ich von VB keine Ahnung :-( Es ist sicherlich machbar, irgendwelche Parameter zwischen Lisp und VB hin- und her zu schaufeln... Vorschlag: Gib mal in der ACAD-Hilfe "scr" oder "Skript" ein und schau, was passiert. Das könnte Dir die Sache erleichtern. Das Skript lässt sich bestimmt auch über VB ausführen - nehme ich zumindest an. Auch die Suchfunktion hier im Forum kann Dir zu Scripts was Hilfreiches liefern! Hier mal ein paar Denkanstösse für Dein "Test.scr":
Code: filedia 0 _.menuunload Menü1 _.menuload Menü2
Also zunächst das unerwünschte Menü entfernen, dann das gewünschte laden. Obige Version ist natürlich ein Rohbau. Es sollte vorher noch geprüft werden, welches Menü gerade geladen ist etc. Du kommst nicht drum herum, Dir ein paar Dinge selbst beizubringen :-)) Freddy [Diese Nachricht wurde von Paulchen am 14. Mrz. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 15. Mrz. 2006 00:44 <-- editieren / zitieren --> Unities abgeben: Nur für Marando
Hallo Marando, für diese Geschichten solltest du dir mal das Thema CUI und Arbeitsbereiche ansehen. Für Deine Sache bietet sich gerade das Thema Unternehmens-cui an. Programmieren geht natürlich auch. Dann kann man sicher auch Lösungen bieten die entsprechend des Loginnamens ausfiltern, welche Unternehmens-CUI geladen wird. Grüße Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mkl-cad Mitglied Technischer Zeichner
Beiträge: 378 Registriert: 23.07.2003 ACAD 2002 Express Tools 1-9 Architektural Desktop Windows XP Server Windows 2003 3 GHz Rechner 1 GB RAM 80 GB Festplatte ATI FireGL V3100 2 17" Flachbildschirme
|
erstellt am: 21. Mrz. 2006 13:19 <-- editieren / zitieren --> Unities abgeben: Nur für Marando
Hallo Marando Man könnte das auch ohne Lisp hinbekommen. Du hast ja zwei Menüs. Richte ACAD einmal für den einen User und mal für den anderen User ein. Für jeden User speichest du ein Profil und exportierst die in z.B user1.arg und user2.arg. Da sich jeder User mit seinem Namen am Rechner anmeldet hat er auch unterschiedliche Menüs im Betriebssystem. Wenn eine gemeinsame Verknüfung benutz wird müsste man das ändern, bzw. für jeden User eine Verknüpfung anlegen. In der Verknüpfung zu ACAD fügst du nun hinter dem Ziel : c:\dein Pfad\acad.exe /p "c:\-deine Pfadagabe\user1.arg" ein Das machst du in jedem Menü aller User. Nun wird beim starten von ACAD automatisch das dementsprechende Profil geladen, also somit das Menü welches mit dem Profil gespeichert wurde. Das ganz hat noch einen Haken: Ohne weitere Lisp-Programm ist zwar dann dein Menü abgeändert, so das gewisse Befehle nicht da sind. In der Befehlszeile kann der user die Befehle dennoch eintippen. Dazu müsste man die per Lisp deaktivieren. ------------------ Martin Viele Grüße aus dem schönen Münsterland! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|