1. Trang chủ
  2. » Vật lý

Phát triển AutoCAD bằng ActiveX & VBA - Chương 7: Làm việc với các sự kiện

7 14 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 562,99 KB

Nội dung

Public WithEvents ACADApp As AcadApplication Sub Example_AcadApplication_Events().[r]

(1)

L

LÀÀMM VVIICC VVII CCÁÁCC SS KKIINN

7

Trong chương này

ƒ Khái niệm kiện trong AutoCAD

ƒ Chỉ dẫn xây dựng xử lý kiện

ƒ Xử lý kiện mức ứng dụng

ƒ Xử lý kiện mức vẽ

ƒ Xử lý kiện mức đối tượng

Các kiện chẳng hạn thông báo thông

điệp AutoCAD, dùng để thông báo tới người dùng trạng thái phiên làm việc

(2)

1 Khái nim v s kin AutoCAD

Trong AutoCAD có loại kiện:

ƒ Các kiện mức ứng dụng sẽđáp ứng lại thay đổi ứng dụng AutoCAD mơi trường bao gồm: mở, lưu, đóng in vẽ, tạo vẽ mới, sử dụng dòng lệnh, tải dỡ bỏ ứng dụng ARX AutoLISP, thay đổi biến hệ thống thay đổi cửa sổ ứng dụng

ƒ Các kiện mức vẽ sẽđáp ứng lại thay đổi vẽ

hoặc bên bao gồm: thêm, xố thay đổi đối tượng, kích hoạt trình đơn tắt, thay đổi tập lựa chọn, thay đổi cửa sổ vẽ trình tái tạo vẽ Ngồi có số kiện

mức đáp ứng lại với việc mở, đóng in vẽ, tải dỡ bỏ

ứng dụng ARX AutoLISP từ vẽ

ƒ Các kiện mức đối tượng đáp ứng lại thay đổi đối tượng cụ

thể Hiện có kiện mức này, gọi

đối tượng bị thay đổi

Các hàm đáp ứng lại kiện gọi xử lý kiện thực cách tựđộng kiện tương ứng gọi Các thông tin chứa

kiện, ví dụ tên vẽ kiện BeginOpen, chuyển vào xử lý

kiện thông qua tham số

2 Ch dn xây dng b x lý s kin

Điều quan trọng cần lưu ý kiện đơn giản cung cấp thông tin dựa trạng thái hoạt động diễn AutoCAD Mặc dù xử lý kiện có thểđược viết để đáp ứng lại kiện đó, AutoCAD lại nằm bên q trình xử lý xử lý kiện gọi Do xử lý kiện thường có hạn chế tác vụ thực nhằm đảm bảo

an toàn cho thao tác tác động đến AutoCAD sở liệu ƒ Khơng nên dựa vào trình tự kiện

Khi viết xử lý kiện ta khơng nên dựa vào trình tự xảy

kiện theo suy nghĩ Ví dụ: sử dụng lệnh OPEN, kiện BeginCommand, BeginOpen, EndOpen EndCommand thực Tuy nhiên, chúng khơng xảy theo trật tựđó Trình tự kiện sử dụng cách an toàn kiện Begin xảy trước

kiện End tương ứng Trong ví dụ trước, kiện có thểđược xảy theo trình tự sau: BeginCommand – BeginOpen – EndCommand – EndOpen BeginCommand – EndCommand – BeginOpen – EndOpen

ƒ Khơng nên dựa vào trình tự thao tác xử lý

Nếu ta xoá đối tượng đốí tượng 2, khơng nên cho

kiện ObjectErased cho đối tượng phát sinh trước sau cho đối tượng 2, thực tế, ta nhận kiện đối tượng trước

(3)

Cố gắng thực hàm tương tác xử lý kiện dẫn đến nhiều rắc rối nghiêm trọng, AutoCAD tiếp tục thực câu lệnh vào thời điểm mà kiện bắt đầu Vì vậy, nên tránh sử

dụng phương thức đòi hỏi phải nhập liệu, ví dụ GetPoint, GetEntity, GetKeyword… thao tác chọn đối tượng phương thức SendCommand xử lý kiện

ƒ Không nên gọi hộp thoại xử lý kiện

Hộp thoại coi hàm tương tác, cản trở thao tác sử

dụng AutoCAD Tuy nhiên hộp thông báo cảnh báo coi khơng có tương tác sử dụng cách an tồn

ƒ Ta ghi liệu vào sở liệu bất cứđối tượng ngoại trừ đối tượng phát sinh kiện

Một cách hiển nhiên bất cứđối tượng làm phát sinh kiện

được xử lý mởđể sử dụng AutoCAD thao tác tiến hành Do nên tránh việc ghi thông tin cho

đối tượng từ xử lý kiện đối tượng Tuy nhiên, ta đọc thơng tin cách an tồn từđối tượng phát sinh kiện Ví dụ: ta có sàn nhà lát gạch có xử lý kiện đính kèm với

đường biên sàn nhà Nếu ta thay đổi kích thước sàn nhà xử lý

