Phát triển AutoCAD bằng ActiveX & VBA - Chương 12: Tương tác với ứng dụng khác, cơ sở dữ liệu và Windows API

Công nghệ ActiveX tạo khả năng trao đổi thông tin

một cách dễ dàng với các ứng dụng khác của

AutoCAD và cả các ứng dụng hỗ trợ ActiveX khác

như Microsoft Excel hay Microsoft Word. Nội dung

được đề cập trong chương này là tìm hiểu các thủ tục

cơ bản khi thực hiện tương tác với các ứng dụng

khác.

pdf 8 trang dienloan 2500
Bạn đang xem tài liệu "Phát triển AutoCAD bằng ActiveX & VBA - Chương 12: Tương tác với ứng dụng khác, cơ sở dữ liệu và Windows API", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Phát triển AutoCAD bằng ActiveX & VBA - Chương 12: Tương tác với ứng dụng khác, cơ sở dữ liệu và Windows API

Phát triển AutoCAD bằng ActiveX & VBA - Chương 12: Tương tác với ứng dụng khác, cơ sở dữ liệu và Windows API
 Phát triển ứng dụng ActiveX và VBA | 287 
TƯƠNG TÁC VỚI ỨNG DỤNG 
KHÁC, CƠ SỞ DỮ LIỆU VÀ 
WINDOWS API1
12
Trong chương này
ƒ Tương tác với ứng dụng 
Visual LISP 
ƒ Tương tác với ứng dụng 
trên Windows 
ƒ Sử dụng Data Access 
Objects (DAO) để truy 
cập thông tin của cơ sở 
dữ liệu 
ƒ Truy cập hàm Windows 
API từ VBA 
Công nghệ ActiveX tạo khả năng trao đổi thông tin 
một cách dễ dàng với các ứng dụng khác của 
AutoCAD và cả các ứng dụng hỗ trợ ActiveX khác 
như Microsoft Excel hay Microsoft Word. Nội dung 
được đề cập trong chương này là tìm hiểu các thủ tục 
cơ bản khi thực hiện tương tác với các ứng dụng 
khác. 
1 Windows API: Windows Application Programming Interface – tập hợp các chương trình con được 
sử dụng bởi ứng dụng để hướng việc thực thi của ứng dụng đến hệ điều hành Windows. 
 288 | Chương 12: Tương tác với ứng dụng khác, cơ sở dữ liệu và Windows API 
