1 đính kèm
Tạo menu trên AutoCAD bằng VBA + AutoLisp
Bài viết này, mình xin hướng dẫn các bạn mới làm quen với VBA (trên Autocad) thực hiện làm một ứng dụng nhỏ nhưng rất quan trong và cần thiết là "tạo thêm Menu trên Menu Bar của AutoCAD" để thực người dùng sử dụng ứng của mình.
Bài viết hướng dẫn ko quá chi tiết (dùng cho người đã biết cơ bản về VBA rồi).
Đầu tiên, các bạn mở trình soạn thảo Visual Basic Editor (Alt + F11), chọn Insert -> Modules để tạo 1 Modules mới (bạn có thể đổi tên Mudules này thành là Menu).
Trong phần viết code của Modules bạn viết đoạn code sau:
Code:
Sub TaoMenu()
Dim currMenuGroup As AcadMenuGroup
Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)
Dim newMenu As AcadPopupMenu
On Error Resume Next
Set newMenu = currMenuGroup.Menus.Add("My Program")
If Err <> 0 Then
Set newMenu = currMenuGroup.Menus("My Program")
Dim menuEnt As AcadPopupMenuItem
For Each menuEnt In newMenu
menuEnt.Delete
Next
End If
Dim newMenuItem As AcadPopupMenuItem
Dim openMacro As String
openMacro = "-vbarun SubMenu1 "
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Sub Menu 1", openMacro)
openMacro = "-vbarun SubMenu2 "
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Sub Menu 2", openMacro)
openMacro = "-vbarun SubMenu3 "
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Sub Menu 3", openMacro)
currMenuGroup.Menus.InsertMenuInMenuBar "My Program", ""
End Sub
Sub SubMenu1()
MsgBox "Sub Menu 1"
End Sub
Sub SubMenu2()
MsgBox "Sub Menu 2"
End Sub
Sub SubMenu3()
MsgBox "Sub Menu 3"
End Sub
Trong đó My Program là Menu cấp 1 khi hiển thị nhìn thấy luôn trên Menu Bar của AutoCAD còn các Sub Menu là các Menu con, là danh sách lựa chọn khi mình di chuột đến Menu My Progam. Ở đây mình làm ví dụ 3 Menu con, khi chọn Sub Menu 1 sẽ gọi đến và thưc hiện thủ tục SubMenu1, tương tự với Sub Menu 2 và 3 .. Bạn có thể sửa lại để phù hợp với mục đích và yêu cầu của bạn.
Sau đó, bạn lưu lại phần code bạn vừa tạo file *.dvb (ví dụ là InsertMenu.dvb) vào vị trí nào đó trong ổ cứng. Để AutoCAD luôn load ứng dụng này khi khởi động các bạn vào menu: Tools -> Load Aplication (hoặc gõ lệnh AP trong Command Line trong AutoCAD) -> bảng Load/Unload hiện ra -> vào phần Startup Suite -> chọn Contents -> cửa sổ Start Suite hiện ra -> nhấn vào nút Add -> chọn đường dẫn đến file ứng dụng InsertMenu.dvb -> tiếp tục nhấn vào nút Add và Close để đóng cửa số đó lại.
Phần còn lại cần phải giải quyết là làm sao AutoCAD tự động thực hiện ứng dụng của mình để sinh ra cái menu đó mà mình ko cần thao tác chạy ứng dụng? Vấn đề này có thể giải quyết bằng cách các bạn tìm đến thư mục cài đặt AutoCAD xem có file acad.lsp không? Nếu không có các bạn có thể dùng Nopate để tạo ra file này (lưu lại ở thu mục cài đặt AutoCAD). Sau đó chèn thêm dòng code nhỏ xíu :
Code:
(command "-vbarun" "TaoMenu")
(Cách khác là bạn tạo ra 1 file AutoLisp với tên bất kỳ, rồi chèn dòng code trên vào, sau đó dùng chức năng Startup Suite như đã trình bày ở trên để AutoCAD tự động mời file đó vào làm việc khi khởi động).
Như vậy khi AutoCAD khởi động sẽ gọi file AutoLisp acad.lsp, rồi chạy dòng lệnh (command "-vbarun" "TaoMenu") để chạy thủ tục TaoMenu (đã được load).
Bây giờ bạn tắt AutoCAD đi và mở lại thì điều kỳ diệu là Menu My Program đã được hiện ra trên Menu Bar của AutoCAD.
Chúc các bạn tạo được nhiều ứng dụng hữu ích bằng VBA trên AutoCAD.