24 kwietnia 2024


W tym odcinku przedstawiamy jak, za pomocą Visual LISPu, tworzyć i edytować paski narzędzi.Stanowią one uzupełnienie menu kaskadowego. Powszechnie zostały wprowadzone do AutoCADa wraz z przejściem z systemu DOS do systemu Windows, w wersji 13-tej programu.

Andrzej Gumuła

Dostęp do nich z poziomu ActiveX nie jest skomplikowany i jest analogiczny jak w przypadku menu. Wymaga tylko użycia właściwości Toolbars, będącej w zbiorze właściwości obiektu zbioru menu. Zostając przy menu AutoCAD i określonej już wcześniej zmiennej AcadMenu możemy uzyskać dostęp do obiektu zbioru pasków narzędzi za pomocą wyrażenia (setq AcadToolbars (vla-get-Toolbars AcadMenu)). Identyfikator obiektu przypisaliśmy do zmiennej AcadToolbars.
Aby dodać nowy pasek narzędzi należy użyć wyrażenie (vla-add AcadToolbars Label), gdzie Label określa etykietę paska zadań. Etykieta powinna być unikalna w danym zbiorze. Wyrażenie zwraca identyfikator obiektu nowo zdefiniowanego paska, który można przypisać do określonej zmiennej, a cały obiekt dalej edytować Do określenia wielkości ikon na pasku posłuży nam wyrażenie (vla-put-LargeButtons AcadToolbars Value). Argument Value równy :vlax-true oznacza duże ikonki, :vlax-false – małe.
Poniższa funkcja GetToolbarsNames zwraca w przypadku powodzenia listę z nazwami wszystkich pasków narzędzi dla grupy menu określonej nazwą Menu. Można ją wykorzystać jako warunek sprawdzający przy wstawianiu nowego paska.
(defun GetToolbarsNames (Menu / Id Names)
(cond
((setq Id (GetMenuGroup Menu))
(vlax-for & (vla-get-Toolbars Id)
(setq Names (cons (vla-get-Name &) Names))
);end vlax-for
(reverse Names)
)
(T nil)
);end cond
);end GetToolbarsNames     

Wykorzystując właściwość Visible i kod funkcji przedstawionej powyżej możemy szybko zdefiniować funkcję, która zwraca, w przypadku powodzenia, listę tylko widocznych pasków narzędzi. Jeżeli wszystkie paski z danej grupy menu są niewidoczne funkcja zwraca listę z pustym łańcuchem. W pozostałych przypadkach funkcja zwraca nil.
(defun GetVisibleToolbarsNames (Menu / Id Names)
(cond
((setq Id (GetMenuGroup Menu))
(vlax-for & (vla-get-Toolbars Id)
(if (= (vla-get-Visible &) :vlax-true)
(setq Names (cons (vla-get-Name &) Names))
);end if
);end vlax-for
(if Names (reverse Names) ‘(„”))
)
(T nil)
);end cond
);end GetVisibleToolbarsNames

cały artykuł dostępny jest w wydaniu 5 (20) maj 2009