1. Tương tác với ứng dụng Visual LISP 
Ứng dụng Visual LISP có thể truy cập tới tất cả phạm vi của các đối tượng 
ActiveX. Chúng có thể gọi các phương thức của ActiveX, gán và lấy các thuộc tính 
của đối tượng ActiveX. Ngoài ra các ứng dụng Visual LISP cũng có thể gọi các 
Macro VBA qua lệnh VBARUN. 
ActiveX và các ứng dụng VBA có thể thực hiện các ứng dụng Visual LISP thông 
qua phương thức SendCommand để gửi câu lệnh đến dòng lệnh của AutoCAD. 
Để tìm hiểu thêm về truy cập các đối tượng ActiveX thông qua Visual LISP, tham 
khảo trong “Visual LISP Developer’s Guide” 
2. Tương tác với ứng dụng trên Windows 
Công nghệ ActiveX của AutoCAD cho phép trao đổi thông tin một cách dễ dàng 
với các ứng dụng hỗ trợ ActiveX như Microsoft Excel hoặc Microsoft Word. Khả 
năng này cho phép tập hợp, lưu trữ và biểu diễn các thông tin của AutoCAD theo 
các định dạng khác ngoài dạng bản vẽ. Ngoài ra, có thể đọc các thông tin từ các ứng 
dụng khác vào AutoCAD để trực tiếp tạo ra hoặc tác động lên các đối tượng 
AutoCAD. Một ví dụ sử dụng công nghệ này là tạo hoá đơn vật liệu như một bản 
tính Excel từ các đối tượng trong bản vẽ AutoCAD. 
Các chương trước đã hướng dẫn viết mã lệnh sử dụng mô hình đối tượng ActiveX 
của AutoCAD. Việc trao đổi thông tin với các ứng dụng được hỗ trợ ActiveX liên 
quan đến việc tham chiếu tới các mô hình đối tượng ActiveX của ứng dụng khác và 
viết mã lệnh cần thiết để sử dụng các đối tượng của chúng. 
CHÚ Ý Chương này chỉ giới thiệu một cách vắn tắt về khả năng lập trình ứng dụng chéo. 
Những tài liệu về vấn đề này không phải là hướng tập trung của AutoCAD và chúng được 
đề cập trong cả tài liệu của Microsoft cũng như các hướng dẫn lập trình độc lập. Chúng 
cũng được đề cập sâu hơn trong các tài liệu “VBA Foundations for AutoCAD” và “VBA 
Solutions for AutoCAD” của hãng Autodesk. 
Ba bước cơ bản để thực hiện trao đôi thông tin giữa các mô hình đối tượng 
ActiveX: 
1 Tham chiếu đến các mô hình đối tượng ActiveX của các ứng dụng khác. 
Cần biết tên và mối quan hệ giữa các đối tượng trong mô hình đối tượng khác. 
2 Tạo một đại diện của ứng dụng khác 
Bước này sẽ tạo ra đối tượng hợp lệ đại diện cho các đối tượng cơ bản trong mô 
hình đối tượng khác. 
3 Viết mã chương trình sử dụng cả đối tượng của AutoCAD và của ứng dụng 
khác. 
Đây chính là nơi diễn ra quá trình trao đổi dữ liệu. 
 Phát triển AutoCAD bằng ActiveX và VBA | 289 
2.1. Tham chiếu thư viện đối tượng ActiveX của ứng dụng 
khác 
Để lập trình truy cập tới một ứng dụng khác cần chỉ ra cho VBA cách tạo ra các đối 
tượng có thể sử dụng của ứng dụng đó. Việc này được thiết lập bằng cách tạo ra 
một tham chiếu tới thư viện đối tượng của nó. Đó là một tệp trong máy tính nơi 
định nghĩa tất cả các đối tượng, phương thức, thuộc tính, hằng số cũng như các sự 
kiện của ứng dụng. 
Tạo tham chiếu tới thư viện đối tượng trong VBA IDE, chọn menu 
Tools˜References: 
Hộp thoại xuất hiện chứa danh sách liệt kê các thư viện đối tượng mà VBA tìm thấy 
trong hệ thống. Đánh dấu vào thư viện cần sử dụng trong danh sách, khi đó các thư 
viện được lựa chọn đã sẵn sàng cho việc tham chiếu của dự án hiện hành. Ví dụ, để 
tham chiếu thư viện đối tượng của Microsoft Excel, chọn thư viện đối tượng 
Microsoft Excel trong danh sách như hình minh hoạ trên. 
Khi đã tạo một tham chiếu đến thư viện đối tượng của một ứng dụng khác thì có thể 
sử dụng Object Browser của VBA để xem danh sách các đối tượng của ứng dụng. 
CHÚ Ý Phải thiết lập tham chiếu cho mỗi dự án VBA có sử dụng mô hình đối tượng này vì 
việc thiết lập các tham chiếu sẽ không được thực hiện tự động cho bất cứ dự án nào. Điều 
này là do hiệu suất của chương trình. 
 290 | Chương 12: Tương tác với ứng dụng khác, cơ sở dữ liệu và Windows API 