kiện tựđộng cộng trừ viên gạch để phủ kín diện tích sàn Bộ xử lý kiện đọc diện tích đường biên khơng thể thay đổi thứ biên

ƒ Không nên thực thao tác từ xử lý kiện mà làm phát sinh kiện

Nếu ta thực thao tác xử lý kiện mà làm phát sinh kiện tạo vịng lặp vơ hạn Ví dụ người dùng không nên cố gắng mở vẽ bên kiện BeginOpen, không AutoCAD tiếp tục mở thêm nhiều vẽ khác đạt đến số

lượng vẽđược mở lớn

ƒ Lưu ý khơng có kiện thực AutoCAD hiển thị hộp thoại kiểu Modal1

3 X lý s kin mc ng dng

Các kiện mức ứng dụng khơng trì liên tục AutoCAD VBA, tức chúng không phép hoạt động cách tự động tải dự án VBA Do vậy, kiện cần kích hoạt VBA tất điều khiển ActiveX Automation

(4)

Một kiện mức ứng dụng kích hoạt, có nhiều kiện mà ta

sử dụng, bao gồm:

Sự kiện Tình

AppActivate Gọi đến trước cửa sổ ứng dụng

kích hoạt

AppDeactivate Gọi đến trước cửa sổ ứng dụng bỏ kích

hoạt

ARXLoaded Gọi đến ứng dụng ObjectARX tải vào

ARXUnloaded Gọi đến ứng dụng ObjectARX dỡ

BeginCommand Gọi đến sau câu lệnh sử dụng trước

khi hoàn thành

BeginTệpDrop Gọi đến tệp bị dỡ khỏi ứng dụng

BeginLISP Gọi đến sau AutoCAD nhận yêu cầu tính

biểu thức LISP

BeginModal Gọi đến trước modal dialog

BeginOpen Gọi đến sau AutoCAD nhận yêu cầu mở tệp

đã có

BeginPlot Gọi đến sau AutoCAD nhận yêu cầu in

bản vẽ

BeginQuit Gọi đến trước phiên làm việc AutoCAD

kết thúc

BeginSave Gọi đến sau AutoCAD nhận yêu cầu lưu

một vẽ

EndCommand Gọi đến sau câu lệnh hồn thành

EndLISP Gọi đến hồn thành tính toán biểu thức LISP

EndModal Gọi đến sau hộp thoại bịđóng

EndOpen Gọi đến sau AutoCAD kết thúc mở vẽđã

EndPlot Gọi đến sau tài liệu gửi đến máy in

EndSave Gọi đến sau AutoCAD kết thúc lưu vẽ

LISPCancelled Gọi đến sau việc tính tốn biểu thức LISP bị

dừng lại

NewDrawing Gọi đến trước tạo vẽ

SysVarChanged Gọi đến giá trị biến hệ thống bị thay đổi

WindowChanged Gọi đến có thay đổi cửa sổứng dụng

WindowMovedOrResized Gọi đến sau cửa sổ ứng dụng dich

(5)

3.1 Kích hot s kin mc ng dng

Trước sử dụng kiện mức ứng dụng người dùng phải tạo lớp khai báo đối tượng có kiểu AcadApplication với kiện Ví dụ, giả

sử có lớp tạo gọi EventClasssModule, lớp chứa khai báo ứng dụng với từ khoá VBA WithEvents

Để tạo lớp khai báo đối tượng Application với kiện:

1 Trong VBA IDE, để thêm lớp: Insert ˜ClassModule 2 Chọn lớp tạo cửa sổ Project

3 Đổi tên lớp cửa sổ Properties thành EventClassModule

4 Mở cửa sổ Code lớp cách bấm phím F7 lựa chọn: View ˜Code 5 Trong cửa sổ Code lớp thêm dòng lệnh sau:

Public WithEvents App As AcadApplication

Sau đối tượng khai báo với kiện, xuất hộp danh sách Object lớp người dùng viết thủ tục kiện cho đối tượng lớp (Khi lựa chọn đối tượng hộp Object,

kiện có hiệu lực đối tượng có hộp danh sách Procedure) Tuy nhiên, trước thủ tục thực ta phải kết nối đối tượng

được khai báo lớp với đối tượng Application Dưới đoạn mã mà ta chèn vào mơđun để thực việc kết nối

Để kết nối đối tượng khai báo với đối tượng Application

1 Trong cửa sổ Code mơđun chính, thêm dòng lệnh sau phần khai báo:

Dim X as New EventClassModule

2 Trong cửa sổđó thêm vào thủ tục:

Sub InitializEvent()

Set X.App= ThisDrawing.Application End Sub

3 Trong phần mã mơđun chính, thêm lời gọi thủ tục InitalizeApp

Call InitializEvents

Khi thủ tục InitializEvents thực đối tượng App lớp trỏ đến đối tượng Application định thủ tục kiện lớp chạy kiện xảy

Lời nhắc tiếp tục vẽđược thả vào AutoCAD

Ví dụ chặn lại trình tải tệp kéo thả vào AutoCAD Khi

