Tạo menu trên AutoCAD bằng VBA và AutoLisp

freeway2207

Thành viên sắp được phong Thành viên Năng động
Tham gia
18/2/11
Bài viết
37
Điểm thành tích
8
Tuổi
38
Tạo menu trên AutoCAD bằng VBA và 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:
Mã:
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 :
Mã:
(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.
eeb232601a05cf1225cbd7087181803a2587f4278df6e67e3d4568bc3d13cb6b4g.jpg

Chúc các bạn tạo được nhiều ứng dụng hữu ích bằng VBA trên AutoCAD.
 

File đính kèm

  • Menu AutoCad.zip
    5,9 KB · Đọc: 873

tienthanhza

Thành viên mới
Tham gia
26/7/11
Bài viết
1
Điểm thành tích
1
Tuổi
23
Cám ơn bạn về bài viết này. rất là ý nghĩa. bạn có thể cho mình hỏi làm thế nào mà khi ta chọn lệnh trong menu mình đã đặt có thể xuất hiện lệnh mà mình đã kích vào đó không.
 

freeway2207

Thành viên sắp được phong Thành viên Năng động
Tham gia
18/2/11
Bài viết
37
Điểm thành tích
8
Tuổi
38
Cám ơn bạn về bài viết này. rất là ý nghĩa. bạn có thể cho mình hỏi làm thế nào mà khi ta chọn lệnh trong menu mình đã đặt có thể xuất hiện lệnh mà mình đã kích vào đó không.
Mong bạn có thể trình bày rõ hơn ý bạn nói được ko ? Cơ bản phần thực hiện lệnh sau khi chọn trên list menu sẽ được viết trong thủ tục tương ứng. Trong ví dụ của mình, nếu chọn Sub Menu 1 thì sẽ ra lệnh tực thi thủ tục Submenu1 (), khi đó bạn muốn sau khi thực thi chuyện gì thì bạn viết trong thủ tục Submenu1 () thôi.
 

linhvc391

Thành viên mới
Tham gia
23/7/08
Bài viết
2
Điểm thành tích
1
Tuổi
39
Ví dụ mình có 1 file ứng dụng sẵn, tải trên mạng về chẳng hạn, mình đưa ứng dụng đó vào My Program là Menu cấp 1 được ko?
 

Tải bộ cài phần mềm Dự toán GXD, Đấu thầu GXD, Thanh Quyết toán GXD, Quản lý chất lượng GXD. Dành cho người mua bản quyền
Kích để xem khóa học Dự toán công trình
Kích để xem khóa học Dự toán công trình
Phần mềm quản lý chất lượng công trình QLCL GXD
Tìm hiểu khóa học Thanh Quyết toán GXD

Các bài viết mới

Top