2.2. Tạo đại diện1 của ứng dụng 
Khi muốn tham chiếu đến thư viện đối tượng của ứng dụng, ta phải tạo ra một đại 
diện của ứng dụng đó. Đây chỉ là việc thông báo rằng ta bắt đầu làm việc với ứng 
dụng bằng một biến đối tượng cụ thể. 
Để thực hiện điều này, trước hết cần khai báo một biến sẽ đại diện cho ứng dụng 
bằng cách sử dụng lệnh Dim và chỉ rõ ứng dụng trong khai báo đó. Ví dụ sau khai 
báo biến đối tượng kiểu Excel.Application: 
Dim ExcelAppObj as Excel.Application 
Sau khi khai báo biến, sử dụng lệnh Set và từ khoá New để gán biến bằng một đại 
diện đang thực thi của ứng dụng. Ví dụ sau, câu lệnh Set sẽ gán biến được khai 
báo ở trên cho ứng dụng Excel, từ khoá New khởi động một phiên làm việc mới của 
Excel. 
Set ExcelAppObj = New Excel.Application 
CHÚ Ý Một vài ứng dụng cho phép chỉ có một đại diện của nó được thực thi tại một thời 
điểm. Sử dụng từ khoá New đối với ứng dụng đó sẽ thiết lập một tham chiếu tới đại diện 
của nó và sẽ không khởi động thêm một đại diện mới nữa. 
2.3. Lập trình với các đối tượng của ứng dụng khác 
Sau khi đã tạo tham chiếu đến thư viện đối tượng và tạo một đại diện mới của ứng 
dụng thì ta mới có thể tạo ra và thao tác với các đối tượng trong ứng dụng đó. Tất cả 
các đối tượng, phương thức và thuộc tính được định nghĩa bởi mô hình đối tượng 
đều sẵn sàng sử dụng. Ví dụ, dùng biến được khai báo từ phần trước, dòng mã lệnh 
dưới đây sẽ hiển thị chương trình Excel: 
ExcelAppObj.Visible = TRUE 
Để có thể lập trình xây dựng ứng dụng ta cần thông thạo mô hình đối tượng của ứng 
dụng, ngoài ra ta có thể sử dụng Object Browser của VBA hoặc tài liệu trợ giúp của 
ứng dụng để tìm hiểu về mô hình đối tượng cần tham chiếu tới. 
2.3.1. Thoát khỏi ứng dụng khác 
Khởi động một ứng dụng khi lập trình sẽ làm tăng bộ nhớ của máy tính, do đó nên 
đóng chúng lại khi không sử dụng để tài nguyên của hệ thống được giải phóng. 
Mặc dù mỗi mô hình đối tượng là khác nhau nhưng hầu hết đều có phương thức 
Quit được dùng để đóng ứng dụng. Ví dụ, dòng lệnh sau đây sẽ đóng chương trình 
Excel, sử dụng các khai báo biến ở các phần trên: 
ExcelAppObj.Application.Quit 
CHÚ Ý: Việc huỷ hoặc làm vượt quá phạm vi của biến đối tượng thực sự không làm kết 
thúc ứng dụng. Nên thường xuyên thoát khỏi ứng dụng bằng phương pháp thích hợp để 
đảm bảo rằng bộ nhớ được làm sạch đúng cách. 
1 Đại diện (Instance): là một loại biến đối tượng chỉ đến ứng dụng cụ thể được tham chiếu đến mà 
đã được cấp phát bộ nhớ (đang hoạt động). 
 Phát triển AutoCAD bằng ActiveX và VBA | 291 
