CHƯƠNG I Công cụ lập trình
I.4. Sử dụng ActiveX trong Visual Basic
ActiveX là cơng nghệ cho phép người lập trình Windows có thể sử dụng các thành phần (component) do người khác phát tri ển để áp dụng trong chương trình của mình. Cơng
nghệ ActiveX cho phép người phát triển tận dụng được lao động của người khác, không
phải viết lại những chức năng thông dụng, tiết kiệm được rất nhiều sức lao động cũng như
làm tăng đáng kể sức mạnh của các chương trình (vì được phát triển chun mơn hóa). Tuy nhiên, mặt trái của việc sử dụng ActiveX là sự phức tạp khi cài đặt (rất hay xảy ra xung
đột version giữa phiên bản được cài đặt mới và phiên bản đã có sẵn trong máy tính). Ngồi
ra, tất cả các ActiveX của sinh viên sử dụng trong đồ án tốt nghiệp đều là những bản crack
(có nghĩa là sinh viên đang vi phạm pháp luật). Chúng tôi đưa ra hướng dẫn sử dụng các
ActiveX như là giải pháp tình thế, trong tương lai sẽ tìm kiếm các component hợp pháp từ
nguồn phần mềm miễn phí hoặc phần mềm nguồn mở hay các component do sinh viên
trong Khoa tự phát triển.
I.4.1. Các ActiveX thông dụng
I.4.1.1. CommonDialog
Các hộp thoại thông dụng trên Windows (H ộp thoại mở file, hộp thoại ghi file, hộp thoại
Để đưa ActiveX này vào trong project, click ph ải chu ột trên h ộp ToolBox, ch ọn
Components từ menu Popup. Trên h ộp thoại Components, đánh dấu vào mục "Microsoft
Common Dialog Controls".
Sau đó trên ToolBox, chọn đối tượng CommonDialog để đưa vào form, với đối tượng
này bạn có thể sử dụng để hiển thị các hộp thoại thông dụng của Windows.
' Visual Basic 6.0
' Uses a CommonDialog control.
CommonDialog1.InitDir = "C:\Program Files" CommonDialog1.ShowOpen
MsgBox CommonDialog1.FileName
Tên thuộc tính Kiểu Mô tả
DialogTitle String Tiêu đề của hộp thoại
FileName String Tên file được chọn (open hoặc save)
FileTitle String Tên file được chọn (không kèm theo đường dẫn)
InitDir String Thư mục ban đầu khi bật hộp thoại lên
MaxFileSize String Chiều dài lớn nhất cho phép lưu vào tên file (FileName)
Tên thao tác Mô tả
ShowColor Hiển thị hộp thoại chọn màu (theo giá tr ị RGB) hoặc chọn màu theo vị trí trên bảng
màu
ShowFont Hiển thị hộp thoại lựa chọn font chữ
ShowHelp Hiển thị hộp thoại trợ giúp
ShowOpen Hiển thị hộp thoại để lựa chọn file (mở file)
ShowPrinter Hiển thị hộp thoại lựa chọn máy in và các thông số của máy in
ShowSave Hiển thị hộp thoại Save as cho phép nhập vào tên file cần ghi
I.4.1.2. VSFlexGrid
Các ứng dụng trong ngành Tin học xây dựng thường liên quan rất nhiều đến bảng biểu. VB
có cung cấp Grid control cho phép làm việc với bảng biểu. Tuy nhiên, Grid control của VB
khơng có đầy đủ các tính năng cần thiết cho các ứng dụng Tin học Xây dựng, các bạn có thể sử dụng VSFlexGrid (http://www.componentone.com) để thực hiện các chức năng này. Với VSFlexGrid, có th ể thực hiện được rất nhiều chức năng: Đọc và lưu dữ liệu trên file
Text, Excel. Lưu trữ được một số lượng lớn các ô dữ liệu, cho phép cập nhật (edit)... Sau khi đã cài đặt VSFlexGrid, b ạn có th ể sử dụng bằng cách đưa thêm component
"ComponentOne VSFlexGrid 8.0 (Light)" vào trong ToolBox c ủa VB (các bước chi tiết ần CommonDialog). Chú ý rằng với phiên bản mới nhất của VSFlexGrid,
bạn có nhiều lựa chọn: Nếu ứng dụng kết nối CSDL, có th ể chọn bản OLEDB hoặc bản
DAO/RDO, nếu khơng thì chỉ cần sử dụng bản Light là đủ.
Sau đó, đưa VSFlexGrid control từ ToolBox vào form để sử dụng. Dưới đây là ví dụ với grid control có tên là "VSFlexGrid1", ch ương trình tạo ra bảng có 3 dịng và 3 c ột (kể cả
dịng và cột tiêu đề). Việc gán thơng tin vào grid ch ỉ đơn giản là gán giá trị vào thuộc tính
TextMatrix của control. Private Sub Form_Load() With VSFlexGrid1 .Rows = 3 .Cols = 3
.TextMatrix(0, 0) = "So TT" .TextMatrix(0, 1) = "Ho dem" .TextMatrix(0, 2) = "Ten" .TextMatrix(1, 0) = 1
.TextMatrix(1, 1) = "Nguyen Van" .TextMatrix(1, 2) = "A"
.TextMatrix(2, 0) = 2
.TextMatrix(2, 1) = "Tran Thi" .TextMatrix(2, 2) = "B"
.Editable = True End With
End Sub
Khi số lượng các ô lớn, việc gán dữ liệu vào từng ơ có thể gây chậm chương trình, bạn có
thể sử dụng phương pháp khác là kết nối grid với một mảng 2 chiều các giá trị bằng cách sử dụng thao tác BindToArray:
VSFlexGrid.BindToArray [ VariantArray As Variant ], [ RowDim As Long ], [ ColDim As Long ], [ PageDim As Long ], [ CurrentPage As Long ]
Với thao tác BindToArray, dữ liệu sẽ được đưa rất nhanh từ mảng vào grid (nhanh hơn
rất nhiều lần so với việc bạn gán từng giá trị cho từng ơ trong grid). Ngồi ra, n ếu dữ liệu được bind vào (từ mảng [A]), sau đó thay đổi các thơng số trong mảng [A], có thể sử dụng
Private Sub Command1_Click() Dim Dong(2, 2)
With VSFlexGrid1 .Rows = 3 .Cols = 3
Dong(0, 0) = "STT": Dong(0, 1) = "Ho dem": Dong(0, 2) = "Ten" Dong(1, 0) = "1": Dong(1, 1) = "Nguyen Van": Dong(1, 2) = "A" Dong(2, 0) = "2": Dong(2, 1) = "Nguyen Thi": Dong(2, 2) = "B" .BindToArray Dong .Refresh Dong(2, 1) = "aaa" .Refresh End With End Sub I.4.1.3. MenuXP
Menu tiếng Việt luôn là vấn đề đau đầu của rất nhiều bạn làm đồ án tốt nghiệp. Windows sử dụng chung một font chữ cho tất cả các menu hiển thị trên tất cả các cửa sổ. Để hiển thị
tiếng Việt có dấu, về nguyên tắc có 2 phương pháp
- Sử dụng tiếng Việt Unicode: Đây là gi ải pháp tr ọn vẹn nhất, tuy nhiên VB6 l ại
khơng hỗ trợ Unicode, do đó bạn không thể áp dụng giải pháp này
- Đổi font chữ dùng cho menu của Windows: Trên thực tế, bạn có thể sử dụng các hàm
API để thay đổi font chữ dùng cho menu của Windows. Tuy nhiên, giải pháp này
lại gây khó chịu rất nhiều cho người sử dụng khi font chữ quen thuộc trên menu của
họ bị thay đổi.
Giải pháp chúng tôi đưa ra ở đây không nằm trong 2 giải pháp kể trên: Để tạo menu tiếng
Việt chúng ta sử dụng một ActiveX là VBSmart Menu XP (VBSmartMenuXP.ocx). Thực chất ActiveX này không sử dụng menu cung cấp sẵn của Windows mà tự tạo một hệ thống
menu của riêng mình, chính vì vậy mà bạn có thể lựa chọn font chữ cho menu đó.
Để tạo menu tiếng Việt bằng VBSmartMenuXP, bạn hãy thao các bước sau
- Cài đặt VBSmartMenuXP
- Tạo mới một VB Project, trên Toolbox, click phải chuột chọn Components trên menu popup.
- Trên hộp thoại Components, check vào VB Smart Menu XP - Trên Toolbox, chọn SmartMenuXP , thêm control này vào form
- Tên mặc định của control là SmartMenuXP1, sửa thuộc tính Font của control thành
một font chữ tiếng Việt (mã TCVN3), ví dụ font VK Sans Serif (đối với font chữ cho menu, bạn nên s ử dụng các font bitmap, không nên s ử dụng font True Type nh ư
.VnArial, .VnTime).
- Phần code của form như sau (lưu ý rằng khi bạn dùng font chữ tiếng Việt nào thì mã tiếng Việt trong phần nhãn phải tương ứng, trong phần ví dụ này ta sử dụng mã tiếng
Việt TCVN3): Option Explicit
Private Sub Form_Load()
' Để thêm các menu vào SmartMenuXP1, sử dụng phương thức Add của MenuItems ' Phương thức Add có cú pháp như sau
' .MenuItems.Add parent, key, type, label, picture, keymask, keycode ' parent: tên của menu cha, nếu là menu gốc thì parent=0
' key: tên của menu, nên đặt dưới dạng gợi nhớ để dễ dàng truy cập ' type: kiểu của menu – smiNone là kiểu menu thường
' label: nhãn của menu, phần nội dung hiển thị trên menu ' picture: hình ảnh hiển thị trên menu
' keymask: phím chức năng (vbCtrlMask, vbAltMask, vbShiftMask) ' keycode: mã của phím kích hoạt menu
' nếu phím tắt là Ctrl+O: keymask = vbCtrlMask, keycode = vbKeyO With SmartMenuXP1
.MenuItems.Add 0, "mnuTepTin", smiNone, "&TÖp tin" .MenuItems.Add 0, "mnuSoanThao", smiNone, "&Soạn thảo"
.MenuItems.Add "mnuTepTin", "mnuTepTin_TaoMoi", smiNone, "&T¹o míi", , _ vbCtrlMask, vbKeyN
.MenuItems.Add "mnuTepTin", "mnuTepTin_Mo", smiNone, "&Më file", , _ vbCtrlMask, vbKeyO
.MenuItems.Add "mnuTepTin", "mnuTepTin_Dong", smiNone, _ "&Đóng tài liệu", , vbCtrlMask, vbKeyS .MenuItems.Add "mnuTepTin", , smiSeparator
.MenuItems.Add "mnuTepTin", "mnuTepTin_Thoat", smiNone, "&Tho¸t"
.MenuItems.Add "mnuSoanThao", "mnuSoanThao_Copy", smiNone, "&Copy", , _ vbCtrlMask, vbKeyC
.MenuItems.Add "mnuSoanThao", "mnuSoanThao_Cut", smiNone, "&Cut", , _ vbCtrlMask, vbKeyX
, vbCtrlMask, vbKeyV End With
End Sub
Private Sub SmartMenuXP1_Click(ByVal ID As Long) Select Case SmartMenuXP1.MenuItems.Key(ID) Case "mnuTepTin_TaoMoi"
MsgBox "Tao file moi" Case "mnuTepTin_Mo" MsgBox "Mo tai lieu" Case "mnuTepTin_Dong"
MsgBox "Dong tai lieu hien thoi" Case "mnuTepTin_Thoat" MsgBox "Exit..." Unload Me End Select End Sub I.4.1.4. MaXC
VB là ngơn ngữ dễ dùng, dễ học nhưng có nhược điểm lớn là chậm, nhất là đối với các ứng dụng có khối lượng tính tốn lớn. Để khắc phục nhược điểm này, người ta thường phát triển các module tính tốn ở các ngơn ngữ khác, rồi gọi bằng VB.
Các ứng dụng về Tin học Xây dựng thường thiên nhiều về tính tốn, nhất là bài tốn giải hệ
phương trình. Trong các đồ án tốt nghiệp trước, rất nhiều đồ án gặp phải vấn đề khi giải hệ
phương trình: Tốc độ chậm, sai số tính tốn lớn dẫn đến kết quả khơng chính xác. Chính vì
thế chúng tôi giới thiệu MaXC (Matrix ActiveX Component) cho phép th ực hiện rất nhiều
các phép toán trên ma tr ận cũng như giải hệ phương trình theo nhi ều phương pháp khác
nhau.
MaXC không s ử dụng control nh ư các ActiveX khác, b ạn cần khai báo đối tượng kiểu
Matrix (xem đoạn code minh họa bên dưới) Option Explicit
Dim a As New Matrix, b As New Matrix, c As Matrix Private Sub Form_Load()
' Matrix A will hold terms of the of the unknows x,y,z a.Size 3, 3
a.FillRandom 1, 5
' Matrix B will hold right-hand values b.Size 3, 1
b.FillRandom 1, 5 End Sub
Private Sub cmdSolve_Click()
' If system can not be solved an error will occur Set c = a.SolveGauss(b)
' Alternativly you can also use ' SolveGauss function
' Set C= A.SolveGauss(B) Debug.Print c.GetString End Sub
I.4.1.5. VDraw
VDraw là ActiveX cho phép tạo và quản lý bản vẽ kỹ thuật. Kiến trúc của VDraw tương tự
như AutoCAD nên rất dễ dùng đối với các sinh viên Tin học Xây dựng. Phần hướng dẫn sử dụng VDraw sẽ được trình bày chi tiết trong phần Đồ họa của tài liệu này.
I.4.2. Đăng ký & tìm hiểu ActiveX
I.4.2.1. Đăng ký ActiveX
Chọn menu Start / Run.
Để đăng ký ActiveX, trên dòng lệnh, gõ vào đoạn lệnh sau
regsvr32 "tên file activex cần đăng ký – đầy đủ cả đường dẫn"
Để bỏ đăng ký ActiveX, cũng làm tương tự nhưng với lệnh
regsvr32 /u "tên file activex cần bỏ đăng ký – đầy đủ cả đường dẫn"
I.4.2.2. Tìm hiểu cách sử dụng ActiveX bằng VB
Các ActiveX thường có phần trợ giúp đi kèm, chỉ cần chọn đối tượng trên form, nhấn F1
là bạn có thể mở phần trợ giúp của ActiveX đó để tham khảo.
Nếu khơng có trợ giúp hoặc chỉ cần tìm hiểu về các tham số của hàm, bạn nhấn F2 để mở
cửa sổ Object browser. Trên cửa sổ này bạn có thể tìm kiếm danh sách các hàm, các đối
tượng, thuộc tính, các thao tác. Các thu ộc tính kèm theo thơng tin v ề kiểu, các thao tác và
hàm kèm theo thông tin về các tham số, kiểu giá trị trả về...
Ngoài ra, với Object Browser, người phát triển có thể tìm kiếm các thuộc tính và thao tác
theo tên, đây là chức năng rất hữu ích để tìm nhanh các hàm.
Hình dưới là ví d ụ về cách sử dụng Object Browser: Tìm các hàm h ỗ trợ cho Excel của