メニューを menuload コマンドでロードしても、ロードはされるが表示されないという場合があって難儀した (どうも、最後にアンロードした時の表示状態がずっと記憶されているようだ)
過去の案件だと menuload ではなく、(vla-load (vla-get-menugroups (vlax-get-acad-object)) "メニュー名")
なら表示されるという解決方法もあったのだが、今回はダメだった。
でも、このコマンドを実行すると、ActiveX のオブジェクトを示すIDっぽい番号がコマンドラインに表示される。これを手掛かりにオブジェクトをたどっていけば、メニューを無理やり表示させることもできるのでは?
CAD の Lisp で扱う ActiveX オブジェクトは (vlax-dump-object オブジェクト T)
で仕様が表示できる。これを手掛かりに芋づる式に表示したいメニュー項目を表示状態にしてみよう。
(setq menugroups (vla-get-menugroups (vlax-get-acad-object))) (if (menugroup "メニュー名") (setq custom (vlax-invoke-method menugroups "Item" "メニュー名")) (setq custom (vla-load menugroups "メニューファイル")) ) (setq toolbars (vlax-get-property custom "Toolbars") count (vlax-get-property toolbars "Count") ) (while (> count 0) (setq count (1- count) toolbar1 (vlax-invoke-method toolbars "Item" count)) (vlax-put-property toolbar1 "Visible" T) )
うまいこといきました。