208 Ví dụ sau minh hoạ cách thức sử dụng phương thức ZoomScaled bằng cách phóng màn hình bản vẽ lên 2 lần so với màn hình bản vẽ hiện tại: Sub VD_ZoomScaled() Dim ti_le As Double Dim kieu_phong_dai As Integer ti_le = 2 kieu_phong_dai = acZoomScaledRelative ‘ Thực hiện phương thức ZoomScaled ZoomScaled ti_le, kieu_phong_dai End Sub 5.1.5. Nhập dữ liệu người dùng từ dòng lệnh của AutoCAD Trong một chương trình, giao diện để người sử dụng thao tác với chương trình là một bộ phận rất quan trọng và không thể thiếu. Thông qua giao diện, người sử dụng có thể nhập dữ liệu và điều khiển chương trình hoạt động, còn chương trình, cũng thông qua giao diện, sẽ hướng dẫn cho người dùng cách thao tác và trình bày kết quả thực hiệ n của nó cho người dùng. Có nhiều cách để thiết kế giao diện nhập dữ liệu cho chương trình, như sử dụng các hộp thoại chuẩn (như InputBox hoặc MsgBox) hay thông qua hệ thống các hộp thoại người dùng (UserForm). Khi lập trình VBA trong AutoCAD, bởi chương trình sẽ hoạt động dựa trên nền là AutoCAD cho nên việc thiết kế một giao diện cho phép người dùng tương tác với chương trình ngay trong giao diện của AutoCAD là một nhu cầu cần thiết. Hơ n nữa điều này được AutoCAD và VBA hỗ trợ thông qua đối tượng Utility (là một thuộc tính của đối tượng Document). Với những phương thức của đối tượng Utility người lập trình có cho phép người sử dụng thao tác với chương trình VBA thông qua dòng lệnh của AutoCAD cũng như màn hình đồ họa của AutoCAD. Các phương thức này sẽ hiển thị một dòng nhắc trên dòng lệnh của AutoCAD và yêu cầu người sử dụng nhậ p vào nhiều kiểu dữ liệu khác nhau (tuỳ thuộc vào từng loại phương thức) từ bàn phím hoặc chọn trên màn hình đồ họa của AutoCAD. Các phương thức để người dùng nhập dữ liệu vào từ bàn phím hay bằng chuột thường có dạng GetXXX, tuỳ thuộc vào loại dữ liệu mà người lập trình cần lấy. Dưới đây là một số phương thức thường được sử dụng: Prompt Phương thức này chỉ đơn giản là gửi một đoạn văn bản đến dòng lệnh của AutoCAD và thường được sử dụng để thông báo cho người dùng biết một nội dung nào đó trước hoặc sau một thao tác với chương trình. Cú pháp như sau: Utility.Prompt Message Trong đó Message là đoạn văn bản sẽ được hiển thị trên dòng lệnh của AutoCAD. Khi gửi một đoạn văn bản đến dòng lệnh của AutoCAD, cần thêm vào ký tự xuống dòng, tránh dòng văn bản cần hiển thị nối vào dòng văn bản đang có trong dòng lệnh. Ví dụ sau sẽ minh hoạ rõ hơn điều này. 1. Trong VBAIDE, tạo Macro sau: Sub VDPrompt() Utility.Prompt ("Vi du phuong thuc Prompt") End Sub C C H H Ư Ư Ơ Ơ N N G G V V : : L L Ậ Ậ P P T T R R Ì Ì N N H H T T R R Ê Ê N N A A U U T T O O C C A A D D 209 2. Trở về AutoCAD để thực thi Macro bằng cách gọi lệnh –vbarun. Lưu ý là sử dụng phím SPACE để kết thúc dòng lệnh, thay vì sử dụng phím ENTER như thông thường. Kết quả hiển thị trên dòng lệnh như sau: 3. Để đoạn văn bản được in ra trên một dòng riêng biệt, thêm vào trước đoạn văn bản hằng số vbCrLf, và đoạn mã lệnh trên được chuyển thành: Sub VDPrompt() Utility.Prompt (vbCrLf & "Vi du phuong thuc Prompt") End Sub 4. Thực thi lại Macro trên, đoạn văn bản đã được hiển thị trên một dòng riêng biệt GetString Phương thức này được sử dụng để người dùng nhập vào một chuỗi ký tự. AutoCAD sẽ dừng lại cho đến khi người dùng nhập vào một giá trị nào đó. Cú pháp của phương thức GetString như sau: RetVal = Utility.GetString(HasSpaces[, Prompt]) Tham số Giải thích HasSpaces Tham số cho phép người dùng nhập vào dấu cách. Nếu bằng TRUE, người dùng có thể nhập dấu cách trong dòng lệnh, để kết thúc nhập phải nhấn phím ENTER. Nếu bằng FALSE, người dùng không thể nhập dấu cách cho chuỗi ký tự, khi người dùng nhấn phím SPACE hoặc ENTER thì sẽ kết thúc quá trình nhập. Prompt Tham số tuỳ chọn, là chuỗi ký tự sẽ hiện trên dòng lệnh AutoCAD để nhắc người dùng nhập dữ liệu. RetVal Là biến kiểu String, chứa giá trị là chuỗi ký tự được người dùng nhập vào. Một điểm cần lưu ý là phương thức này chỉ trả về tối đa 132 ký tự. Nếu người dùng nhập nhiều hơn 132 ký tự, kết quả trả về cho biến RetVal chỉ là 132 ký tự đầu tiên. Ví dụ sau sẽ minh hoạ cách sử dụng phương thức GetString: Sub VD_GetString() ' Ví dụ minh hoạ các cách sử dụng phương thức GetString Dim returnString As String ' Nhắc người dùng nhập 210 ' Giá trị nhập vào không thể chứa dấu cách returnString = ThisDrawing.Utility.GetString _ (False, "Nhập chuỗi (nhấn SPACE hoặc ENTER để kết thúc): ") MsgBox "Chuỗi vừa nhập là: '" & returnString & "'" ' Nhắc người dùng nhập ' Giá trị nhập vào có thể chứa dấu cách returnString = ThisDrawing.Utility.GetString _ (True, " Nhập chuỗi (nhấn ENTER để kết thúc): ") MsgBox "Chuỗi vừa nhập là: '" & returnString & "'" End Sub GetInteger,GetReal Phương thức này được sử dụng khi muốn người dùng nhập một số nguyên (phương thức GetInteger) hoặc một số thực (phương thức GetReal). Cú pháp của các phương thức này như sau: RetVal = Utility.GetInteger([Prompt]) RetVal = Utility.GetReal([Prompt]) Tham số Giải thích Prompt Tham số tuỳ chọn, là chuỗi ký tự sẽ hiện trên dòng lệnh AutoCAD để nhắc người dùng nhập dữ liệu. RetVal Là biến kiểu Double hoặc Interger (tuỳ thuộc vào phương thức được sử dụng), chứa giá trị là số người dùng vừa nhập vào. Nếu người dùng nhập vào một từ khoá hoặc không nhập số mà nhấn ngay phím ENTER để kết thúc nhập liệu, AutoCAD sẽ phát sinh lỗi “User input keyword.”. Ví dụ sau minh hoạ cách sử dụng các phương thức này: Sub Example_GetReal() ' Ví dụ sau sử dụng phương thức GetReal và phương thức GetInteger ' để người dùng nhập vào số thực và số nguyên. Dim returnReal As Double Dim returnInteger As Integer ' Nhắc người dùng nhập vào số thực, ' sau đó hiển thị kết quả được nhập vào. returnReal = ThisDrawing.Utility.GetReal("Enter an Real: ") MsgBox "Số thực vừa được nhập: " & returnReal & vbCrLf & _ "(Tiếp tục nhập giá trị.)" ' Nhắc người dùng nhập vào số nguyên, ' sau đó hiển thị kết quả được nhập vào. returnInteger = ThisDrawing.Utility.GetInteger("Nhập số nguyên: ") MsgBox "Số nguyên vừa được nhập: " & returnInteger End Sub GetAngle C C H H Ư Ư Ơ Ơ N N G G V V : : L L Ậ Ậ P P T T R R Ì Ì N N H H T T R R Ê Ê N N A A U U T T O O C C A A D D 211 Phương thức này được sử dụng khi muốn người lập trình nhập vào một giá trị góc bằng cách nhập giá trị ngay trên dòng lệnh hoặc chọn một góc trên màn hình. Cú pháp của phương thức này như sau: RetVal = Utility.GetAngle([Point][, Prompt]) Tham số Giải thích Point Tham số tuỳ chọn, là mảng số thực có 3 phần tử thể hiện toạ độ đầu tiên của tia tạo nên góc mà người dùng sẽ chọn trên màn hình. Prompt Tham số tuỳ chọn, là chuỗi ký tự sẽ hiện trên dòng lệnh AutoCAD để nhắc người dùng nhập dữ liệu. RetVal Là biến kiểu Double chứa giá trị trả về của phương thức GetAngle, là góc mà người dùng đã nhập vào (tính theo Radian). Khi sử dụng phương thức này, người dùng có thể nhập vào góc (tính bằng độ) tại dòng lệnh. Ngoài ra, người sử dụng có thể sử dụng chuột để vẽ hai điểm xác định tia tạo nên góc cần nhập. Giá trị trả về là góc hợp giữa tia đó và góc cơ sở (được xác định bởi biến hệ thống ANGBASE, giá trị mặc định là 0). Trong trường hợp không nhập giá trị cho tham số Point, người dùng sẽ phải chọn hai điểm trên màn hình để xác định tia mong muốn. Nếu nhập giá trị cho tham số Point, thì toạ độ có trong tham số Point sẽ được gán cho điểm thứ 1, người dùng chỉ cần xác định điểm thứ 2 trên màn hình mà thôi. Bảng dưới đây thể hiện giá trị trả về của phương thức GetAngle với các góc nhập vào khác nhau: Góc người dùng nhập (độ) Giá trị trả về của phương thức GetAngle 0 0.0 -90 1.5708 180 3.14159 90 4.71239 212 Nếu người dùng không nhập giá trị nào cả mà nhấn ENTER, AutoCAD sẽ phát sinh lỗi “User input keyword.” Ví dụ sau minh hoạ cách sử dụng phương thức GetAngle: Sub Example_GetAngle() Dim retAngle As Double ' Lấy về góc tính bằng radian retAngle = ThisDrawing.Utility.GetAngle(, "Nhập vào góc: ") MsgBox "Góc vừa được nhập là: " & retAngle ' Lấy về góc tính bằng radian với toạ độ điểm đầu cho trước Dim basePnt(0 To 2) As Double basePnt(0) = 2#: basePnt(1) = 2#: basePnt(2) = 0# retAngle = ThisDrawing.Utility.GetAngle(basePnt, "Nhập vào góc: ") MsgBox "Góc vừa được nhập là: " & retAngle End Sub GetPoint Phương thức GetPoint được sử dụng để lấy một điểm do người dùng nhập vào bằng cách nhập tọa độ trực tiếp từ dòng lệnh hoặc chọn điểm trên màn hình. Giá trị trả về của phương thức có kiểu Variant, là một mảng gồm 3 phần tử số thực chứa tọa độ của điểm đã được chọn trong hệ tọa độ WCS. Cú pháp của phương thức như sau: RetVal = Utility.GetPoint([Point][, Prompt]) Tham số Giải thích Point Tham số tuỳ chọn, kiểu Variant, là mảng số thực có 3 phần tử thể hiện toạ độ của điểm tham chiếu của điểm sẽ nhập vào. Prompt Tham số tuỳ chọn, là chuỗi ký tự sẽ hiện trên dòng lệnh AutoCAD để nhắc người dùng nhập dữ liệu. Nếu tham số tùy chọn Point được gán giá trị, AutoCAD sẽ tạo một đường thẳng tham chiếu nối từ điểm Point đến vị trí hiện tại của con trỏ trên màn hình đồ họa. Đường thẳng này luôn thay đổi theo sự di chuyển của con trỏ, hỗ trợ việc quan sát của người dùng trong quá trình nhập điểm. Sau khi người dùng nhập điểm bằng cách bấm chuột trên màn hình đồ họa tại vị trí mong mu ốn thì đường thẳng tham chiếu cũng sẽ mất đi. Nếu người dùng không nhập vào điểm nào mà nhấn ENTER, AutoCAD sẽ phát sinh lỗi “User input keyword.” Ví dụ sau minh họa cách sử dụng phương thức GetPoint và các tham số: Sub Example_GetPoint() ' Ví dụ minh họa cách sử dụng phương thức GetPoint. Dim returnPnt As Variant ' Nhập điểm và trả về tọa độ của điểm khi không có điểm tham chiếu returnPnt = ThisDrawing.Utility.GetPoint(, "Nhap mot diem: ") MsgBox "Toa do WCS cua diem: " & returnPnt(0) & ", " & _ returnPnt(1) & ", " & returnPnt(2) . những phương thức của đối tượng Utility người lập trình có cho phép người sử dụng thao tác với chương trình VBA thông qua dòng lệnh của AutoCAD cũng như màn hình đồ họa của AutoCAD. Các phương. GetAngle C C H H Ư Ư Ơ Ơ N N G G V V : : L L Ậ Ậ P P T T R R Ì Ì N N H H T T R R Ê Ê N N A A U U T T O O C C A A D D 211 Phương thức này được sử dụng khi muốn người lập trình nhập vào một giá trị góc bằng cách nhập giá trị ngay trên dòng lệnh hoặc chọn một góc trên màn hình. Cú pháp của phương thức. nhập liệu, AutoCAD sẽ phát sinh lỗi “User input keyword.”. Ví dụ sau minh hoạ cách sử dụng các phương thức này: Sub Example_GetReal() ' Ví dụ sau sử dụng phương thức GetReal và phương thức