17 października 2021


Na efektywność programu składają się nie tylko jego możliwości, ale także w sposób, w jakie zostaną one użytkownikowi przedstawione. Profesjonalny program powinien posiadać przejrzysty interfejs oraz czytelne menu tak, aby praca w nim stała się wręcz intuicyjna.

Andrzej Gumuła

Możliwość programowego integrowania w menu AutoCADa, która pojawiła się wraz z Visual LISPem pozwala dzisiaj użytkownikowi na większą swobodę w tworzeniu własnych aplikacji. Związanie nowych poleceń z własnymi ikonkami na pasku zadań nie tylko poprawi „estetykę” aplikacji, ale także jej profesjonalność. I właśnie o definiowaniu i edycji menu opowiemy w dzisiejszym artykule.

Mechanizmy ActiveX, a menu górne
Z pojawieniem się wersji 2006 struktura plików menu w AutoCADzie uległa zmianie. Pliki tekstowe formatu ASCII, edytowane (które można było np. edytować w systemowym Notatniku) zostały zamienione na pliku cui w formacie xml. Wbudowany edytor w AutoCADzie umożliwia pracę z tymi plikami. Niemniej dostęp do menu jest również możliwy poprzez języki programowania, w tym Visual LISP.
W mechanizmach ActiveX każdy element serwera aplikacji (w naszym przypadku jest to AutoCAD) reprezentowany jest przez obiekt VLA. Każdy taki obiekt ma unikalny zbiór właściwości (ang. properties) i metod (ang. methods), przy pomocy których można odczytywać dane o obiekcie lub go edytować. Obiekty w mechanizmach ActiveX mają strukturę hierarchiczną, na czele której stoi zawsze obiekt serwera aplikacji. Dostęp do kolejnych, „niżej” położonych obiektów, jest możliwy dopiero po uzyskaniu dostępu do obiektów umieszczonych wyżej w hierarchii. Np. warstwa „0” w rozumieniu ActiveX jest elementem obiektu, który reprezentuje zbiór warstw. Następnie obiekt zbioru warstw należy do obiektu określonego dokumentu (rysunku). Z kolei dokument jest elementem obiektu zbioru dokumentów, który jest już bezpośrednią właściwością serwera aplikacji (obiektu głównego). Te zależności można łatwo zrozumieć, analizując model obiektów zamieszczony w pomocy Visual LISPu (patrz menu edytora uruchamianego poleceniem vlisp lub vlide), w rozdziale „ActiveX and VBA Reference”. Posługując się tą samą zasadą możemy, korzystając z mechanizmów ActiveX, uzyskać dostęp do poszczególnych elementów menu AutoCADa. Mając taki dostęp łatwo już edytować lub definiować nowe elementy.
Na początek musimy uzyskać wskaźnik obiektu AutoCADa (pamiętajmy o uruchomieniu na początku funkcji vl-load-com). Zapiszmy go do zmiennej:
(setq AcadObject (vlax-get-acad-object))
Obiekt ten posiada właściwość, która pozwoli uzyskać dostęp do obiektu menu górnego (zwanego także paskiem menu).
(setq MenuBar (vla-get-MenuBar AcadObject))
Właściwość Count pozwoli nam uzyskać aktualną liczbę pozycji menu.
(setq Count (vla-get-Count MenuBar))
Pamiętajmy, że w AutoCADzie zniesiona została bariera maksymalnie 16 pozycji w menu górnym.
Wykorzystując właściwości i metody obiektu MenuBar możemy zdefiniować kilka użytecznych funkcji:

(defun GetMenuBarItems (/ Count)
(vla-get-Count (vla-get-MenuBar (vlax-get-acad-object)))
);end GetMenuBarItems


cały artykuł dostępny jest w wydaniu 4 (19) kwiecien 2009