CÁC N ỘI DUNG TRÌNH BÀY
CHƯƠNG I. Công cụlập trình.8
I.1. Làm quen với giao diện Visual Basic.8
I.2. Ngôn ngữVisual Basic.27
I.3. Kỹnăng gỡrối chương trình (debug).51
I.4. Sửdụng ActiveX trong Visual Basic.54
I.5. Kết nối cơsởdữliệu với ADO.61
I.6. Các hàm API cơbản.68
CHƯƠNG II. Thiết kếphần mềm.73
II.1. Khái quát vềUML.73
II.2. Rational Rose.77
II.3. Use case diagram.78
II.4. Biểu đồtương tác (Interaction diagram).81
II.5. Class diagram.83
II.6. Biểu đồthành phần (Component diagram).87
II.7. Ví dụáp dụng.88
CHƯƠNG III. Đồhọa.106
III.1. Mục đích.106
III.2. Các chức năng chính của 1 hệ đồhọa.106
III.3. Sửdụng VDraw Component.106
CHƯƠNG IV. Trợgiúp và đóng gói.115
IV.1. Lập trợgiúp với RoboHelp.115
IV.2. Đóng gói với InstallSheld.115
IV.3. Tạo film demo với WinCam.115
Tài liệu tham khảo.116
116 trang |
Chia sẻ: maiphuongdc | Lượt xem: 1854 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Tài liệu hướng dẫn Thực tập tốt nghiệp (ngành Tin học Xây dựng), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
s Set...
= New...
firstForm và secondForm còn được gọi là các instances của Class frmMyForm. Class giống
như cái khuôn, còn Objects gi ống như những cái bánh làm t ừ khuôn ấy. Chắc bạn đã để ý
thấy trong VB6 t ừ dùng hai t ừ Class và Object l ẫn lộn nhau. Đều này c ũng không quan
trọng, miễn là bạn nắm vững ý nghĩa của chúng.
VB6 có hỗ trợ Class mà ta có thể triển khai và instantiate các Objects của nó khi dùng. Một
Class trong VB6 có chứa data riêng của nó, có những Subs và Functions mà ta có th ể gọi.
Ngoài ra Class còn có th ể Raise Events, tức là báo cho ta bi ết khi chuy ện gì x ảy ra bên
Bộ môn Tin học Xây dựng – ĐHXD Tài liệu hướng dẫn thực tập tốt nghiệp
42
trong nó. Cũng giống như Event Click của CommandButton, khi User clicks lên button thì
nó Raise Event Click để cho ta x ử lý trong Sub myCommandButton_Click(), ch ẳng h ạn.
Classtrong VB6 không có h ổ trợ Visual components, t ức là không có ch ứa những controls
như TextBox, Label .v.v.. Tuy nhiên, ta có thể lấy những control có sẵn từ bên ngoài rồi đưa
cho Object của Class dùng.
I.2.7.3. Ví dụ - Xây dựng lớp clsBox
Bây giờ chúng ta hãy b ắt đầu viết một Class. B ạn hãy m ở một Project m ới loại Standard
EXE Visual Basic. Sau đó dùng Menu Command chọn Add Class Module:
Khi Add Class Module dialog hiện ra chọn Class Module và click Open.
Bạn s ẽ th ấy mở ra m ột khung tr ắng và Project Explorer v ới Properties Window. Trong
Properties Window, hãy sửa Name property của Class thành clsBox như dưới đây:
Bộ môn Tin học Xây dựng – ĐHXD Tài liệu hướng dẫn thực tập tốt nghiệp
43
Kế đó đánh vào những dòng code dưới đây, trong đó có biểu diển cách dùng Class clsBox.
Option Explicit
Private mX As Integer
Private mY As Integer
Private mWidth As Integer
Private mHeight As Integer
Public Property Let X(ByVal vValue As Integer)
mX = vValue
End Property
Public Property Get X() As Integer
X = mX
End Property
Public Property Let Y(ByVal vValue As Integer)
mY = vValue
End Property
Public Property Get Y() As Integer
Y = mY
End Property
Public Property Let Width(ByVal vValue As Integer)
mWidth = vValue
End Property
Public Property Get Width() As Integer
Width = mWidth
End Property
Public Property Let Height(ByVal vValue As Integer)
mHeight = vValue
End Property
Bộ môn Tin học Xây dựng – ĐHXD Tài liệu hướng dẫn thực tập tốt nghiệp
44
Public Property Get Height() As Integer
Height = mHeight
End Property
Public Sub DrawBox(Canvas As Object)
Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), , B
End Sub
Public Sub ClearBox(Canvas As Object)
Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), Canvas.BackColor, B
End Sub
Class clsBox có 4 thuộc tính: X, Y, Width và Height. Ta sẽ tạo một Object Box từ clsBox.
Mỗi Box có tọa độ (X,Y) và kích thước chiều rộng và chiều cao (width, height) của nó. Thật
ra ta có th ể khai báo các bi ến X, Y, Width và Height đơn giản hơn bằng từ khóa Public.
Nhưng ở đây ta cố ý khai báo chúng là Private, dưới dạng mX, mY, mWidth và mHeight.
Khi ta muốn thay đổi các trị số của chúng, cũng dùng lệnh gán như bình thường. Nhưng khi
chương trình x ử lý l ệnh gán (ví d ụ myBox.X=80), nó s ẽ g ọi m ột ch ương trình con là
Property Let X (vValue) với vValue có giá trị 80.
Khác với phép gán thường, trong Property Let chúng ta có th ể thực hiện các phép ki ểm tra
trước khi gán hoặc thực hiện các lệnh thể hiện sự thay đổi của đối tượng tương ứng với lệnh
gán (ví d ụ khi thay đổi thu ộc tính Caption c ủa CommandButton b ằng l ệnh gán
cmdSwitch.Caption = "On" chúng ta th ấy ngay lập tức sự thay đổi được thể hiện trên màn
hình). Đó là vì trong ch ương trình con Property Let c ủa Caption có c ả đoạn mã cho phép
hiển thị lại caption của đối tượng.
Ngược lại, khi ta dùng thuộc tính X của đối tượng myBox, không phải ta chỉ đọc trị số thôi
mà còn g ọi cả cái ch ương trình con Property Get X . Nói tóm l ại, Property Get, Property
Let cho ta c ơ hội để execute một method mỗi khi chương trình đọc hay viết lên tr ị số của
thuộc tính tương ứng ấy.
Thí dụ như nếu ta muốn kiểm soát để chỉ chấp nhận trị số tọa độ X mới khi nó không phải là
số âm. Ta sẽ sửa Property Let X lại như sau:
Public Property Let X(ByVal vValue As Integer)
If (vValue >= 0) Then
mX = vValue
End If
End Property
Property có thể là Read Only hay Write Only. Nếu muốn một Property là Read Only thì ta
không cung cấp Property Let. Nếu muốn một Property là Write Only thì ta không cung c ấp
Property Get. Ngoài ra nếu làm việc với Object, thay vì Data type thông thường, thì ta phải
dùng Property Set, thay vì Property Let.
Bộ môn Tin học Xây dựng – ĐHXD Tài liệu hướng dẫn thực tập tốt nghiệp
45
Thí dụ ta cho clsBox một Property mới, gọi là Font dùng object của class stdFont của VB6.
Trong clsBox ta declare m ột Private variable mFont và vi ết một Property Set Font như
sau:
Private mFont As StdFont
Public Property Set Font(ByVal newFont As StdFont)
Set mFont = newFont
End Property
Ta sẽ dùng property Font của myBox (thuộc Class clsBox) như sau:
' Declare an object of Class StdFont of VB6
Dim myFont As StdFont
Set myFont = New StdFont
myFont.Name = "Arial"
myFont.Bold = True
Dim myBox As clsBox
Set myBox = New clsBox
Set myBox.Font = myFont ' Call the Property Set method
Class clsBox có hai Public Subs, DrawBox và ClearBox. ClearBox cũng vẽ một box như
DrawBox, nhưng nó dùng BackColor của màn ảnh (canvas), nên coi như xóa cái box có sẵn.
Do đó, nếu muốn, bạn có thể sửa Sub DrawBox lại một chút để nhận một tham số Optional
(tham số cho phép nhập hoặc không nhập giá trị) là fColor như sau:
Public Sub DrawBox(Canvas As Object, Optional fColor As Long)
If IsMissing(fColor) Then
Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), , B
Else
Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), fColor, B
End If
End Sub
Trong thí dụ trên, tham số fColor được kiểm tra xem người dùng có nhập giá trị hay không
bằng bằng hàm IsMissing. Nếu fColor là BackColor c ủa canvas thì ta s ẽ có hi ệu quả của
ClearBox.
Trong form chính c ủa chương trình dùng để test clsBox, m ỗi khi ta refer đến một object
thuộc class clsBox, IDE Intellisense sẽ hiển thị các Properties và Subs/Functions của clsBox
như trong hình dưới đây:
Bộ môn Tin học Xây dựng – ĐHXD Tài liệu hướng dẫn thực tập tốt nghiệp
46
Trong chương trình này, mỗi khi ta click nút Draw thì sẽ tạo ra một đối tượng Box mới, cho
tọa độ X,Y và kích thước Width, Height, rồi được vẽ ra ngay trên form. T ừ khóa Me trong
đoạn chương trình này nói đến đối tượng chứa đoạn code đó, tức là frmClass.
Để cho ch ương trình thú v ị hơn, khi user clicks nút Animate, ta s ẽ cho m ột box màu đỏ
chạy từ trái qua phải.
Khi user clicks nút Two Boxes ta sẽ vẽ hai box, hộp trong màu xanh, hộp ngoài màu đỏ, và
cho chúng chạy từ trái sang ph ải. Ở đây ta biểu diễn cho thấy mình muốn tạo ra bao nhiêu
đối tượng box từ lớp clsBox cũng được, và d ĩ nhiên mỗi box có m ột bộ các thuộc tính với
giá trị riêng của nó.
Bộ môn Tin học Xây dựng – ĐHXD Tài liệu hướng dẫn thực tập tốt nghiệp
47
Ta có th ể lập trình để cho đối tượng báo cáo ch ương trình ch ủ của nó khi có m ột biến cố
(Event) xảy ra bên trong đối tượng đó.
Ta thử khai báo một Event tên Draw trong clsBox, và viết code để mỗi khi chương trình gọi
hàm DrawBox đối tượng sẽ phát sinh (Raise) một sự kiện Draw.
' Khai báo event Draw
' Event này có 2 tham số X, Y là số Integer
Public Event Draw(X As Integer, Y As Integer)
Public Sub DrawBox(Canvas As Object, Optional fColor As Long)
If IsMissing(fColor) Then
Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), , B
Else
Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), fColor, B
End If
' Phát sinh sự kiên Draw với 2 tham số mX, mY của đối tượng Box
RaiseEvent Draw(mX, mY)
End Sub
Bây giờ, trong frmClass thay vì chỉ khai báo
Dim myBox As clsBox
Ta sẽ khai báo như sau
Private WithEvents myBox As clsBox
Ngay sau đó, chữ myBox sẽ hiện ra trong danh sách các đối tượng có Event c ủa frmClass.
Sau đó ta s ẽ vi ết code để xử lý m ỗi khi đối tượng myBox phát sinh s ự ki ện Draw c ủa
myBox, tức là ta cung c ấp code cho Private Sub myBox_Draw (X As Integer, Y As
Integer). Ở đây ta chỉ hiển thị một MsgBox thông báo myBox vừa được vẽ ở đâu.
Bộ môn Tin học Xây dựng – ĐHXD Tài liệu hướng dẫn thực tập tốt nghiệp
48
Khi chạy chương trình, mỗi lần một đối tượng box thuộc lớp clsBox gọi đến Sub DrawBox
ta sẽ thấy có thông báo như dưới đây (chứng tỏ rằng Sub myBox_Draw đã được gọi khi đối
tượng myBox được vẽ và phát sinh sự kiện Draw)
Nhớ rằng, ta khai báo một object với từ khóa WithEvents khi ta muốn xử lý các các sự kiện
của nó. Trong thí dụ trên frmClass chứa đối tượng myBox và nó nhận được các Event Draw
của myBox thông qua Sub myBox_Draw.
I.2.8. Làm việc với file
Để lưu dữ li ệu ra file, có 2 ph ương pháp: l ưu ki ểu v ăn b ản (text) và l ưu ki ểu nh ị phân
(binary). Do đặc thù c ủa các ph ần m ềm xây d ựng thường làm vi ệc với các file v ăn b ản,
trong tài liệu này chúng tôi chỉ giới thiệu các phương thức làm việc với file văn bản.
I.2.8.1. Mở file
Khi mở file text, có 3 chế độ mở file sau:
- Đọc các ký tự từ file (Input)
- Ghi các ký tự ra file (Output)
- Ghi thêm các ký tự vào cuối file đã có (Append)
Cú pháp lệnh mở file
Open For [Input | Output | Append] As [Len = buffersize]
Bộ môn Tin học Xây dựng – ĐHXD Tài liệu hướng dẫn thực tập tốt nghiệp
49
Khi mở file ở chế độ Input, file ph ải tồn tại, nếu không, chương trình sẽ phát
sinh lỗi. Khi đó ph ải sử dụng các l ệnh b ắt lỗi (xem ph ần gỡ rối). Các ch ế độ Output và
Append sẽ tự tạo file mới nếu như file này chưa có trên ổ đĩa.
Các file sau khi m ở phải được đóng lại bằng lệnh Close, nhất là đối với các chế độ Output
và Append (nếu bạn không đóng lại thì các thông tin ghi ra file sẽ bị mất).
I.2.8.2. Đọc file
Để đọc thông tin từ file text, mở file ở chế độ Input, sau đó sử dụng các lệnh Line Input #,
Input( ), hoặc Input # để đọc thông tin từ file vào các biến trong chương trình.
Đoạn code dưới đây đọc từng dòng vào từ file, nối chúng lại thành một xâu ký tự chứa toàn
bộ nội dung của file.
Dim FileNum As Integer
Dim LinesFromFile, NextLine As String
FileNum = FreeFile
Open "" For Input As FileNum
Do Until EOF(FileNum)
Line Input #FileNum, NextLine
LinesFromFile = LinesFromFile + NextLine + Chr(13) + Chr(10)
Loop
Close FileNum
Bạn có thể sử dụng lệnh Input # đọc một loạt các biến (số, xâu ký tự...)
Input #FileNum, name, street, city, state, zip
Bạn có thể sử dụng hàm Input để đọc n ký tự liên tiếp từ file
LinesFromFile = Input(n, FileNum)
I.2.8.3. Ghi file
Để ghi giá tr ị các biến ra file, m ở file ở chế độ Output (hoặc Append), sau đó sử dụng các
lệnh Print # để in các giá trị ra file. Chú ý rằng cách lệnh này sẽ in mỗi giá trị (xâu ký tự, số)
trên 1 dòng. Như vậy, muốn in nhiều giá trị trên 1 dòng với lệnh Print # thì bạn chuyển tất
cả thành xâu ký tự, nối chúng lại với nhau rồi in xâu ký tự kết quả đó ra.
Print #FileNum, TheBox.Text
AnyString = "AnyCharacters"
AnyNumber = 23445
Lines = AnyString & " " & AnyNumber
Print #FileNum, Lines
Như đã đề cập ở trên, có th ể sử dụng lệnh Input # để đọc liên ti ếp các giá tr ị từ file text.
Tuy nhiên, chỉ có những file text được tạo bởi lệnh Write # mới đọc được bằng lệnh Input
#.
Dim AnyString As String, AnyNumber As Integer
Bộ môn Tin học Xây dựng – ĐHXD Tài liệu hướng dẫn thực tập tốt nghiệp
50
AnyString = "AnyCharacters"
AnyNumber = 23445
Write #FileNum, AnyString, AnyNumber
Với đoạn lệnh ví dụ ở trên, file kết quả sẽ có nội dung như sau
"AnyCharacters",23445
Có nghĩa là các giá trị sẽ được ghi cách nhau bởi dấu phẩy, các giá trị xâu ký tự sẽ được đặt
trong c ặp ngo ặc kép. Các c ấu trúc file text trong các ph ần m ềm phân tích k ết cấu thông
dụng thường không theo c ấu trúc này. Vì v ậy, để làm việc với các file text này chúng ta s ẽ
sử dụng các lệnh Line Input (đọc) và Print (ghi).
I.2.8.4. Một số kỹ thuật sử dụng để đọc file text
Phần này xin trình bày các k ỹ thuật đọc các cấu trúc file text mà chúng tôi th ường sử dụng.
Phương pháp đơn giản nhất là s ử dụng các l ệnh Line Input để đọc từng dòng, sau đó sử
dụng hàm split để tách dòng đó thành mảng các chuỗi ký tự.
Trong đoạn chương trình ví d ụ sau, chúng tôi ti ến hành đọc các thông s ố tọa độ của các
Joint của hệ kết cấu trong file s2k của SAP2000 v8.
- Chương trình sẽ lần lượt đọc từng dòng của file s2k cho đến khi gặp dòng [TABLE:
"JOINT COORDINATES"]
- Sau đó chương trình ti ếp tục đọc từng dòng cho đến khi g ặp dòng tr ống, với mỗi
dòng vì d ữ liệu được ghi theo t ừng cặp = nên chúng tôi s ử
dụng hàm DocFile(s As String) để đọc từng cặp này.
- Hàm DocFile phân tích xâu ký t ự s thành nhi ều cặp giá tr ị (sử dụng hàm split), v ới
mỗi cặp giá tr ị lại sử dụng hàm split tách thành và , sau đó
cặp dữ liệu này được đưa vào một Collection để xử lý.
Option Explicit
' Cấu trúc xâu s: " a=b c=d e=f... "
' Trả về Collection DocFile với
' DocFile(a) = b
' DocFile(c) = d
' DocFile(e) = f
Private Function DocFile(s As String) As Collection
Dim i As Integer
Dim vals As Variant, v2 As Variant
Set DocFile = New Collection ' Khởi tạo Collection
vals = Split(s, " ") ' Tách xâu s thành mảng
For i = LBound(vals) To UBound(vals)
If vals(i) "" Then ' Chỉ xử lý với phần tử không rỗng
v2 = Split(vals(i), "=") ' Tách cặp thành 2 phần
DocFile.Add v2(1), v2(0) ' Đưa giá trị nhận được vào Collection
Bộ môn Tin học Xây dựng – ĐHXD Tài liệu hướng dẫn thực tập tốt nghiệp
51
End If
Next
End Function
' Ví dụ về dữ liệu
'....
'TABLE: "JOINT COORDINATES"
' Joint=1 CoordSys=GLOBAL CoordType=Cartesian XorR=0 Y=0 Z=0
SpecialJt=No GlobalX=0 GlobalY=0 GlobalZ=0
' Joint=2 CoordSys=GLOBAL CoordType=Cartesian XorR=10 Y=0 Z=0
SpecialJt=No GlobalX=10 GlobalY=0 GlobalZ=0
'
'TABLE: "CONNECTIVITY - FRAME"
' Frame=1 JointI=1 JointJ=2 IsCurved=No Length=10 CentroidX=5
CentroidY=0 CentroidZ=0
'....
Private Sub Command1_Click()
Dim FileNum As Integer
Dim s As String, val As Collection
Dim x As Double, y As Double, z As Double
FileNum = FreeFile
Open "c:\1.s2k" For Input As #FileNum
Do While Not EOF(FileNum)
Line Input #FileNum, s
If s = "TABLE: ""JOINT COORDINATES""" Then
' Dòng nhận biết bảng tọa độ nút
Do While Not EOF(FileNum)
Line Input #FileNum, s ' Đọc dòng kế tiếp
If Trim(s) = "" Then Exit Do ' Dừng nếu gặp dòng trống
Set val = DocFile(s) ' Đọc dữ liệu vào Collection
MsgBox val("GlobalX") & " " & val("GlobalY") & " " & val("GlobalZ")
' Hiển thị các dữ liệu đọc được
Loop
End If
Loop
Close FileNum
End Sub
I.3. Kỹ năng gỡ rối chương trình (debug)
Gỡ rối chương trình (debug) là k ỹ năng cơ bản nhất đối với mỗi lập trình viên. Tuy nhiên,
qua kinh nghiệm dạy và hướng dẫn sinh viên Tin học xây dựng làm đồ án tốt nghiệp, chúng
tôi nhận thấy kỹ năng này của sinh viên là rất yếu (nếu không nói là gần như không có).
Chương trình lập ra hoạt động không theo ý muốn của người lập trình (không hoạt động, có
lỗi khi ch ạy, hoạt động nhưng không cho k ết quả đúng) là điều hết sức bình thường (có l ẽ
nên coi đó là điều hiển nhiên). Khi ch ương trình ho ạt động không theo d ự kiến, cần phải
khoanh vùng xem l ỗi có th ể phát sinh t ừ phần nào c ủa chương trình. Sau đó, sử dụng các
Bộ môn Tin học Xây dựng – ĐHXD Tài liệu hướng dẫn thực tập tốt nghiệp
52
công cụ gỡ rối để tìm hiểu hoạt động của chương trình tại vị trí đó để xác định cụ thể xem
lỗi bắt nguồn từ đâu.
Trong phần này xin gi ới thiệu những kiến thức và thao tác c ơ bản nhất để gỡ rối chương
trình trong VB.
I.3.1. Sử dụng MsgBox
Một trong những công cụ đơn giản nhất để gỡ rối chương trình. MsgBox được sử dụng để
hiển thị các giá tr ị trong khi chương trình đang hoạt động. Sau đây chúng ta cùng xem m ột
ví dụ
Private Sub Command1_Click()
Dim a As Integer
a = 10
a = a * a
a = a * a
a = a * a
MsgBox a
End Sub
Đoạn chương trình trên xem ra vô h ại, nhưng nếu bạn chạy nó sẽ báo lỗi. Nguyên nhân t ại
sao? Để biết được điều này chúng ta sửa lại chương trình như sau
Private Sub Command1_Click()
Dim a As Integer
a = 10
a = a * a
MsgBox a
a = a * a
MsgBox a
a = a * a
MsgBox a
End Sub
Khi chạy đoạn chương trình này, chúng ta sẽ thấy hộp thoại 100 hiện ra (đây là giá trị của a
= 10 * 10). Click OK, h ộp thoại 10000 hi ện ra ti ếp theo ( đây là giá tr ị của a = 100*100).
Click OK tiếp, chương trình báo l ỗi, có ngh ĩa là lệnh 10000*10000 không được thực hiện.
Đến đây chúng ta có th ể biết được lỗi này xuất hiện do giá tr ị 10000*10000 vượt quá khả
năng lưu trữ của số nguyên Integer. Để chương trình hoạt động đúng dự kiến, ta chỉ cần sửa
Integer thành Long.
I.3.2. Sử dụng cửa sổ Watch
MsgBox tuy đơn giản, dễ dùng và t ương đối hiệu quả, nhưng không ph ải lúc nào c ũng có
thể sử dụng. Xét ví dụ sau
Private Sub Command1_Click()
Dim a As Integer
Bộ môn Tin học Xây dựng – ĐHXD Tài liệu hướng dẫn thực tập tốt nghiệp
53
Dim i As Integer
a = 20000
For i = 1 To 20000
a = a + 1
Next
End Sub
Đoạn chương trình này c ũng phát sinh l ỗi, tuy nhiên n ếu bạn sử dụng MsgBox để hiển thị
kết quả trong từng trường hợp thì sẽ là khủng khiếp khi bạn phải click OK cả vạn lần chỉ để
tìm một lỗi.
Trong trường hợp này, khi chương trình báo lỗi, bạn click vào nút Debug, ch ương trình sẽ
quay trở lại IDE của VB với một giao diện như sau
Trong đó, dòng "a=a+1" được hiển th ị với màu vàng và 1 m ũi tên bên trái, đây chính là
dòng và thời điểm mà chương trình gặp lỗi. Vậy trong thời điểm này thì giá tr ị của a là bao
nhiêu? Tại sao lệnh a=a+1 lại lỗi?
Đề trả lời các câu h ỏi trên, chúng ta s ử dụng cửa sổ Watch để xem giá tr ị của biến a. Cách
sử dụng như sau: bôi đen biến a, phải chuột tại vị trí đã bôi đen, chọn Add watch từ popup
menu, hộp tho ại Add watch (hình trái) hi ện lên, click OK để theo dõi giá tr ị của bi ến a
(hình phải). Cửa sổ Watches cho phép chúng ta bi ết được giá trị và kiểu của biến. Trong
trường hợp này ta thấy a có giá trị 32767 (đây là giá trị lớn nhất của số Integer), có nghĩa là
lệnh a=a+1 s ẽ phát sinh l ỗi tràn do giá tr ị vượt quá khả năng lưu trữ của số Integer. Cách
sửa lỗi cũng giống ví dụ trước, tức là sử dụng kiểu biến Long có phạm vi giá trị lớn hơn.
Bộ môn Tin học Xây dựng – ĐHXD Tài liệu hướng dẫn thực tập tốt nghiệp
54
Chú ý: Với các giá trị biến đơn (số, xâu ký tự...) thì có thể xem giá trị của biến một cách rất
dễ dàng b ằng cách để con tr ỏ chuột tại v ị trí tên bi ến, sau kho ảng vài giây s ẽ có m ột
tooltip hiện lên cho bi ết giá trị của biến đó. Tuy nhiên cách này không th ể sử dụng với các
biến kiểu phức (mảng, kiểu người dùng định nghĩa, object), khi đó sử dụng cửa sổ Watch là
phương pháp hữu hiệu nhất.
Ngoài cửa sổ Watch, một công cụ rất mạnh khác là Immediate Window (phím tắt Ctrl+G)
cho phép bạn xem giá tr ị các biến, biểu thức, thực hiện các lệnh VB ngay lập tức trong khi
đang gỡ rối chương trình. (Xem phần I.1.2.8)
I.3.3. Đặt điểm dừng & chạy từng dòng lệnh
Ở phần trên, chúng ta đã dừng chương trình lại để xem giá tr ị các bi ến, tuy nhiên vi ệc
dừng chương trình là bị động (do có lỗi nên phải dừng lại). Trên thực tế, không phải lúc nào
chương trình cũng phát sinh lỗi. Ví dụ như khi kết quả sai do thuật toán lỗi, khi đó phải chủ
động dừng chương trình để quan sát giá tr ị các biến nhằm nắm được nguyên nhân của sai
sót. Xét ví dụ sau:
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 chuyên 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). Ngoà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
chọn font, hộp thoại in ấy, hộp thoại chọn màu...)
Bộ môn Tin học Xây dựng – ĐHXD Tài liệu hướng dẫn thực tập tốt nghiệp
55
Để đư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 ( để 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
xin xem trong ph ần CommonDialog). Chú ý r ằng với phiên bản mới nhất của VSFlexGrid,
Bộ môn Tin học Xây dựng – ĐHXD Tài liệu hướng dẫn thực tập tốt nghiệp
56
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). Ngoà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
thao tác Refresh để cập nhật (xem ví dụ dưới đây).
Bộ môn Tin học Xây dựng – ĐHXD Tài liệu hướng dẫn thực tập tốt nghiệp
57
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"
Các file đính kèm theo tài liệu này:
- Thuc_tap_Tin_hoc_xay_dung.pdf