Liệt kê các thuộc tính của AutoCAD trong bảng tính Excel 
Thủ tục dưới đây thực hiện tìm kiếm các tham chiếu khối trong bản vẽ hiện tại, sau 
đó sẽ tìm các thuộc tính gắn với khối đó và liệt kê chúng trong một bảng tính Excel. 
Trình tự thực hiện 
1 Mở bản vẽ có chứa khối tham chiếu và các thuộc tính gắn với chúng (bản vẽ 
mẫu được dùng có đường dẫn là sample/activeX/attrib.dwg) 
2 Mở VBA IDE bằng dòng lênh VBAIDE của AutoCAD 
3 Trong menu Tools ˜ References, chọn đối tượng Microsoft Excel 11.0 Object 
(hoặc phiên bản khác của đối tượng này) 
4 Sao chép đoạn thủ tục dưới đây vào cửa sổ viết mã lệnh Code của VBA và thực 
hiện nó: 
Sub Ch12_Extract() 
Dim Excel As Excel.Application 
Dim ExcelSheet As Object 
Dim ExcelWorkbook As Object 
Dim RowNum As Integer 
Dim Header As Boolean 
Dim elem As AcadEntity 
Dim Array1 As Variant 
Dim Count As Integer 
’ Khởi động Excel. 
Set Excel = New Excel.Application 
’ Tạo một workbook mới và tìm kiếm bảng tính hoạt động. 
Set ExcelWorkbook = Excel.Workbooks.Add 
Set ExcelSheet = Excel.ActiveSheet 
ExcelWorkbook.SaveAs "Attribute.xls" 
RowNum = 1 
Header = False 
’ Lặp quá trình tìm kiếm trên không gian vẽ tất cả 
’ các tham chiếu khối 
For Each elem In ThisDrawing.ModelSpace 
With elem 
’ Khi một tham chiếu khối được tìm thấy thì nó sẽ được 
’ kiểm tra luôn các thuộc tính 
If StrComp(.EntityName, "AcDbBlockReference", 1)= 0 Then 
If .HasAttributes Then 
’ Lấy giá trị thuộc tính 
Array1 = .GetAttributes 
’ Sao chép Tagstrings của các thuộc tính vào bảng 
Excel 
For Count = LBound(Array1) To UBound(Array1) 
If Header = False Then 
If StrComp(Array1(Count).EntityName, _ 
"AcDbAttribute", 1) = 0 Then 
ExcelSheet.Cells(RowNum,Count + 1).value = _ 
Array1(Count).TagString 
End If 
End If 
Next Count 
RowNum = RowNum + 1 
For Count = LBound(Array1) To UBound(Array1) 
 292 | Chương 12: Tương tác với ứng dụng khác, cơ sở dữ liệu và Windows API 
ExcelSheet.Cells(RowNum, Count + 1).value = _ 
Array1(Count).textString 
Next Count 
Header = True 
End If 
End If 
End With 
Next elem 
Excel.Application.Quit 
End Sub 
3. Sử dụng DAO để truy cập thông tin của cơ sở 
dữ liệu 
Các đối tượng truy cập dữ liệu (DAO - Data Access Objects ) cho phép làm việc với 
các dữ liệu trong một cơ sở dữ liệu nào đó. Đặc biệt là khi sử dụng DAO ta có thể 
truy cập vào bất cứ cơ sở dữ liệu nào được cung cấp bởi Microsoft Jet, bao gồm: 
ƒ Cơ sở dữ liệu Desktop như Access, dBase, FoxPro và Paradox 
ƒ Cơ sở dữ liệu ODBC như Microsoft SQL Server và Oracle® 
DAO tạo điều kiện hoàn thiện điều khiển các cơ sở dữ liệu từ mã lệnh VBA nên ta 
có thể: 
ƒ Tạo một cơ sở dữ liệu mới hoặc thay đổi cấu trúc của một cơ sở dữ liệu cũ 
ƒ Thêm bảng vào cơ sở dữ liệu, định nghĩa quan hệ của các bảng; định nghĩa 
và thi hành các câu truy vấn 
ƒ Thêm, sửa hoặc xoá các bản ghi dữ liệu 
ƒ Bảo mật cơ sở dữ liệu 
Có 3 bước cơ bản để sử dụng được DAO trong lập trình VBA 
1 Tham chiếu đến thư việc đối tượng DAO của Microsoft (Microsoft DAO Object 
Library). 
2 Mở cơ sở dữ liệu mà ta muốn làm việc, điều này sẽ tạo một thể hiện của đối 
tượng DAO. 
3 Viết mã lệnh sử dụng cả mô hình đối tượng AutoCAD và mô hình đối tượng 
DAO. 
CHÚ Ý Chương này cung cấp những giới thiệu vắn tắt về khả năng lập trình với DAO. 
Những tài liệu về vấn đề này không phải là hướng tập trung của AutoCAD và chúng được 
đề cập trong tài liệu của Microsoft cũng như các hướng dẫn lập trình độc lập khác. Chúng 
cũng được đề cập sâu hơn trong các tài liệu “VBA Foundations for AutoCAD” và “VBA 
Solutions for AutoCAD” của hãng Autodesk. 
3.1. Tham chiếu thư viện đối tượng DAO 
Để viết mã lệnh truy cập DAO ta cần chỉ dẫn cho VBA tạo ra đối tượng trong DAO 
đã sẵn sàng làm việc, bằng cách tạo một tham chiếu đến thư viện đối tượng của 
DAO. 
 Phát triển AutoCAD bằng ActiveX và VBA | 293 