đó, có hộp thoại thơng báo gồm tên tệp, nút lệnh Yes/No/Cancel cho phép người dùng định xem có tiếp tục tải tệp hay khơng Nếu người dùng lựa chọn khỏi thao tác, định sẽđược thực nhờ việc trả thông sốCancel kiện BeginFileDrop tệp khơng tải

(6)

’ Ví dụ khởi tạo biến tồn cục (ACADApp)

’ biến sử dụng để chặn kiện AcadApplication ’ Chạy thủ tục trước tiên!

’ Có thể gọi ứng dụng từ đối tượng ThisDocument, ’ yêu cầu có vẽ mở

’ nên vẽ lấy từ hệ thống

Set ACADApp = GetObject(, "AutoCAD.Application") End Sub

Private Sub ACADApp_BeginTệpDrop _

(ByVal FileName As String, Cancel As Boolean)

’ Ví dụ chặn kiện BeginFileDrop ứng dụng ’ Sự kiện bắt đầu vẽ kéo vào AutoCAD

’ Để bắt đầu cho ví dụ này:

’ 1) Phải chạy ví dụ khởi tạo trước, ví dụ biến ’ tồn cục ACADApp liên kết với kiện ’ 2) Kéo tệp vẽ AutoCAD vào chương trình AutoCAD ’ từ Windows Desktop từ Windows Explorer

’ Sử dụng biến "Cancel" để dừng việc tải tệp ’ biến "TệpName" để thông báo cho người dùng ’ tệp thả vào

If MsgBox("AutoCAD is about to load " & FileName & vbCrLf _ & "Do you want to continue loading this file?", _ vbYesNoCancel + vbQuestion) <> vbYes Then

Cancel = True End If

End Sub

4 X lý s kin mc bn v

Các kiện mức vẽ ln trì liên tục VBA AutoCAD, nghĩa chúng tựđộng kích hoạt tải dự án VBA Tuy nhiên, chúng không

được kích hoạt bất cứđiều khiển khác, chẳng hạn VB Do

kiện mức vẽ cần kích hoạt tất điều khiển ActiveX Automation khác

Mỗi kiện mức vẽđược kích hoạt, ta có nhiều kiện để sử dụng, bao gồm:

Sự kiện Tình

Activate Khi cửa sổ bản vẽđược kích hoạt BeginClose Ngay trước vẽđóng lại

BeginCommand Ngay sau một câu lệnh được sử dụng trước

hoàn thành

BeginDoubleClick Sau người dùng nhấn đúp lên đối tượng vẽ

BeginLISP Ngay sau AutoCAD nhận được yêu cầu tính một

biểu thức LISP

(7)

BeginRightClick Sau người dùng nhấp chuột phải lên cửa sổ bản vẽ BeginSave Ngay sau AutoCAD nhận yêu cầu lưu

bản vẽ

BeginShortcutMenuCommand Sau người dùng nhấn chuột phải lên cửa sổ bản vẽ

và trước trình đơn tắt xuất dạng Command

BeginShortcutMenuDefault Sau người dùng nhấn chuột phải lên cửa sổ vẽ

và trước trình đơn tắt xuất dạng Default

BeginShortcutMenuEdit Sau người dùng nhấn chuột phải lên cửa sổ vẽ

và trước trình đơn tắt xuất dạng Edit

BeginShortcutMenuGrip Sau người dùng nhấn chuột phải lên cửa sổ bản vẽ

và trước trình đơn tắt xuất dạng Grip

BeginShortcutMenuOsnap Sau người dùng nhấn chuột phải lên cửa sổ vẽ

và trước trình đơn tắt xuất dạng Osnap

Deactivate Khi cửa sổ bản vẽ thơi kích hoạt EndCommand Ngay sau câu lệnh hoàn thành

EndLISP Khi hoàn thành tính tốn biểu thức LISP

EndPlot Sau một bản vẽđược gửi đến máy in EndSave Khi AutoCAD hoàn thành lưu vẽ

EndShortcutMenu Sau trình đơn tắt xuất

LayoutSwitched Sau người dùng chuyển sang Layout khác LISPCancelled Khi việc tính toán biểu thức LISP bị dừng lại ObjectAdded Khi đối tượng thêm vào vẽ

ObjectErased Khi một đối tượng bị xoá khỏi bản vẽ ObjectModified Khi một đối tượng bản vẽ bị sửa SelectionChanged Khi tập lựa chọn bị thay đổi

WindowChanged Khi có thay đổi cửa sổ vẽ

WindowMovedOrResized Ngay sau cửa sổ bản vẽ dịch chuyển hoặc thay đổi

kích cỡ

4.1 Kích hot s kin mơi trường ngồi VBA

Trước sử dụng kiện mức vẽ môi trường VB mơi trường khác ngồi VBA, ta cần tạo lớp khai báo đối tượng với kiểu AcadDocument với kiện Ví dụ: giả sử tạo lớp có tên EventClassModule, lớp chứa khai báo ứng dụng theo từ khoá WithEvents VBA

Để tạo lớp khai báo đối tượng Document với kiện:

Ngày đăng: 10/03/2021, 13:54

w