| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Versionsabhängikeiten (1000 mal gelesen)
|
Goofy007 Mitglied Vermessungstechniker
Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 31. Aug. 2009 16:55 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, Ich habe in einem meiner Makros den Befehle: Code: Set Farbe = AcadApplication.GetInterfaceObject("Autocad.accmcolor.17")
verwendet. Nun habe ich festgestellt, daß der nur in den 17er Versionen von ACAD funktioniert. Um Versionsunabhängig zu sein, muß ich wohl erst mal die Version feststellen, und dann die für die Verison passende Funktion wählen.Ist das so? Oder gibt es einen eleganteren Weg? Ich möchte unnötige if´s vermeiden. In der Hilfe und im Web konnte ich leider nichts brauchbares finden. lg Didi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 31. Aug. 2009 17:06 <-- editieren / zitieren -->
Hi Didi, Dann kannst du statt fixer Texte eine Funktion definieren, die Dir die richtigen ActiveX-ObjectNames evaluiert und diesen retourniert. Code: '...folgendes kann in eigenen Modulen stehen, die Du Dir als allgemeine Library erzeugst Private Function getAcadVersionMain as string getAcadVersionMain = left(ThisDrawing.Application.Version,2) End FunctionPrivate Function getColorInterfaceString() as String getColorInterfaceString = "Autocad.accmcolor." & getAcadVersionMain End Function '...und in Deiner Funktion schreibst Du dann: Set Farbe = AcadApplication.GetInterfaceObject(getColorInterfaceString)
Noch schöner ist natürlich, wenn Du beim Start Deiner Applikation den Versionsstring von AutoCAD mal in eine Variable speicherst, dann muss nicht immer auf das Application-Objekt hingegriffen werden, zusätzlich fängst Du damit auch das Problem im obigen Code ab, der abfliegen würde, wenn gerade keine Zeichnung offen wäre.
- alfred - ------------------ www.hollaus.at |
Goofy007 Mitglied Vermessungstechniker
Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 31. Aug. 2009 19:05 <-- editieren / zitieren --> Unities abgeben:
|
Goofy007 Mitglied Vermessungstechniker
Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 01. Sep. 2009 09:20 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, ich hab deinen Vorschlag jetzt so umgesezt. Code:
... Dim AcFarbe As String Dim Version As String Dim Farbe As AcadAcCmColor ... Version = Left(ThisDrawing.Application.Version, 2) AcFarbe = "Autocad.accmcolor." & Version Set Farbe = AcadApplication.GetInterfaceObject(AcFarbe) ...
Abschmieren ohne Zeichnung scheint mir nicht gefährlich zu seine, weil man ohne Zeichnung das Makro gar nicht starten kann. nochmals Danke und liebe Grüße Didi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 01. Sep. 2009 13:52 <-- editieren / zitieren --> Unities abgeben: Nur für Goofy007
|
Goofy007 Mitglied Vermessungstechniker
Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 01. Sep. 2009 19:53 <-- editieren / zitieren --> Unities abgeben:
|