Tạo một tham chiếu đến thư viện đối tượng của ứng dụng khác 
1 Trong VBA IDE, mở menu Tools ˜ References 
2 Tìm và lựa chọn mục Microsoft DAO Object Library 
3 Chọn OK để đóng hộp thoại và cập nhật sự thay đổi. 
Khi đã tạo được tham chiếu đến thư viện đối tượng của DAO, ta có thể sử dụng 
VBA Object Browser để nhìn thấy tất cả các đối tượng trong thư viện đối tượng của 
DAO. 
CHÚ Ý: Phải gán tham chiếu cho mỗi dự án VBA có sử dụng mô hình đối tượng này vì 
việc thiết lập các tham chiếu sẽ không được thực hiện tự động cho bất cứ dự án nào. Điều 
đó là vì lý do hiệu suất của các chương trình. 
3.2. Mở cơ sở dữ liệu 
Để có thể làm việc với dữ liệu trong một cơ sở dữ liệu, ta cần mở cơ sở dữ liệu đó 
bằng VBA. Phương thức để mở cơ sở dữ liệu là OpenDatabase của đối tượng 
Workspace mặc định trong mô hình đối tượng DAO. Dòng mã lệnh dưới đây sẽ mở 
cơ sở dữ liệu có tên là X.MDB: 
Dim db As Database 
Set db = DBEngine.Workspaces(0).OpenDatabase("C:\X.MDB") 
Dòng mã lệnh này sẽ tham chiếu đến đối tượng DBEngine và sau đó sẽ tham chiếu 
đến đối tượng Workspace mặc định của DAO. Nó sẽ mở cơ sở dữ liệu trong đối 
tượng Workspace mặc định và gán cơ sở dữ liệu đó cho biến của đối tượng cơ sở dữ 
liệu. 
3.3. Lập trình với mô hình đối tượng của DAO 
Sau khi đã tham chiếu đến thư viện đối tượng DAO, thực hiện tạo và mở một cơ sở 
dữ liệu, thì ta có thể tiến hành truy vấn dữ liệu trong cơ sở dữ liệu. Tất cả các đối 
tượng, phương thức và thuộc tính được định nghĩa bởi mô hình đối tượng DAO đều 
có thể sử dụng. 
Phần lớn thao tác với dữ liệu trong cơ sở dữ liệu sẽ liên quan tới đối tượng 
Recordset của DAO. Đối tượng này thể hiện một tập hợp gồm các hàng được trả về 
bởi một bảng, một truy vấn lựa chọn (bằng đối tượng truy vấn hoặc câu lệnh SQL) 
hoặc bởi một đối tượng Recordset khác. Đây là đối tượng cơ bản khi lập trình với 
dữ liệu và là yếu tố nổi bật nhất trong mã lệnh thao tác với dữ liệu. 
Để tự làm quen và tìm hiểu thêm về mô hình đối tượng DAO, ta có thể sử dụng 
VBA Object Browser hoặc tài liệu hướng dẫn về DAO của Micrsoft. Các tài liệu 
tham khảo về DAO còn bao gồm các mã lệnh ví dụ để giúp cho người học có thể 
bắt đầu được ngay. 
4. Truy cập hàm Windows API từ VBA 
Các thủ tục của Windows API luôn có trong hầu hết các ứng dụng của Windows. 
Chúng cho phép ta có thể mở rộng khả năng cho ứng dụng của mình. 
 294 | Chương 12: Tương tác với ứng dụng khác, cơ sở dữ liệu và Windows API 
