| |
| 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 – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Remove CommandBar (473 mal gelesen)
|
buchi2k Mitglied
Beiträge: 4 Registriert: 21.11.2006
|
erstellt am: 21. Nov. 2006 17:01 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe folgende Problemstellung: ich möchte, dass mein Menüpunkt (File View MeinMenüPunkt) bei jedem Start von Inventor geladen wird, und mit einer variablen Anzahl von Menüeinträgen dargestellt wird. Ich habe aber folgendes Problem: Die Menüpunkte werden nur beim ersten Laden der .dll geladen. if(FirstTime == VARIANT_TRUE) InsertControlsInMenuBars(); wenn ich nun bei diesem Start weniger Menüpunkte lade als zuvor zeigt es mir bei dem betroffenen Menüpunkt nur ein Symbol an das der Menüpunkt nicht ordnungsgemäß geladen wurde. Wenn ich die If-Abfrage entferne habe ich multiple Menüeinträge (File View MeinMenüPunkt MeinMenüPunkt MeinMenüPunkt). Meine genaue Frage lautet daher wie kann ich dieses Verhalten realisieren??? Mein Ansatz war: bei jedem Start von Inventor das Menü (mit x Menüpunkten) entfernen und danach das Menü (mit y Menüpunkten) erneut hinzufügen . Habs aber nicht geschafft das Menü ordentlich zu entfernen, ich wäre sehr dankbar falls wer Code oder Ansätze zum Richtigen entfernen des Menüs oder einen alternativen Lösungsansatz bieten kann. mfg Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 22. Nov. 2006 08:49 <-- editieren / zitieren --> Unities abgeben: Nur für buchi2k
Hi Stefan, ich gehe mal davon aus, dass du ein normale Werkzeugleiste (CommandBar) hast. Und die sollte sich schon mit Delete löschen lassen. Wie versuchst du es denn? Und wovon hängt es ab, ob ein Eintrag in dem Menü drin ist oder nicht? Notfalls die Registry vor dem Start manipulieren. Aber das ist wirklich gar nicht sauber.
------------------ Grüße daywa1k3r FX64 Software Solutions Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
buchi2k Mitglied
Beiträge: 4 Registriert: 21.11.2006
|
erstellt am: 22. Nov. 2006 12:09 <-- editieren / zitieren --> Unities abgeben:
Hi, Ich habe einfach zu den Standard Menüpunkten (File, View,...) einen eigenen Menüpunkt hinzugefügt. Der Eintrag soll bei jedem Start hinzugefügt werden (die Menüeinträge die angezeigt werden stehen in einem Textfile und werden vorher ausgelesen) Da ich momentan Probleme habe diese Anzuzeigen habe ich mir vorgestellt die Menüeinträge vorher zu löschen und dann neu hinzuzufügen. Als vorlage zum hinzufügen der Menüpunkte diente mir das Beispiel LoftWithRailings das bei Inventor dabei ist. Das ist der Codeausschnitt in dem ich den Menüpunkt löschen wollte, funktioniert aber irgendwie nicht so wies soll.
Code: ATLASSERT(m_pApplication); ATLASSERT(m_pAddInSite); CComPtr<CommandBarBase> pCmdBarDef; CComPtr<UserInterfaceManager> pUserInterfaceMgr; HRESULT hr = m_pApplication->get_UserInterfaceManager(&pUserInterfaceMgr); ATLASSERT(SUCCEEDED(hr)); CComPtr<CommandBars> pCmdBars; hr = pUserInterfaceMgr->get_CommandBars(&pCmdBars); ATLASSERT(SUCCEEDED(hr)); CComVariant vtAddInId(L"{37E7CBC7-F0F7-455B-85B4-668E0674C9DE}"); CComBSTR InternalNameBSTR(L"LoftWithRailingsCmdBar_CIMGRAPH"); CComBSTR displayNameBSTR(L"&CIMGraph Explorer"); CComPtr<CommandBar> pCmdBar; hr = pCmdBars->get_Item(CComVariant(InternalNameBSTR),&pCmdBar); hr= pCmdBar->Delete();
mfg Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 22. Nov. 2006 16:12 <-- editieren / zitieren --> Unities abgeben: Nur für buchi2k
Hm, der Code scheint OK zu sein. Allerdings ob er auf der richtige Stelle steht, kann ich von hier nicht sagen(FirstTime und so...) Bekommst du da eine Fehlermeldung? Eins kannst du noch probieren, und zwar den Code innerhalb der FirstStart zu schreiben, und bevor du den Inventor + AddIn startest, deine CLSID aus dem: HKEY_CURRENT_USER\Software\Autodesk\Inventor\RegistryVersion11.0\UI Customization V4\Command Owner IDs Schlüssel zum löschen. Das bewirkt, dass der Code innerhalb der FirstTime IF ausgeführt wird. Sollte das funktionieren musst du es mit Code automatisieren.
------------------ Grüße Igor FX64 Software Solutions Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
buchi2k Mitglied
Beiträge: 4 Registriert: 21.11.2006
|
erstellt am: 22. Nov. 2006 16:26 <-- editieren / zitieren --> Unities abgeben:
Naja, also der part mit hr=pCmdBar->Delete() liefert S_OK, allerdings wird pCmdBar nicht NULL, sondern bleibt gleich. Das mit dem Firsttime hab ich schon probiert indem ich das if auskommentiert habe also die Funktion jedesmal aufgerufen wird, also jedes mal löschen und danach neu hinzufügen. (Müsste eigentlich den selben Effekt haben wie deine Variante mit dem regkey löschen) Allerdings scheint das mit dem löschen nicht zu funktionieren, da sie mir die Commandbar doppelt einträgt. File View myCMD myCMD ... naja, hab irgendwie die fragestellung schon paar mal entdeckt, aber nie eine passende Lösung Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 22. Nov. 2006 16:31 <-- editieren / zitieren --> Unities abgeben: Nur für buchi2k
|
buchi2k Mitglied
Beiträge: 4 Registriert: 21.11.2006
|
erstellt am: 22. Nov. 2006 17:07 <-- editieren / zitieren --> Unities abgeben:
|