Phát triển AutoCAD bằng ActiveX & VBA - Chương 6: Tùy biến thanh công cụ và trình đơn

10 13 0
Phát triển AutoCAD bằng ActiveX & VBA - Chương 6: Tùy biến thanh công cụ và trình đơn

Đang tải... (xem toàn văn)

Thông tin tài liệu

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 BBIINN 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 hiu tp đố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á tp đố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 Ti 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 To nhóm trình đơn mi

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 mt mc 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 mt mc khi 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 Sp xếp li mc đơ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 To hiu chnh trình đơn kéo xung trình

đơn tt

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 To trình đơn mi

Để 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 mc mi vào mt 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 vch ngăn vào mt 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 tt cho mt mc 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)

Ngày đăng: 09/03/2021, 05:42

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan