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)

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

pdf116 trang | Chia sẻ: maiphuongdc | Lượt xem: 1736 | Lượt tải: 1download
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:

  • pdfThuc_tap_Tin_hoc_xay_dung.pdf