Thông qua Windows API, ta có thể lấy được thông tin về hệ thống hiện hành như: 
những chương trình nào được cài đặt hay đang chạy trong hệ thống, thông tin nằm ở 
đâu trong hệ thống và những thiết lập điều khiển nào trong hệ thống hiện hành. 
Ngoài ra ta có thể truy cập được joystick, multimedia1 và điều khiển âm thanh. 
Những khả năng trên chỉ là một phần nhỏ trong các khả năng được cung cấp bởi 
Windows APIs. 
Để sử dụng các thủ tục Windows API, trước hết cần khai báo API trong ứng dụng. 
Thực hiện điều này bằng lệnh Declare trong VB. Lệnh này yêu cầu một số thông 
tin như sau: 
ƒ Tên của thư viện liên kết động (DLL) chứa thủ tục muốn dùng 
ƒ Tên của thủ tục trong thư viện DLL 
ƒ Tên của các thủ tục mà ta muốn dùng trong ứng dụng 
ƒ Các tham số của thủ tục 
ƒ Kiểu giá trị trả về nếu thủ tục được gọi là một hàm 
Câu lệnh khai báo Declare có thể được đặt tại bất cứ đâu trong các mô đun của 
VBA. 
Nếu nó được đặt trong một môđun chuẩn thì nó sẽ sẵn sàng để sử dụng bởi bất cứ 
môđun nào trong ứng dụng, trừ khi nó bị giới hạn phạm vi bởi từ khoá Private. 
Nếu đặt lệnh Declare trong môđun của một lớp hay Form thì chỉ có thể sử dụng 
chúng trong chính môđun đó. Khi một thủ tục được khai báo thì nó có thể được gọi 
như những thủ tục khác trong ứng dụng mà ta đã tạo ra. 
Sử dụng lệnh Declare đúng cách là một kỹ năng khó học, nhưng sử dụng sai thì 
rất dễ và thường dẫn đến những kết quả rất tồi tệ. Để chắc chắn, nên lưu bất cứ 
thông tin nào trong ứng dụng hiện tại trước khi thử lệnh Declare mới. 
Để giúp người học sử dụng lệnh Declare, Microsoft đã cung cấp một tệp liệt kê 
những khai báo thông dụng nhất, gọi là Win32api.txt và được đính kèm với bộ 
chương trình Visual Basic và Office. Người dùng có thể tìm thủ tục cần dùng trong 
tệp này và sao chép lại khai báo đó vào mã lệnh của mình. 
Tài liệu về Microsoft VBA cũng có thêm những thông tin về lệnh Declare và ví 
dụ sử dụng nó. Microsoft API Reference hiện là một phần trong bộ Mircrosoft 
Developer Network CD và cung cấp những tham khảo cho việc sử dụng các thủ tục 
sẵn có trong Windows APIs. Cuốn sách “Visual Basic Programmer’s Guide to the 
Win32 API” của Dan Appleman cũng là một nguồn tài liệu hướng dẫn rất tốt cho 
những người lập trình với Visual Basic. 
1 Joystick: thiết bị ngoài, thường dùng để điều khiển các trò chơi trên máy tính. Multimedia: các 
thiết bị hay ứng dụng phục vụ cho việc giải trí bằng âm thanh và hình ảnh. 

File đính kèm:

  • pdfphat_trien_autocad_bang_activex_vba_chuong_12_tuong_tac_voi.pdf