Korzystamy z cookies, więcej informacji »
Dodano: 16.05.2010 16:51 | brak komentarzy

Lekcja 20 - Menu w VBA w AutoCAD-zie

 


Z poziomu VBA możemy tworzyć i edytować dwa rodzaje menu: listę rozwijaną oraz menu kursora. Do listy rozwijanej mamy dostęp poprzez menu górne w AutoCAD-zie. Do menu kursora z kolei uzyskujemy dostęp poprzez jednoczesne wciśnięcie klawisza SHIFT oraz prawego klawisza myszy.

Struktura listy rozwijanej jest ograniczona do 999 elementów. Struktura menu kursora jest ograniczona do 499 elementów. Po przekroczeniu tych wielkości następne elementy menu są ignorowane.

Poniższy rysunek obrazuje, w jaki sposób są numerowane elementy w menu. Indeksy menu są liczone od 0 do n. Proszę również zwrócić uwagę, że separator jest także liczony jako osobny element menu.


Rys. 1 Struktura listy rozwijanej

Poniższy przykład ilustruje, w jaki sposób za pomocą VBA można stworzyć w AutoCAD-zie nowe menu i dodać to menu do istniejącej listy rozwijanej.
'Definiujemy nazwę nowej procedury. Public Sub HelionMenu() 'Deklarujemy zmienną objMenus 'jako nową listę rozwijaną AutoCAD-a. Dim objMenus As AcadPopupMenus 'Deklarujemy zmienną 'objHelionMenu jako nową listę Dim objHelionMenu As AcadPopupMenu 'Deklarujemy zmienną strNewMenuName 'jako zmienną typu string Dim strNewMenuName As String 'Tworzymy za pomocą instrukcji Set 'skojarzenie nazwy ze zmienną (tworzymy nową listę) Set objMenus = ThisDrawing.Application. MenuGroups.Item(0).Menus 'Jeżeli AutoCAD zwróci błąd, to przechodzimy dalej On Error Resume Next 'Tworzymy listę rozwijaną o nazwie Helion. Set objHelionMenu = objMenus("&Helion") 'Sprawdzamy warunek logiczny. 'Jeżeli obiekt menu o tej nazwie już istnieje, to: If Not objHelionMenu Is Nothing Then 'Wyświetlamy okno informacyjne MsgBox "Menu already exists" 'I opuszczamy bieżącą procedurę Exit Sub 'Koniec instrukcji warunkowej IF End If 'Dodajemy element menu Set objHelionMenu = objMenus.Add("&Helion") objHelionMenu.InsertInMenuBar ThisDrawing.Application.MenuBar.Count 'Kończymy procedurę End Sub

Poniższy przykład ilustruje sposób dodawania elementów do stworzonego przez nas menu. Dodany przez nas element menu ma za zadanie uruchomienie makra napisanego w VBA, korzystając z polecenia AutoCAD-a -VBARUN.
'Definiujemy nową nazwę procedury. Public Sub HelionMenu2() 'Deklarujemy zmienną objMenus 'jako listę rozwijaną AutoCAD-a. Dim objMenus As AcadPopupMenus 'Deklarujemy zmienną objHelionMenu 'jako nową listę rozwijaną AutoCAD-a. Dim objHelionMenu As AcadPopupMenu 'Deklarujemy zmienną strNewMenuName 'jako zmienną typu string. Dim strNewMenuName As String 'Deklarujemy zmienną objHelionMenuItem 'jako nowy element listy rozwijanej. Dim objHelionMenuItem As AcadPopupMenuItem 'Za pomocą instrukcji Set dokonujemy 'skojarzenia obiektu ze zmienną. Set objMenus = ThisDrawing.Application.MenuGroups.Item(0).Menus 'W wypadku zwrócenia błędu 'przechodzimy do następnej linii. On Error Resume Next 'Tworzymy nowy obiekt listy o nazwie Helion. Set objHelionMenu = objMenus("&Helion") 'Sprawdzamy warunek logiczny: 'Jeżeli obiekt listy o danej nazwie nie istnieje to: If objHelionMenu Is Nothing Then 'Dodajemy go. Set objHelionMenu = objMenus.Add("&Helion") 'Koniec instrukcji warunkowej IF End If 'Sprawdzamy, czy utworzony przez nas element 'menu został wyświetlony w menu górnym. If Not objHelionMenu.OnMenuBar Then 'Jeżeli nie, to go wyświetlamy objHelionMenu.InsertInMenuBar ThisDrawing.Application.MenuBar.Count 'Koniec instrukcji warunkowej IF End If 'Umieszczamy w naszym menu 'wywołanie makra AddCircle. Set objHelionMenuItem = objHelionMenu.AddMenuItem(0, "Add &Circle", _ "-vbarun AddCircle ") 'Tworzymy podpowiedź dla 'tego elementu menu. objHelionMenuItem.HelpString = "This adds a circle at the origin" 'Koniec procedury End Sub Sub rysOkrąg2() Dim ObOkrag As AcadCircle 'Deklaracja zmiennej jako obiekt AutoCAD-a Dim PtSrodek(0 To 2) As Double 'Deklaracja zmiennej dla punktu środka okręgu Dim dblPromien As Double 'Deklaracja zmiennej dla promienia 'Dane okręgu: PtSrodek(0) = 100# 'Współrzędna X środka okręgu PtSrodek(1) = 200# 'Współrzędna Y środka okręgu PtSrodek(2) = 0# 'Współrzędna Z środka okręgu dblPromien = 50# 'Wartość promienia 'Tworzenie okręgu w przestrzeni modelu Set ObOkrag = ThisDrawing.ModelSpace.AddCircle (PtSrodek, dblPromien) End Sub


Rys. 2 Efekt działania procedury HelionMenu2


Rys. 3 Helpstring widoczny, gdy zatrzymamy kursor myszy na elemencie menu Rys Okrąg

Przy umieszczaniu elementów w menu stworzonym przy pomocy VBA musimy zwrócić uwagę na jeszcze jedną ważną różnicę: zamiast znaków sterujących w menu np. ; musimy używać ich odpowiedników ASCII

chr(59)
'przypisanie makra otwórz (Odpowiednik VBA dla wpisania: "ESC ESC _open ") openMacro = Chr(3) & Chr(3) & Chr(95) & "open" & Chr(32)

Poniżej umieściłem tabelę, zawierającą najczęściej używane w menu znaki sterujące oraz ich odpowiedniki w ASCII.


Rys. 4

 

Dodaj komentarz
Żeby móc dodawać komentarze musisz być zalogowany.
Komentarze
Brak komentarzy.
Newsletter
Prosto na email będziesz otrzymywać między innymi
  • oferty pracy
  • zniżki na książki
  • najnowsze publikacje
AutoCAD cz. I

AutoCAD - kurs dla początkujących

 

Pierwszy z kursów przeznaczony jest dla osób rozpoczynających pracę w środowisku AutoCAD.
Omówiona została filozofia pracy z programem AutoCAD, wygląd głównego okna aplikacji oraz dopasowanie programu do własnych potrzeb.

Kolejne podrozdziały poświęcone są zagadnieniom rysowania i modyfikowania obiektów (linie, multilinie, okrąg, prostokąt wielobok, splajn). Zostały również omówione zasady pracy z warstwami, blokami oraz wymiarowanie. Ostatnie rozdziały kursu podstawowego omawiają zasady drukowania.