Phát triển AutoCAD bằng ActiveX & VBA - Chương 11: Phát triển ứng dụng bằng VBA
Nhiều công việc trong lập trình không chỉ đơn giản
là làm việc với mô hình đối tượng AutoCAD
ActiveX. Chương này sẽ đề cập tổng quan về cách
tạo các hộp thoại, xử lý lỗi, điều khiển cửa sổ ứng
dụng và phân phối ứng dụng cho người khác.
Lưu ý rằng, tài liệu của Microsoft về VBA sẽ có
thêm nhiều thông tin hơn.
Bạn đang xem tài liệu "Phát triển AutoCAD bằng ActiveX & VBA - Chương 11: Phát triển ứng dụng bằng VBA", để 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 11: Phát triển ứng dụng bằng VBA
Phát triển ứng dụng ActiveX và VBA | 275 PHÁT TRIỂN ỨNG DỤNG BẰNG VBA 11 Trong chương này Một số thuật ngữ trong VBA Làm việc với Form trong VBA Xử lý lỗi Bảo mật mã nguồn chương trình VBA Thực thi Macro từ trình đơn hoặc thanh công cụ Tự động tải dự án VBA Tự động thực thi Macro Tự động mở VBA IDE mỗi khi tải một dự án Làm việc khi không có bản vẽ được mở Phân phối ứng dụng Nhiều công việc trong lập trình không chỉ đơn giản là làm việc với mô hình đối tượng AutoCAD ActiveX. Chương này sẽ đề cập tổng quan về cách tạo các hộp thoại, xử lý lỗi, điều khiển cửa sổ ứng dụng và phân phối ứng dụng cho người khác. Lưu ý rằng, tài liệu của Microsoft về VBA sẽ có thêm nhiều thông tin hơn. 276 | Chương 11: Phát triển ứng dụng bằng VBA 1. Một số thuật ngữ trong VBA Nội dung chương này sẽ mở rộng các kinh nghiệm với VBA. Các khái niệm được nêu ra dưới đây sẽ giúp tìm hiểu và làm việc với môi trường VBA Project Dự án - là tập hợp của các form và các mô-đun được nhóm lại thành một tệp. Module là một nhóm các thủ tục và các hàm thường có liên quan đến nhau. Macro là những hàm và thủ tục có thể dùng chung. Macro thường được thể hiện dưới dạng những thành phần chạy được của Dự án. Dialog box là phương tiện để thể hiện thông tin hoặc tập hợp thông tin khi ứng dụng hoạt động. Form là đối tượng chứa các điều khiển hộp thoại. 2. Làm việc với Form trong VBA Form là các khối cấu tạo cơ bản, trên đó ta có thể thiết kế các các hộp thoại cho các ứng dụng khác nhau. Qua các Form tự tạo, ta có thể cung cấp thông tin cho người dùng, nhận thông tin từ người dùng hoặc người dùng có thể điều khiển các hoạt động của ứng dụng. Form cũng giống như một phông để vẽ, ban đầu chúng hoàn toàn rỗng. Để làm đầy phông đó cần có bảng màu. Trong trường hợp này, bảng màu chính là hộp công cụ điều khiển (Toolbox). Người thiết kế chính là hoạ sỹ, sẽ thực hiện bố trí các điều khiển lấy từ hộp công cụ vào Form với số lượng tuỳ ý. Có thể điều chỉnh các thuộc tính và kích thước của các điều khiển cũng như của Form vào bất cứ lúc nào. Sau cùng sẽ thêm vào các chức năng (viết mã lệnh) cho các điều khiển để Form có thể hoạt động được. Mặc dù Visual Basic hỗ trợ nhiều loại Form khác nhau nhưng VBA chỉ hỗ trợ duy nhất loại UserForm. Điều này có nghĩa là một số loại Form được tạo bởi Visual Basic sẽ không nhập được vào VBA. Phát triển AutoCAD bằng ActiveX và VBA | 277 Các UserForm, được gọi là Form trong tài liệu này, luôn là dạng Modal. Có nghĩa là khi nó xuất hiện trong lúc ứng dụng đang chạy, thì người dùng phải đóng nó lại trước khi muốn thực hiện bất cứ thao tác nào khác nào trong ứng dụng. Điều này sẽ được nói đến kỹ hơn trong phần “Thiết kế chương trình với Modal Form” trang 280. 2.1. Thiết kế và chạy chương trình Khi tạo Form là lúc làm việc trong chế độ thiết kế, ở chế độ đó có thể thực hiện các thao tác sau: Thêm điều khiển vào Form Thay đổi thuộc tính của Form Thay đổi thuộc tính của các điều khiển trên Form Chèn mã lệnh cho các môđun của Form Trong chế độ thiết kế không có bất cứ sự tương tác nào giữa người dùng, giao diện của AutoCAD và Form thiết kế. Khi chạy ứng dụng thì Form sẽ ở chế độ hoạt động. Khi ở chế độ này, ta không thể tạo bất cứ sự thay đổi nào tới Form một cách trực tiếp. Tuy nhiên, khi Form đang được hiển thị trong giao diện sử dụng của AutoCAD, người dùng có thể tương tác với Form như là một phần thông thường trong ứng dụng. 2.2. Tạo Form mới trong Dự án Tạo Form mới trong Dự án 1 Mở cửa sổ Project của VBA IDE và chọn dự án muốn thêm Form mới. 2 Từ menu Insert chọn UserForm. Khi đó một Form trống được tạo ra và thêm vào dự án. 2.3. Thêm điều khiển vào Form Rất dễ dàng để thêm các điều khiển vào Form, bằng cách chọn điều khiển trong hộp công cụ và kéo nó vào Form. Khi điều khiển đã được đặt trên Form, có thể thay đổi vị trí và kích cỡ của nó và có thể sao chép điều khiển đó tuỳ theo ý muốn của người thiết kế. Bên cạnh cách nêu trên, còn có những cách khác để đặt điều khiển vào Form. Thay đổi kích cỡ của điều khiển khi đặt vào Form 1 Chọn điều khiển mong muốn trong hộp công cụ 2 Trên Form, nhấn chuột trái, kéo chuột và sau đó thả ra. Điều khiển lựa chọn sẽ được đặt trên Form và có kích cỡ phụ thuộc vào phạm vi kéo chuột. Đặt nhiều điều khiển giống nhau trên Form 1 Từ hộp công cụ Control, nháy đúp chuột vào điều khiển muốn đặt vào Form. 278 | Chương 11: Phát triển ứng dụng bằng VBA 2 Trên Form, nháy chuột tại vị trí muốn đặt điều khiển. Di chuyển chuột đến một vị trí khác trên Form và nháy chuột lần nữa, một bản sao của điều khiển đó sẽ xuất hiện. Có thể tạo ra nhiều bản sao của điều khiển với cách làm tương tự. 3 Khi thực hiện xong các thao tác, trở lại hộp công cụ và nháy chuột vào điều khiển đó một lần nữa để bỏ lựa chọn. 2.3.1. Thay đổi kích thước và vị trí của điều khiển Để dịch chuyển điều khiển chỉ cần chọn vào điều khiển đó và kéo nó tới vị trí mới trên Form. Để thay đổi kích cỡ của điều khiển trước hết phải chọn nó, khi đó đường bao của điều khiển sẽ được hiển thị. Sau đó kéo đường bao kích này cho phù hợp kích thước mong muốn (Form cũng được điều chỉnh kích thước theo cách tương tự). Để di chuyển và thay đổi kích cỡ của nhiều điều khiển cùng một lúc thì lựa chọn từng điều khiển trong khi giữ phím SHIFT, sau đó có thể thực hiện di chuyển hoặc đổi kích thước của chúng theo nhóm. 2.3.2. Định dạng các điều khiển VBA cung cấp một số chức năng điều chỉnh định dạng để giúp cho ta trình bày Form. Những chức năng này có thể được tìm thấy trong trình đơn Format của VBA IDE. Chúng cho phép căn chỉnh, tạo kích thước giống nhau, thay đổi khoảng cách cho nhiều điều khiển trên Form. Chú ý, để chọn nhiều điều khiển, giữ phím SHIFT trong khi chọn. 2.3.3. Thay đổi thuộc tính của điều khiển Các thuộc tính sẽ điều chỉnh các đặc điểm khác nhau của điều khiển ví dụ như: kích cỡ, hình dạng, màu sắc, nhãn và các giá trị mặc định. Gán các thuộc tính của điều khiển thực hiện khi thiết kế bằng cách sử dụng cửa sổ Properties. Thay đổi thuộc tính của điều khiển 1 Chọn điều khiển cần thay đổi thuộc tính trên Form 2 Mở cửa sổ Properties bằng cách sử dụng phím F4 trong trường hợp cửa sổ đó chưa được mở. 3 Trong cửa sổ Properties, tìm thuộc tính muốn thay đổi và chọn giá trị hiện tại cho thuộc tính đó. 4 Thay đổi giá trị cho thuộc tính đó. Ta cũng có thể thay đổi thuộc tính của đối tượng trong chương trình đang hoạt động bằng cách viết mã lệnh truy cập vào thuộc tính này. Tham khảo tài liệu của Microsoft để tìm thêm thông tin về thay đổi thuộc tính của điều khiển trong lúc chương trình đang hoạt động. 2.3.4. Thêm mã lệnh cho điều khiển Sau khi bố trí các điều khiển trên Form theo mong muốn, tiến hành viết mã lệnh cho các điều khiển. Mở cửa sổ Code (cửa sổ viết mã lệnh) bằng cách nhấn đúp chuột Phát triển AutoCAD bằng ActiveX và VBA | 279 trên điều khiển, khi đó cửa sổ Code sẽ được mở ra cùng với một hàm được tạo sẵn cho điều khiển đó tương ứng với sự kiện mặc định của điều khiển. Có thể viết mã lệnh cho sự kiện mặc định hoặc chọn một sự kiện khác từ hộp danh sách các sự kiện nằm ở góc trên bên phải cửa sổ Code. 2.4. Hiển thị và ẩn Form Sau khi thiết kế Form và các điều khiển đã được viết mã lệnh đầy đủ thì bước cuối cùng là hiển thị Form cho người dùng khi chạy chương trình. Sự hiển thị của Form được thực hiện bởi phương thức Show. Phương thức này có thể được gọi từ bất cứ môđun nào trong ứng dụng. Hiển thị Form Ví dụ dưới đây sẽ hiển thị Form có tên là “UserForm1”: Public Sub MyApplication() UserForm1.Show End Sub Thủ tục (và tiếp đó là việc hiển thị Form) có thể gọi được như một Macro từ lệnh VBARUN hoặc từ trình đơn của AutoCAD. Lưu ý rằng Form trong VBA ở chế độ Modal. Điều đó có nghĩa là người dùng sẽ không thể tương tác trực tiếp với AutoCAD (ví dụ chọn một điểm hay một đối tượng nào đó trên bản vẽ) khi Form đang được hiển thị. Để cho phép người dùng tương tác với bản vẽ của AutoCAD thì cần sử dụng phương thức Hide của VBA. Phương thức này sẽ ẩn Form đi và cho phép người dùng truy cập một cách hạn chế với AutoCAD. Khi sử dụng phương thức Hide, Form vẫn còn trong bộ nhớ của máy tính, nó vẫn giữ nguyên tất cả các giá trị hiện tại trong khi bị ẩn đi. Phương thức này được gọi theo cách tương tự như phương thức Show. Ẩn Form UserForm1.Hide 2.5. Tải và dỡ bỏ Form Một số trường hợp cần tải Form vào bộ nhớ trong lúc chạy ứng dụng nhưng không hiển thị Form. Trường hợp này có thể gặp phải khi người lập trình muốn khống chế thời điểm tải Form tốt hơn hoặc muốn truy cập Form nhưng không muốn người dùng nhìn thấy Form. Để tải Form nhưng không hiện Form, sử dụng phương thức Load của VBA. Phương thức Show có thể được sử dụng sau đó để người dùng nhìn thấy Form tại thời điểm thích hợp trong khi ứng dụng thực hiện. Cần nhớ rằng, người dùng không thể tương tác với Form cho đến khi nhìn thấy nó. Nếu phương thức Show được gọi mà Form chưa được tải vào thì nó sẽ được tự động tải. Bên cạnh đó, cũng có một số trường hợp ta muốn dỡ bỏ Form. Việc dỡ bỏ Form sẽ loại bỏ Form đó khỏi bộ nhớ và tất cả các bộ nhớ liên quan đến Form đó sẽ được thu hồi lại. Cho đến khi Form được tải vào lần nữa bằng cách sử dụng phương thức Load hoặc Show thì người dùng không thể tương tác với Form và cũng không thể thao tác lập trình được. Ta có thể dỡ bỏ Form khi biết Form sẽ không được sử dụng lần nữa trong ứng dụng và khi cần tiết kiệm bộ nhớ. 280 | Chương 11: Phát triển ứng dụng bằng VBA Phương thức Hide không thực hiện được việc dỡ bỏ Form. Nếu ứng dụng kết thúc và Form chưa được dỡ bỏ thì nó sẽ được tự động dỡ bỏ. Dưới đây là bảng so sánh các phương thức Show, Hide, Load và Unload của VBA: Các phương thức VBA Show, Hide, Load và Unload Phương thức Vai trò Show Hiển thị Form. Nếu Form chưa được tải vào thì nó sẽ tự động tải Form vào. Hide Ẩn Form. Form chưa được dỡ bỏ khỏi bộ nhớ. Load Form được tải vào bộ nhớ nhưng chưa được hiển thị. Unload Dỡ bỏ Form khỏi bộ nhớ. Có thể thực hiện việc này bằng phương thức Unload hoặc được thực hiện tự động khi ứng dụng kết thúc. 2.6. Thiết kế chương trình với Modal Form Tất cả các hộp thoại VBA trong AutoCAD đều ở dạng Modal. Điều này có nghĩa là người dùng cần trả lời các yêu cầu của hộp thoại trước khi tiếp tục thực hiện các phần khác của ứng dụng. Sẽ không có mã lệnh tiếp theo nào được thực hiện cho đến khi hộp thoại dạng Modal được đóng bằng phương thức Hide hoặc Unload. Điều này yêu cầu người phát triển ứng dụng cần suy nghĩ thận trọng về thời điểm cũng như cách thức sắp xếp trình tự của các hộp thoại. Ví dụ cần thiết kế một hộp thoại yêu cầu người dùng chọn một đối tượng trong bản vẽ AutoCAD. Để người dùng có thể chọn được một đối tượng trong cửa sổ ứng dụng của AutoCAD, trước hết cần ẩn Form bằng cách gọi phương thức Hide. Khi đối tượng đã được chọn thì hiển thị lại Form bằng phương thức Show, tất cả các dữ liệu của nó vẫn được giữ nguyên trạng và ứng dụng sẽ tiếp tục chạy. CHÚ Ý Mặc dù tất cả các Form khác trong ứng dụng đều không được phép hoạt động khi hộp thoại Modal hiển thị, nhưng các ứng dụng khác thì đều được phép hoạt động. 3. Xử lý lỗi Có ba loại lỗi khác nhau có thể gặp phải trong ứng dụng: lỗi biên dịch, lỗi thực thi và lỗi logic. Lỗi biên dịch xảy ra trong khi xây dựng ứng dụng. Những lỗi này hầu hết là lỗi cú pháp, các vấn đề về phạm vi của biến, hoặc lỗi nhập dữ liệu. Trong VBA, những kiểu lỗi như vậy thường được phát hiện bởi môi trường phát triển. Khi soạn một dòng lệnh sai thì dòng đó sẽ được đánh dấu và thông báo lỗi sẽ xuất hiện và nhắc nhở về lỗi đó. Các lỗi biên dịch cần phải được sửa trước khi ứng dụng có thể hoạt động. Lỗi thực thi thường khó tìm và sửa hơn. Chúng thường xảy ra trong khi thi hành các dòng lệnh và thường do nhận thông tin từ người dùng. Ví dụ nếu ứng dụng yêu cầu người dùng nhập tên của bản vẽ và người dùng nhập tên của một bản vẽ không tồn Phát triển AutoCAD bằng ActiveX và VBA | 281 tại thì lỗi thực thi sẽ xảy ra. Để xử lý lỗi loại này một cách hiệu quả cần dự đoán các dạng vấn đề sẽ gặp phải để bẫy chúng và viết mã lệnh xử lý các tình huống đó. Lỗi logic là khó tìm và sửa nhất. Hiện tượng của lỗi logic thường nằm trong các tình huống khi lỗi biên dịch và lỗi thực thi không xảy ra nhưng kết quả do ứng dụng tạo ra vẫn không đúng. Người lập trình coi đây là một loại lỗi mà có thể rất dễ hoặc rất khó để tìm và bẫy được. Các thông tin để tìm và sửa ba loại lỗi nói trên có thể được tìm thấy trong tài liệu của môi trường lập trình. Các lỗi của AutoCAD thường là lỗi thực thi nên chúng sẽ được nói đến kỹ hơn trong các phần sau của chương này. CHÚ Ý Hầu hết các ví dụ mẫu được cấp trong tài liệu của AutoCAD đều không sử dụng các bẫy lỗi. Điều này nhằm mục đích làm cho các ví dụ đơn giản và tập trung vào nội dung chính của nó. Tuy nhiên, cũng như các ngôn ngữ lập trình khác, xử lý lỗi và bẫy lỗi hợp lý là điều cần thiết để tăng hiệu quả của ứng dụng. Có cần phải bẫy lỗi thực thi không? Hầu hết các môi trường lập trình phải cung cấp công cụ xử lý lỗi mặc định. Với VB và VBA, các phản ứng lỗi mặc định là sự xuất hiện của các thông báo lỗi và ngắt ứng dụng. Trong khi xây dựng ứng dụng thì kiểu phản ứng này là phù hợp, nhưng sẽ không được phép xuất hiện đối với người dùng. Khi lập trình, người lập trình có thể muốn bỏ qua hoặc cung cấp các phản ứng lỗi riêng cho một số lỗi; muốn ngăn sự xuất hiện của các thông báo của các lỗi hoặc đơn giản là điều khiển sự xuất hiện của các thông báo lỗi đối với người dùng. Bên cạnh đó, người dùng hầu như không thể chấp nhận việc tự động ngắt ứng dụng. Nói chung, xử lý lỗi là cần thiết mỗi khi cần nhập các thông số đầu vào từ người dùng và mỗi khi làm việc với nhập/xuất các tệp. Lưu ý rằng, ngay cả khi tệp cần dùng đã sẵn sàng để được xử lý, nhưng có thể xuất hiện những yếu tố gây ra lỗi mà người lập trình chưa nghĩ đến. 3.1. Bẫy lỗi thực thi Trong VB và VBA, các lỗi thực thi được bẫy bằng cách sử dụng lệnh On Error. Câu lệnh này sẽ tạo bẫy cho hệ thống. Mỗi khi có lỗi xảy ra, lệnh này sẽ tự động chuyển hướng sang phần xử lý riêng biệt được thiết kế cho lỗi đó. Khi đó các xử lý lỗi mặc định của hệ thống sẽ bị bỏ qua. Lệnh On Error có 3 dạng như sau: On Error Resume Next On Error GoTo Label On Error GoTo 0 Lệnh On Error Resume Next được sử dụng khi người lập trình muốn bỏ qua lỗi. Lệnh này sẽ chỉ thực hiện bẫy lỗi thay vì sự xuất hiện của các thông báo và dừng chương trình, bằng cách nhảy đến thực hiện dòng lệnh tiếp theo. Ví dụ, nếu muốn tạo một thủ tục duyệt qua tất cả các đối tượng trong không gian vẽ để đổi màu cho chúng, người lập trình cần biết rằng khi một trong các đối tượng nằm trong một lớp bị khoá thì AutoCAD sẽ báo lỗi. Do vậy, thay vì phải dừng chương trình lại, chỉ cần bỏ qua các đối tượng thuộc lớp bị khoá đó để tiếp tục đổi màu cho các đối tượng còn lại. 282 | Chương 11: Phát triển ứng dụng bằng VBA Xử lý lỗi sử dụng lệnh On Error Resume Next Ví dụ dưới đây là một chương trình con duyệt qua tất cả các đối tượng trong không gian vẽ và đổi màu chúng thành đỏ. Áp dụng chương trình con này trong một bản vẽ có sẵn một số đối tượng mà trong đó có đối tượng thuộc một lớp bị khoá. Tiếp đó, giải thích lệnh On Error Resume Next và tiếp tục chạy chương trình. Chương trình sẽ dừng lại ở đối tượng đầu tiên thuộc lớp bị khoá. Sub Ch11_ColorEntities() Dim entry As Object On Error Resume Next For Each entry In ThisDrawing.ModelSpace entry.Color = acRed Next entry End Sub Câu lệnh On Error GoTo Label được dùng khi người lập trình muốn khai báo xử lý lỗi. Câu lệnh này sẽ bẫy lỗi và thay vì thông báo các lỗi và ngừng chương trình, nó sẽ nhảy đến đoạn mã lệnh ở vị trí được định sẵn. Đoạn mã chương trình này sẽ thực hiện các thao tác theo người lập trình muốn khi lỗi xuất hiện. Ví dụ, mở rộng ví dụ nêu trên bằng cách tạo ra các thông báo để xử lý trong trường hợp gặp đối tượng nằm trong lớp bị khoá. Xử lý lỗi sử dụng lệnh On Error GoTo Ví dụ dưới đây là một chương trình con duyệt qua tất cả các đối tượng trong không gian mô hình và đổi màu thành đỏ. Khi gặp đối tượng thuộc lớp bị khoá, chương trình sẽ xuất hiện một hộp thoại để thông báo kiểu lỗi và thẻ của đối tượng. Áp dụng chương trình con này trong một bản vẽ có sẵn một số đối tượng và trong đó có đối tượng thuộc một lớp bị khoá. Tiếp đó, thêm dấu chú thích trước dòng lệnh On Error GoTo MyErrorHandling và tiếp tục chạy chương trình. Chương trình sẽ dừng lại ở đối tượng đầu tiên thuộc lớp bị khoá. Sub Ch11_ColorEntities2() Dim entry As Object On Error GoTo MyErrorHandler For Each entry In ThisDrawing.ModelSpace entry.Color = acRed Next entry ’ Quan trọng! Thoát khỏi thủ tục trước khi xử lý lỗi Exit Sub MyErrorHandler: Msgbox entry.EntityName + " is on a locked layer." + _ " The handle is: " + entry.Handle Resume Next End Sub Lệnh On Error GoTo 0 sẽ huỷ toàn bộ các xử lý lỗi hiện tại trong chương trình con. Lệnh On Error Resume Next và On Error GoTo Label giữ nguyên thông tin trong bộ xử lý lỗi hiện tại cho đến khi thủ tục kết thúc, hoặc khi có một bộ xử lý lỗi khác được khai báo, hoặc khi bộ xử lý lỗi bị hủy do lệnh On Error GoTo 0. 3.2. Xử lý lỗi đã bẫy được Sau khi bẫy được một lỗi, việc xử lý lỗi đó phụ thuộc vào ứng dụng và bản chất của lỗi. VB và VBA cung cấp các thông tin của lỗi đã bẫy được thông qua đối tượng Phát triển AutoCAD bằng ActiveX và VBA | 283 Err. Đối tượng Err có các thuộc tính: Number, Description, Source, HelpTệp, HelpContext, LastDLLErr. Các thuộc tính nêu trên luôn nhận giá trị của lỗi gần nhất. Thuộc tính quan trọng nhất là Number và Description. Thuộc tính Number chứa mã của lỗi và thuộc tính Description chứa các thông báo xuất hiện khi có lỗi. Trong phần xử lý lỗi, người lập trình có thể so sánh giá trị của Number, từ đó có thể xác định được loại lỗi để có hướng xử lý phù hợp. 3.3. Xử lý lỗi nhập dữ liệu người dùng trong AutoCAD Phương thức nhập dữ liệu từ người dùng cần có những bẫy lỗi để yêu cầu người dùng nhập vào loại dữ liệu nhất định theo đúng định dạng mà người lập trình mong muốn. Nếu người dùng nhập các loại dữ liệu khác, AutoCAD sẽ từ chối dữ liệu và đưa ra lời nhắc nhở. Sử dụng phương thức InitializeUserInput cùng với những chức năng nhập dữ liệu, không những tạo ra một công cụ tổng hợp để kiểm soát việc nhập số liệu từ người dùng mà còn gợi ý cho người lập trình thêm một số điều kiện cần được kiểm tra khi bẫy lỗi. Tham khảo về bẫy lỗi từ số liệu do người dùng nhập vào trong ví dụ ở phần “Nhắc người dùng nhập liệu” trang 84. 4. Bảo mật mã nguồn chương trình VBA Mặc dù không hỗ trợ tạo ra các chức năng bảo vệ, nhưng VBA cung cấp mật khẩu bảo vệ cho các đối tượng nhìn thấy được của một dự án gồm các Form, các lớp, môđun. Có thể tìm thấy chức năng bảo mật trong trình đơn của VBA IDE như sau: Chọn Tools Project Properties Protection. 5. Thực thi Macro từ trình đơn hoặc thanh công cụ Macro có thể được gọi từ thanh công cụ hoặc trình đơn của AutoCAD bằng cách thay đổi thuộc tính Macro của thanh công cụ hoặc trình đơn đó. Thuộc tính Macro phải gán bằng: -VBARUN Tên_tệp.dvb!Tên_dự_án.Tên_Macro trong đó: tên tệp, tên dự án, và tên Macro được chỉ ra trên dòng lệnh cùng với lệnh VBARUN. Tên tệp chỉ cần thiết khi tệp đó chưa được tải vào phiên làm việc hiện tại của AutoCAD, nếu đã có tên tức là tệp đó đã được tải vào. Tham khảo thêm các thông tin cụ thể về thay đổi trình đơn và thanh công cụ trong chương 6 “TÙY BIẾN THANH CÔNG CỤ VÀ TRÌNH ĐƠN” trang 175. 6. Tự động tải dự án VBA Có 2 cách khác nhau để tải tự động một dự án: Khi khởi động, VBA sẽ tìm trong đường dẫn của AutoCAD một dự án có tên là acad.dvb. Tệp này sẽ tự động tải như một dự án mặc định; Tất cả các dự án có tên khác với acad.dvb đều có thể được sử dụng sau khi tải vào bằng lệnh VBALOAD. Đoạn mã lệnh dưới đây sử dụng tệp khởi động của AutoLISP để tải VBA cũng như dự án VBA có tên là myproj.dvb 284 | Chương 11: Phát triển ứng dụng bằng VBA khi AutoCAD bắt đầu hoạt động. Chạy trình soạn thảo notepad.exe và tạo (hoặc thêm vào) tệp acad.lsp như sau: (defun S::STARTUP() (command "_VBALOAD" "myproj.dvb") ) 7. Tự động thực thi Macro Tự động thực thi Macro khi khởi động AutoCAD Bất cứ Macro nào trong tệp acad.dvb đều có thể tự động thực hiện bằng cách gọi gián tiếp macro đó qua câu lệnh VBARUN từ một tiện ích khởi động nào đó của AutoCAD, như tệp acad.lsp. Ví dụ, để tự động thực hiện macro tên là drawline, trước hết lưu macro đó vào tệp acad.dvb, tiếp đó khởi động chương trình soạn thảo notepad.exe và tạo mới (hoặc thêm vào) tệp acad.lsp như sau : (defun S::STARTUP() (command "_-vbarun" "drawline") ) Tự động thực thi Macro khi tải VBA Ta có thể tự động chạy một Macro trong tệp acad.dvb bằng cách đặt tên cho Macro là AcadStartup. Bất cứ Macro nào trong tệp acad.dvb có tên như vậy sẽ được tự động chạy khi tải VBA. 8. Tự động mở VBA IDE mỗi khi tải một dự án Trên hộp thoại Open VBA Project có một tuỳ chọn cho phép môi trường IDE được mở tự động khi một dự án VBA được tải. Tuỳ chọn này nằm ở góc dưới bên trái của hộp thoại và khi đã được chọn thì nó sẽ được giữ nguyên như vậy cho đến khi bị tắt đi. CHÚ Ý Mở hộp thoại Open VBA Project từ dòng lệnh VBALOAD. Hộp thoại sẽ xuất hiện và cho phép người dùng lựa chọn dự án để tải vào. Nếu không nhìn thấy hộp thoại thì có thể do biến FILEDIA đã bị tắt đi. Đó là biến điều khiển sự xuất hiện của các hộp thoại, và để bật trở lại thì gán cho biến giá trị bằng 1. 9. Làm việc khi không có bản vẽ được mở Một số điều cần lưu ý khi làm việc ở chế độ không có bản vẽ nào được mở: Đối tượng ThisDrawing chưa được định nghĩa ở trường hợp này. Khi đó việc sử dụng đối tượng này sẽ gây ra lỗi. Các đối tượng phụ thuộc vào bản vẽ cũng không được định nghĩa ở trường hợp này. Các đối tượng thuộc nhóm này là những đối tượng nằm dưới nhánh của đối tượng Document trong mô hình đối tượng của AutoCAD. Với những đối tượng không phụ thuộc bản vẽ như Application hoặc MenuBar thì được phép làm việc ở trạng thái này. Phát triển AutoCAD bằng ActiveX và VBA | 285 AutoCAD không hiện dòng lệnh khi không có bản vẽ nào mở, nên bất cứ sự cố gắng dùng qua dòng lệnh của chương trình ở trạng thái này đều sẽ gây lỗi. 10. Phân phối ứng dụng Ứng dụng VBA có thể được phân phối theo hai cách sau: Nhúng vào bản vẽ AutoCAD Lưu dự án VBA vào tệp Hình thức phân phối cần được lựa chọn cho phù hợp với ứng dụng. Những ứng dụng có thể áp dụng trong bản vẽ hiện tại và không can thiệp vào các bản vẽ khác thường được nhúng luôn vào bản vẽ đó. Bằng cách này, ta có thể chắc chắn là ứng dụng đã được tải và sẵn sàng để sử dụng mỗi khi bản vẽ được mở. Những ứng dụng được sử dụng bởi nhiều người và được cập nhật một cách thường xuyên, cần đóng mở nhiều bản vẽ khác, hoặc không được sử dụng thường xuyên, thì nên lưu thành tệp dự án của VBA riêng. Theo cách này, có một nơi tập trung ứng dụng và tất cả mọi người sẽ được đảm bảo sử dụng phiên bản mới nhất. Các thông tin chi tiết về dự án được nhúng và tệp dự án VBA, tham khảo trong phần “Khái niệm về dự án VBA nhúng và độc lập” trang 28. 10.1. Phân phối ứng dụng Visual Basic Ứng dụng Visual Basic hay bất cứ ứng dụng chạy độc lập nào đều không thể lưu trong một bản vẽ của AutoCAD. Chúng được biên dịch thành những tệp thực thi độc lập (EXE) và có thể chạy bằng lệnh APPLOAD của AutoCAD.
File đính kèm:
- phat_trien_autocad_bang_activex_vba_chuong_11_phat_trien_ung.pdf