Một khi đã được tải vào tập đối tượng MenuGroups, ta có thể chèn các trình đơn cục bộ vào thanh trình đơn bằng cách sử dụng phương thức InsertMenuInMenuBar hoặc InsertInMenuBar... Khi[r]
(1)T
TÙÙYY BBIIẾẾNN TTHHAANNHH CCÔÔNNGG CCỤỤ
V
VÀÀ TTRRÌÌNNHH ĐĐƠƠNN
6 Trong chương này
Tìm hiểu tập đối tượng MenuBar MenuGroups Tải nhóm trình đơn Thay đổi trình đơn Tạo hiệu chỉnh trình
đơn kéo xuống trình đơn tắt
Tạo hiệu chỉnh công cụ
Tạo Macro
Tạo dòng trạng thái trợ giúp cho mục trình đơn nút thanh cơng cụ
Thêm mục vào trình đơn tắt
AutoCAD ActiveX Automation cung cấp quyền kiểm soát việc điều chỉnh trình đơn công cụ phiên làm việc hành AutoCAD
Sử dụng AutoCAD ActiveX/VBA, ta hiệu chỉnh thêm chi tiết chí thay đổi hồn tồn cấu trúc trình đơn Ta điều khiển cơng cụ trình đơn nút chuột phải
(2)1 Tìm hiểu tập đối tượng MenuBar MenuGroups
AutoCAD ActiveX cung cấp số đối tượng dạng trình đơn Trong đó, quan trọng tập đối tượng MenuBar (thanh trình đơn) MenuGroups (các nhóm trình đơn) Tập đối tượng MenuBar bao gồm tất trình đơn hiển thị trình đơn AutoCAD
(3)1.1 Khám phá tập đối tượng MenuGroups
Tập đối tượng MenuGroups bao gồm nhóm trình đơn tải lên phiên làm việc hành AutoCAD Mỗi nhóm trình đơn bao gồm tập đối tượng PopupMenus tập đối tượng Toolbars Tập đối tượng PopupMenus gồm tất trình đơn bên nhóm trình đơn Tương tự, tập đối tượng Toolbars gồm tất cơng cụ bên nhóm trình đơn
Thực tế, PopupMenu tập đối tượng bao hàm đối tượng cá biệt dành cho mục trình đơn Và tương tự, cơng cụ tập đối tượng chứa đối tượng tương ứng với mục công cụ
2 Tải nhóm trình đơn
Các nhóm trình đơn tải vào AutoCAD phương thức Load Khi sử dụng phương thức Load, gán tham số BaseMenu True để tải nhóm trình đơn vào trình đơn Thao tác tải nhóm trình đơn trình đơn sở giống sử dụng lệnh MENU AutoCAD
Để tải nhóm trình đơn làm trình đơn cục bộ1, ta bỏ tham số BaseMenu Thao tác tải nhóm trình đơn giống lệnh MENULOAD AutoCAD Một tải vào tập đối tượng MenuGroups, ta chèn trình đơn cục vào trình đơn cách sử dụng phương thức InsertMenuInMenuBar InsertInMenuBar
(4)
Khi tải xong nhóm trình đơn, tất trình đơn cơng cụ định nghĩa nhóm trình đơn đem sử dụng Ta có thế:
Thêm trình đơn lên trình đơn
Gỡ bỏ trình đơn có khỏi trình đơn Xắp sếp lại trình đơn trình đơn
Thêm mục vào trình đơn cơng cụ sẵn có Gỡ bỏ mục có khỏi trình đơn cơng cụ Tạo trình đơn công cụ
Tạo công cụ dạng dạng cố định1
Kích hoạt vơ hiệu hóa mục trình đơn cơng cụ Chọn bỏ chọn mục trình đơn
Thay đổi chuỗi chứa thẻ, nhãn trợ giúp mục trình đơn công cụ
Gán lại Macro ứng với mục trình đơn hay cơng cụ Tải nhóm trình đơn
Sau ví dụ tải tệp trình đơn có tên acad.mnc
ThisDrawing.Application.MenuGroups.Load "acad.mnc"
CHÚ Ý Không thể hiệu chỉnh hình ảnh mục trình đơn ActiveX Automation Tuy nhiên, ta tải gỡ bỏ trình đơn ActiveX Automation Để biết thêm chi tiết dạng trình đơn, xem chương 4, “Tùy biến Menu” tài liệu “AutoCAD Customization Guide”
2.1 Tạo nhóm trình đơn mới
Chương trình AutoCAD ActiveX khơng cho phép lập trình tạo nhóm trình đơn Tuy vậy, ta tải nhóm trình đơn có sẵn lưu ngồi với tên vào tệp trình đơn Sau đó, ta hiệu chỉnh nhóm trình đơn để bao hàm chức mà mong muốn Q trình tạo nhóm trình đơn dựa trình đơn có sẵn có ưu điểm tự động cung cấp trình đơn File, Window Help
Lưu nhóm trình đơn vào tệp
Dưới ví dụ minh họa việc lưu nhóm trình đơn tập đối tượng nhóm trình đơn vào tệp có tên MyMenu.mnc
ThisDrawing.Application.MenuGroups.Item(0) _ SaveAs "MyMenu.mnc", acMenuFileCompiled
1 Khi di chuyển cơng cụđến mép của một cử sổ đó, công cụ sẽ gắn theo đường mép
(5)3 Thay đổi trình đơn
Như thấy, trình đơn thay đổi hồn tồn nhóm trình đơn nhóm trình đơn tải dạng trình đơn sở Bên cạnh đó, ta thêm, bớt xắp sếp lại trình đơn riêng lẻ trình đơn
3.1 Chèn một mục vào trình đơn
Để chèn trình đơn có sẵn vào trình đơn, ta sử dụng phương thức InsertMenuInMenuBar InsertInMenuBar Cả hai phương thức có tác dụng chèn trình đơn có sẵn lên trình đơn
Sự khác hai phương thức đối tượng thực gọi phương thức Phương thức InsertMenuInMenuBar gọi từ tập đối tượng PopupMenu Sử dụng phương thức này, ta chèn trình đơn từ tập đối tượng vào vị trí cụ thể trình đơn Phương thức yêu cầu thông số đầu vào tên trình đơn chèn vào vị trí trình đơn để chèn vào
Phương thức InsertMenuBar gọi trực tiếp từ đối tượng PopupMenu, đối tượng chèn vào trình đơn Phương thức yêu cầu tham số đầu vào vị trí trình đơn Ta khơng cần phải nhập tên trình đơn ta gọi phương thức cách trực tiếp từ trình đơn chèn
Ta nên sử dụng phương thức thuận tiện ứng dụng Chèn trình đơn lên trình đơn
Ví dụ sau tạo trình đơn có tên TestMenu chèn mục vào Mục gán lệnh OPEN Sau hồn thành, trình đơn lên trình đơn
Sub Ch6_InsertMenu()
‘ Định nghĩa biến cho nhóm trình đơn Dim currMenuGroup As AcadMenuGroup
Set currMenuGroup = ThisDrawing.Application _ MenuGroups.Item(0)
‘ Tạo trình đơn Dim newMenu As AcadPopupMenu
Set newMenu = currMenuGroup.Menus.Add("TestMenu") ‘ Khai báo biến cho mục trình đơn
Dim newMenuItem As AcadPopupMenuItem Dim openMacro As String
‘ Gán lệnh "ESC ESC _open " tạo mục trình đơn
openMacro = Chr(3) + Chr(3) + Chr(95) + "open" + Chr(32) Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, _ "Open", openMacro)
‘ Hiển thị trình đơn trình đơn
(6)3.2 Gỡ bỏ một mục khỏi trình đơn
Để gỡ bỏ trình đơn khỏi trình đơn, ta sử dụng phương thức RemoveMenuFromMenuBar RemoveFromMenuBar Cả hai phương thức có mục đích gỡ mục từ trình đơn
Hai phương thức khác đối tượng mà phương thức gọi Phương thức RemoveMenuFromMenuBar gọi từ tập đối tượng PopupMenu Phương thức yêu cầu tham số đầu vào tên mục trình đơn vị trí tương ứng trình đơn
Phương thức RemoveFromMenuBar gọi trực tiếp từ đối tượng PopupMenu mà ta cần gỡ bỏ Sử dụng phương thức ta không cần nhập thơng tin Tên trình đơn khơng cần thiết ta gọi phương thức trực tiếp từ đối tượng mà ta cần gỡ bỏ
Ta nên sử dụng phương thức thuận tiện cho ứng dụng Gỡ bỏ mục khỏi trình đơn
Sau ví dụ gỡ bỏ mục trình đơn chèn ví dụ trước
‘ Gỡ bỏ trình đơn từ trình đơn
currMenuGroup.Menus.RemoveMenuFromMenuBar ("TestMenu")
CHÚ Ý Mục trình đơn gỡ bỏ khỏi trình đơn cịn có hiệu lực nhóm trình đơn Việc gỡ bỏ chỉđơn giản làm cho người sử dụng khơng thể nhìn thấy mục trình đơn
3.3 Sắp xếp lại mục đơn trình đơn
Để xếp lại mục trình đơn, ta tiến hành chèn gỡ bỏ mục trình đơn có trật tự mà mong muốn
Chuyển trình đơn đầu xuống cuối trình đơn
Ví dụ sau xóa mục trình đơn, sau chèn vào vị trí cuối trình đơn
Sub Ch6_MoveMenu()
‘ Định nghĩa biến để lưu mục trình đơn cần di chuyển Dim moveMenu As AcadPopupMenu
Dim MyMenuBar As AcadMenuBar
Set MyMenuBar = ThisDrawing.Application.menuBar
‘ Đặt biến moveMenu mục trình đơn hiển thị
trong trình đơn trình đơn Set moveMenu = MyMenuBar.Item(0)
‘ Dỡ bỏ mục trình đơn MyMenuBar.Item(0).RemoveFromMenuBar
‘ Thêm trình đơn trở lại trình đơn vào vị trí lúc trước moveMenu.InsertInMenuBar (MyMenuBar.count)
(7)
4 Tạo hiệu chỉnh trình đơn kéo xuống trình
đơn tắt
AutoCAD ActiveX/VBA có khả hiệu chỉnh hai loại trình đơn AutoCAD: trình đơn kéo xuống1 trình đơn tắt (shortcut menu) Cả hai loại trình đơn hiển thị dạng xếp lớp Trình đơn tắt cho phép truy cập nhanh chóng đến mục trình đơn sử dụng nhiều nhất, chẳng hạn chế độ bắt đối tượng Một trình đơn kéo xuống chứa đến 999 mục, cịn trình đơn tắt chứa tối đa 499 mục Các giới hạn tính bao gồm trình đơn có cấu trúc nhiều tầng Nếu số mục trình đơn vượt giới hạn này, AutoCAD bỏ qua mục vượt Nếu trình đơn kéo xuống hay trình đơn tắt có chiều cao lớn khoảng khơng cho phép hình rút gọn cho vừa vặn
Các trình đơn kéo xuống ln kéo xuống từ trình đơn, cịn trình đơn tắt ln ví trí gần vị trí trỏ chuột hình đồ họa Cách sử dụng hai loại trình đơn giống ngoại trừ điểm tên trình đơn tắt khơng nằm trình đơn thực tế tên chẳng hiển thị đâu Muốn truy cập vào trình đơn tắt, ta phải thơng qua trình đơn nhóm trình đơn sở Ta xác lập trình đơn tắt cách sử dụng thuộc tính ShortcutMenu Nếu thuộc tính ShortcutMenu trả giá trị TRUE, trình đơn trở thành trình đơn tắt
4.1 Tạo trình đơn mới
Để tạo trình đơn mới, sử dụng phương thức Add để thêm đối tượng PopupMenu vào tập đối tượng PopupMenu
Để tạo trình đơn tắt mới, ta phải xố trình đơn tắt có Chỉ có trình đơn tắt cho nhóm trình đơn Nếu khơng có trình đơn tắt khác nhóm trình đơn, ta thêm trình đơn với tên “POP0” Thao tác thơng báo cho AutoCAD biết muốn tạo trình đơn tắt
Khi dùng phương thức Add, ta cần phải nhập tên (nhãn) trình đơn cần thêm Tên trở thành tiêu đề cho trình đơn tải lên trình đơn Tên trình đơn phương tiện để xác định trình đơn nhóm cách dễ dàng
Tên trình đơn chuỗi ký tự đơn chứa mã đặc biệt Để biết danh sách đầy đủ mã đặc biệt, xem “Tóm tắt cú pháp tên trình
đơn kéo xuống trình đơn tắt” trang 99 tài liệu “AutoCAD Customization Guide”
1 Trình đơn kéo xuống (Pull-down menu): loại trình đơn được kéo xuống từ trình đơn
(8)Ta thay đổi tên trình đơn tạo Để thay đổi tên trình đơn tồn tại, ta sử dụng thuộc tính Name trình đơn
Tạo PopupMenu
Ví dụ sau tạo popup menu có tên “TestMenu” nhóm trình đơn tập đối tượng nhóm trình đơn
Sub Ch6_CreateMenu()
Dim currMenuGroup As AcadMenuGroup Set currMenuGroup =
ThisDrawing.Application.MenuGroups.Item(0) ‘ Tạo trình đơn
Dim newMenu As AcadPopupMenu
Set newMenu = currMenuGroup.Menus.Add("TestMenu") End Sub
4.2 Thêm mục mới vào một trình đơn
Để thêm mục vào trình đơn, ta sử dụng phương thức AddMenuItem Phương thức tạo mục PopupMenu thêm vào trình đơn định Phương thức AddMenuItem cần nhập bốn tham số sau: Index(), Label(), Tag() Macro()
4.2.1.Chỉ số (Index)
Tham số Index số nguyên xác định vị trí mục bên trình đơn Chỉ số bắt đầu với vị trí khơng (0), vị trí trình đơn sau tiêu đề Để thêm mục vào cuối trình đơn, ta gán tham số Index giá trị thuộc tính Count trình đơn (Thuộc tính Count trình đơn tổng số mục có trình đơn đó.)
tên trình đơn
Trên hình này, ta thấy số vị trí 0, vạch ngăn cách tính mục trình đơn với số riêng (index 4) Đặc tính Count trình đơn Để thêm mục vào hai mục Tile Horizonally Tile Vertically, ta đặt Tham biến Index 2, nghĩa số mục Tile Vertically Thao tác chèn mục vào vị trí số đẩy tồn mục cịn lại xuống số
(9)4.2.2. Nhãn (Label)
Nhãn chuỗi ký tự xác định nội dung định dạng mục trình đơn Nhãn mục trình đơn chứa chuỗi DIESEL mà tuỳ trường hợp thay hiển thị Để biết thêm chi tiết cách sử dụng chuỗi DIESEL, xem “Chuỗi DIESEL trình đơn” trang 12 tài liệu “AutoCAD Customization Guide”
Bên cạnh chuỗi DIESEL, nhãn chứa mã đặc biệt Chẳng hạn, ký tự “&” đặt trước ký tự ám ký tự phím tắt Để biết danh sách đầy đủ mã đặc biệt, xem “Tóm tắt cú pháp tên trình đơn kéo xuống trình đơn tắt” trang 99 tài liệu “AutoCAD Customization Guide”
Những chữ mà người dùng nhìn thấy mục trình đơn gọi tiêu đề, rút từ nhãn thông qua việc đọc hiểu tất chuỗi DIESEL mã đặc biệt chứa nhãn Chẳng hạn, nhãn “&Edit” hiển thị tiêu đề “Edit”
Sau tạo mục trình đơn, ta thay đổi nhãn mục thơng qua thuộc tính Label mục trình đơn
4.2.3. Thẻ (Tag)
Thẻ chuỗi gồm chữ, số dấu gạch (_) Chuỗi giá trị dùng để xác định mục trình đơn
Sau tạo mục trình đơn, ta dử dụng thuộc tính Tag để thay đổi thẻ mục trình đơn
4.2.4. Macro
Macro loạt lệnh nhằm thực thao tác cụ thể người dùng chọn mục trình đơn Macro trình đơn đơn giản số thao tác bàn phím lưu lại để thực nhiệm vụ chúng kết hợp phức tạp lệnh, AutoLISP, DIESEL mã chương trình ActiveX Để biết thêm chi tiết Macro trình đơn, xem “Macro trình đơn” trang 82 tài liệu “AutoCAD Customization Guide”
Sau tạo mục trình đơn, ta thay đổi macro thơng qua đặc tính Macro mục trình đơn
Thêm mục vào Popup Menu
Dưới ví dụ tạo trình đơn có tên “TestMenu” chèn mục vào Mục trình đơn có tên “Open”, Macro mục thực lệnh OPEN
Sub Ch6_AddAMenuItem()
Dim currMenuGroup As AcadMenuGroup Set currMenuGroup =
ThisDrawing.Application.MenuGroups.Item(0) ’ Tạo trình đơn
Dim newMenu As AcadPopupMenu
Set newMenu = currMenuGroup.Menus.Add("TestMenu") ’ Thêm mục vào trình đơn
Dim newMenuItem As AcadPopupMenuItem Dim openMacro As String
(10)openMacro = Chr(3) + Chr(3) + Chr(95) + "open" + Chr(32) Set newMenuItem = newMenu.AddMenuItem _
(newMenu.count + 1, "Open", openMacro) ’ Hiển thị trình đơn
newMenu.InsertInMenuBar _
(ThisDrawing.Application.menuBar.count + 1) End Sub
4.3 Thêm vạch ngăn vào một trình đơn
Để thêm vạch ngăn vào trình đơn, ta sử dụng phương thức AddSeparator Phương thức tạo đối tượng PopupMenuItem thêm vào trình đơn định Loại đối tượng PopupMenuItem gán kiểu acSeparator Thuộc tính Type quy định kiểu mục trình đơn
Phương thức AddMenuItem cần nhập tham số Index Tham số Index số nguyên xác định vị trí vạch phân cách trình đơn Chỉ số 0, vị trí trình đơn sau phần tiêu đề
Xem “Kích hoạt vơ hiệu hố mục trình đơn”, trang 188 để xem thêm ví dụ thêm vạch phân cách vào trình đơn
4.4 Gán phím tắt cho một mục trình đơn
Để gán phím tắt cho mục trình đơn AutoCAD ActiveX/VBA, ta sử dụng thuộc tính Label mục trình đơn Để xác định phím tắt, chèn ký tự ASCII tương ứng với ký hiệu “&” trước ký tự sử dụng làm phím tắt Chẳng hạn, nhãn Chr(Asc(“&”)) + “Edit” hiển thị Edit, với ký tự E phím tắt Có nhiều phương pháp khác để tạo phím tắt cho trình đơn lệnh AutoCAD mà khơng có AutoCAD ActiveX/VBA Để biết thêm chi tiết, xem thêm mục “Phím tắt” tài liệu “AutoCAD Customization Guide”
Thêm phím tắt vào trình đơn
Sau ví dụ lặp lại ví dụ “Thêm mục vào Popup Menu”, ta thêm phím tắt cho hai trình đơn “TestMenu” “Open” Chữ “s” dùng làm phím tắt cho “TestMenu” cịn “O” phím tắt “Open”
Sub Ch6_AddAMenuItem()
Dim currMenuGroup As AcadMenuGroup Set currMenuGroup =
ThisDrawing.Application.MenuGroups.Item(0) ’ Tạo trình đơn
Dim newMenu As AcadPopupMenu
Set newMenu = currMenuGroup.Menus.Add _ ("Te" + Chr(Asc("&")) + "stMenu") ’ Thêm mục vào trình đơn
Dim newMenuItem As AcadPopupMenuItem Dim openMacro As String
’ Gán lệnh "ESC ESC _open "
openMacro = Chr(3) + Chr(3) + Chr(95) + "open" + Chr(32) Set newMenuItem = newMenu.AddMenuItem _
(newMenu.count + 1, Chr(Asc("&")) _ + "Open", openMacro)