| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Autocad AdWindows Ribbons (2658 mal gelesen)
|
veydan Mitglied
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 17. Jun. 2010 14:15 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich habe mir einen Beispielcode für die Ribbons angesehen und probiert. Funktioniert alles super bis auf 2 Dinge. Wenn man auf den Klassischen Modus umschaltet, und dann wieder in den anderen (Ribbon-style), ist das neu dazugeladene Ribbonmenü nicht mehr da. Die Definition ist beim Initialize der .dll. Gibt es da ein Event in die Richtung, GUI_Changed von Autocad oder so? Damit mein Ribbon wieder geladen wird. Das 2 ist, dass ich die Bildgröße des Befehls im Ribbontab nicht ändern kann. es wird mir immer abgeschnitten und wenn ich es dementsprechend verkleinere komme ich nie an die Qualität der "Originalen". mfg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 17. Jun. 2010 14:32 <-- editieren / zitieren -->
Hi, >> Gibt es da ein Event in die Richtung, GUI_Changed von Autocad oder so? Auswendig wüsste ich nichts, nachsehen würde ich bei EDITOR-Events, oder bei SysvarChanged-Event oder zuletzt bei CommandEnded-Event. Der restliche Teil der Frage ist ohne Beispiel imho nicht zu beantworten, leider. - alfred - ------------------ www.hollaus.at |
veydan Mitglied
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 18. Jun. 2010 09:08 <-- editieren / zitieren --> Unities abgeben:
Hallo, edit: Menü erstellen funktioniert teilweise. Auf der Oberfläche ist es noch nicht zu sehen, aber wenn ich unter "cui" nachschaue ist es bei allen workspaces drinnen. Erst wenn ich die Position verändere und auf Anwenden gehe ist es auch auf der Oberfläche. Kann man das auch per Code auslösen? mfg
[Diese Nachricht wurde von veydan am 18. Jun. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
veydan Mitglied
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 18. Jun. 2010 18:40 <-- editieren / zitieren --> Unities abgeben:
Hallo! wenn FILEDIA auf 0 ist, dann sind doch Leerzeichen in Pfaden erlaubt oder? Wenn ich jetzt über das Com AcadDocument Object ein SendCommand mache und einen Pfad mit leerzeichen angebe, akzeptiert er dass aber nicht... Code:
Dim acadapp As AcadApplication = CType(ApplicationServices.Application.AcadApplication, AcadApplication) acadapp.ActiveDocument.SendCommand("FILEDIA 0 " & vbCr) 'acadapp.ActiveDocument.SendCommand("0" & vbCr) acadapp.ActiveDocument.SendCommand("_CUIUNLOAD " & vbCr) acadapp.ActiveDocument.SendCommand(mainCuiFile & vbCr) acadapp.ActiveDocument.SendCommand("_CUILOAD " & vbCr) acadapp.ActiveDocument.SendCommand(mainCuiFile & vbCr) acadapp.ActiveDocument.SendCommand("FILEDIA 1 " & vbCr)
Danach kommen dann die Fehlermeldungen dass die Anpassungsdatei nicht gefunden werden kann mit den einzelnen Pfadschritten jeweils nach einem Leerzeichen... mfg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 18. Jun. 2010 20:12 <-- editieren / zitieren -->
Hi, nur kurz zwischendurch: Bei diesem Statement "FILEDIA 0 " & vbCr ist doch entweder ein Leerschritt oder einmal vbCr zu viel, kommt der Fehler nicht daher? - alfred - ------------------ www.hollaus.at |
veydan Mitglied
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 18. Jun. 2010 21:14 <-- editieren / zitieren --> Unities abgeben:
nein, die Leerschritte müssten ihm ja auch egal sein, da er die ja nicht akzeptiert (habe es aber anders auch schon probiert). In einem anderen Post hast du mir den Tipp gegeben, dass wenn Filedia auf 0 ist, Leerzeichen dann keine Eingabe sind, sondern vbcr zum "Enter" des Befehls führt. Er schneidet mir einfach den Pfad des Menüfiles ab. Ich kann Hochkommas Vorne und Hinten anstellen was ich will. Pfad: C:\Users\Username\AppData\Roaming\Autodesk\AutoCAD Mechanical 2011\R18.1\deu\acadm.cuix Folgende Meldungen bekomme ich: 1. Fehler beim Laden der Anpassungsdatei. Datei wurde nicht gefunden: C:\Users\Username\AppData\Roaming\Autodesk\AutoCAD 2. Fehler beim Laden der Anpassungsdatei. Datei wurde nicht gefunden: Mechanical 3. Fehler beim Laden der Anpassungsdatei. Datei wurde nicht gefunden: 2011\R18.1\deu\acadm.cuix mfg
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 18. Jun. 2010 21:30 <-- editieren / zitieren -->
Hi, zu obigem mit dem Leerschritt: da meine ich, dass in der Befehlszeile durch das letzte vbCr der Befehl FILEDIA nochmals gestartet wird und dann auf 0 oder 1 wartet. Egal, wenn Leerschritte beim Menüladen nicht funken, dann hätte ich das als Alternative anzubieten: AcadApp.MenuGroups.Load(MenuFullFileName) Wobei ich gerade in 3 SLN's gleichzeitig in Bearbeitung habe und daher auch Deine Situation jetzt nicht nachstellen bzw. probieren kann. Wird wohl erst des späteren werden, oder es hilft Dir oberes Statement schon (dann lass es mich bitte wissen). Normalerweise sollten die Leerschritte zulässig sein, ich hab's bei mir in einem Code drin, nur mit dem kleinen Unterschied, dass ich mit Befehl _MENULOAD/_MENUUNLOAD und nicht _CUI... arbeite (sollte aber gleiches sein). Und sollte meines auch nicht funken, dann würden alle unsere Anwender mit englischem Betriebssystem aufschreien. HTH, - alfred - ------------------ www.hollaus.at |
veydan Mitglied
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 18. Jun. 2010 21:53 <-- editieren / zitieren --> Unities abgeben:
geht da auch analog: AcadApp.MenuGroups.UnLoad(MenuFullFileName) ? Ist es überhaupt möglich die Hauptanpassungsdatei zu entladen und wieder zu laden, oder sollte man solche Custom Menüs in einer eigenen CUIX Datei erstellen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 18. Jun. 2010 21:58 <-- editieren / zitieren -->
Hi, >> Ist es überhaupt möglich die Hauptanpassungsdatei zu entladen probiers bitte, ich weiss es nicht. Nur beim Entladen erinnere ich mich dunkel an einen Thread hier, dass diese Form von Unload dann nicht in dem Profil gespeichert blieb und beim nächsten Start von AutoCAD das Menü dann doch wieder geladen wurde. Lässt sich aber mittels Suche sicher schnell finden. >> oder sollte man solche Custom Menüs in einer eigenen CUIX Datei erstellen?
JA, UNBEDINGT!!! Eigene CUI und als partielle CUI laden. Du willst ja nicht bei jedem Update von AutoCAD Dein Menü wieder nachbauen, Du willst sicher auch nicht die schon vorhandenen User-Einstellungen vernichten, indem Du einfach Deine HauptCUI drüberknallst, oder? - alfred - ------------------ www.hollaus.at |
Ex-Mitglied
|
erstellt am: 19. Jun. 2010 14:53 <-- editieren / zitieren -->
Hi, dieses funkt bei mir, Umweg über LISP, dann klappts auch mit den Leerschritten.
Code:
Dim acadapp As AcadApplication = CType(ApplicationServices.Application.AcadApplication, AcadApplication) Dim tCuiFileName As String = "C:\TEMP\Test Dir Mit Leerschritten\ISHTrim_18_00.cuix" Dim tLispStr As String = "(COMMAND ""_MENULOAD"" """ & tCuiFileName.Replace("\", "/") & """)"acadapp.ActiveDocument.SendCommand("FILEDIA 0" & vbCr) acadapp.ActiveDocument.SendCommand(tLispStr & vbCr) acadapp.ActiveDocument.SendCommand("FILEDIA 1" & vbCr)
In Deinen SendCommands solltest Du trotzdem mit den Leerschritten aufpassen, ENTWEDER Leerschritt ODER vbCr, Du hast am Ende Deiner Zeilen immer beides gemacht, das führt dann zwangsläufig (in diesen Fällen) zur Befehlswiederholung. - alfred - ------------------ www.hollaus.at |
veydan Mitglied
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 21. Jun. 2010 12:42 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich habe deinen Code mal in eine eigene Funktion gepackt, die ich in Autocad aufrufe über LoadMenu Das FILEDIA 1 Command habe ich mal weggelassen Er fragt nach dem ausführen der Funktion noch nach der Anpassungsdatei Hier der Log der Befehlszeile: Code:
Befehl: LOADMENU Befehl: FILEDIA Neuen Wert für FILEDIA eingeben <0>: 0 Befehl: (COMMAND "_MENULOAD" "CUIFILE") _MENULOAD Geben Sie den Namen der zu ladenden Anpassungsdatei an: CUIFILE CUIFILE Geben Sie den Namen der zu ladenden Anpassungsdatei an: nil
CUIFILE = Der Pfad zu meiner Datei edit: Wenn ich die Menüdatei manuell laden will, bekomme ich die Meldung, dass eine Menüdatei "Fullpath der Datei" schon vorhanden sei? Im CUI Dialog ist aber nichts zu finden. Auf was wird da geprüft?
[Diese Nachricht wurde von veydan am 21. Jun. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 21. Jun. 2010 13:07 <-- editieren / zitieren -->
Hi, >> CUIFILE = Der Pfad zu meiner Datei Das steht aber nicht im Auszug Deiner Befehlszeile, zumindest sehe ich den Pfad nicht, da müsste etwas ähnliches stehen wie:
Code: (COMMAND "_MENULOAD" "C:/TEMP/XXX.CUIX")
>> Wenn ich die Menüdatei manuell laden will, bekomme ich die Meldung, >> dass eine Menüdatei "Fullpath der Datei" schon vorhanden sei?
Er prüft einerseits den Pfad (ob die Datei schon geladen ist) und andererseits die in der CUIX-Datei geladenen Gruppen. Als solches wird vermieden, dass Du z.B. 2 Gruppen mit dem Namen 'ACAD' hast. - alfred - ------------------ www.hollaus.at |
veydan Mitglied
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 21. Jun. 2010 13:55 <-- editieren / zitieren --> Unities abgeben:
Zitat:
>> CUIFILE = Der Pfad zu meiner DateiDas steht aber nicht im Auszug Deiner Befehlszeile, zumindest sehe ich den Pfad nicht, da müsste etwas ähnliches stehen wie: Code:(COMMAND "_MENULOAD" "C:/TEMP/XXX.CUIX")
ersetzt du CUIFILE mit "C:/..../my.cuix" dann hast du meine Ausgabe, ich wollte das nur abkürzen, da der Pfad ja egal sein sollte wo die Datei liegt. Ich habe aber schon herausgefunden, was nicht passt, ich wollte eine Menüdatei, wo nur mein Menü enthalten ist.So wie ich es aber jetzt gemacht habe ist es das Standard Autocad Menü incl meinem neuen. Probiere noch, dass ich eine neue partielle Menüdatei automatisch erzeuge, dann dürfte das laden klappen.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
veydan Mitglied
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 22. Jun. 2010 08:17 <-- editieren / zitieren --> Unities abgeben:
So, dass laden der CUI Datei funktioniert. Danke! Ich habe jetzt nur noch Probleme, beim erstellen der Ribbons, ist nämlich der Workspace Autocad Klassisch aktiv, bekomme ich eine Fehlermeldung bei Code:
Dim ribCntrl As Autodesk.Windows.RibbonControl = ComponentManager.Ribbon 'create a ribbontab Dim ribTab As New RibbonTab() 'set a few properties ribTab.Title = "MYTitle" ribTab.Id = "MYID" 'add the tab to the ribbon addContent(ribTab) Dim ribTabColl As RibbonTabCollection ribTabColl = ribCntrl.Tabs // FEHLER // ribTabColl.Add(ribTab) 'set as active tab ribTab.IsActive = True SaveCurrentMainCUI()
Fehlermeldung ist, Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt. Das Tabs Property hat aber Elemente wenn ich debugge... Es funktioniert auch wenn der Workspace mit den Ribbons aktiv ist. Ich möchte aber mein Menü gerne in beide Varianten einbauen, falls jemand umschaltet. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 22. Jun. 2010 08:53 <-- editieren / zitieren -->
Hi, Du kannst mit Variable RIBBONSTATE checken, ob Ribbons aktiviert sind oder nicht. Nur eine Grundsatzfrage: wieso baust Du nicht normal ein Menü mit dem CUI-Befehl, das dann schon fertig ist, wenn Du Deine App startest? Das Erstellen der CUI über Programm ist in meinen Augen sehr aufwendig und ich sehe die Situation nicht, wozu ein Programm schreiben, wenn ich es mit CUI bereits fertig machen kann und das fertige lade. - alfred - ------------------ www.hollaus.at |