1139020232Thuc Tap Tin Hoc Xay Dung

116
Trường Đại hc Xây dng Khoa Công nghThông tin Tài liu hướng dn Thc tp tt nghi p (ngành Tin hc Xây dng) (ver 0.3 – 11/2/2006)

Transcript of 1139020232Thuc Tap Tin Hoc Xay Dung

Page 1: 1139020232Thuc Tap Tin Hoc Xay Dung

Trường Đại học Xây dựng

Khoa Công nghệ Thông tin

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)

(ver 0.3 – 11/2/2006)

Page 2: 1139020232Thuc Tap Tin Hoc Xay Dung

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

2

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

Page 3: 1139020232Thuc Tap Tin Hoc Xay Dung

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

3

MỤC LỤC

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.1.1. Cài đặt............................................................................................................9 I.1.2. Giao diện (IDE)............................................................................................10

I.1.2.1. Menu Bar...............................................................................................11 I.1.2.2. Toolbars (Debug, Edit, form Editor, Standard)......................................11 I.1.2.3. Toolbox.................................................................................................12 I.1.2.4. Project Explorer.....................................................................................12 I.1.2.5. Properties window.................................................................................13 I.1.2.6. Form Layout..........................................................................................13 I.1.2.7. Form Designer.......................................................................................13 I.1.2.8. Immediate Window...............................................................................14 I.1.2.9. View Code button..................................................................................14 I.1.2.10. View form button...................................................................................14

I.1.3. Chương trình đầu tiên “Hello World”...........................................................14 I.1.3.1. Sắp đặt các vật dụng lên Form...............................................................15 I.1.3.2. Viết code...............................................................................................16 I.1.3.3. Chạy chương trình.................................................................................16

I.1.4. Form & Controls...........................................................................................17 I.1.4.1. Sắp đặt controls lên Form......................................................................17 I.1.4.2. Resize và di chuyển control...................................................................18 I.1.4.3. Alignment Grid......................................................................................18 I.1.4.4. Control Locking.....................................................................................19

I.1.5. Thuộc tính & Sự kiện....................................................................................20 I.1.5.1. Thuộc tính.............................................................................................20 I.1.5.2. Sự kiện..................................................................................................20

I.1.6. Các control thông dụng.................................................................................21 I.1.6.1. TextBox.................................................................................................21 I.1.6.2. CommandButton....................................................................................22 I.1.6.3. Label.....................................................................................................22 I.1.6.4. CheckBox..............................................................................................23 I.1.6.5. OptionButton.........................................................................................23 I.1.6.6. ComboBox............................................................................................24

I.1.7. Menu............................................................................................................25 I.2. Ngôn ngữ Visual Basic........................................................................................27

I.2.1. Kiểu, biến & biểu thức..................................................................................27 I.2.1.1. Biến.......................................................................................................27 I.2.1.2. Kiểu biến...............................................................................................27

Page 4: 1139020232Thuc Tap Tin Hoc Xay Dung

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

4

I.2.1.3. Toán tử ..................................................................................................31 I.2.1.4. Biểu thức...............................................................................................32 I.2.1.5. Phép gán................................................................................................32 I.2.1.6. Toán tử điều kiện...................................................................................32 I.2.1.7. Toán tử logic.........................................................................................33

I.2.2. Các cấu trúc điều khiển.................................................................................33 I.2.2.1. Cấu trúc If...Then... End If.....................................................................33 I.2.2.2. Cấu trúc If...Then... Else... End If..........................................................33 I.2.2.3. Select Case............................................................................................34 I.2.2.4. Vòng lặp Do While... Loop....................................................................34 I.2.2.5. Vòng lặp Do... Loop While....................................................................34 I.2.2.6. Vòng lặp For... Next..............................................................................35 I.2.2.7. Vòng lặp For Each... Next......................................................................35

I.2.3. Chương trình con..........................................................................................36 I.2.3.1. Sub........................................................................................................36 I.2.3.2. Function................................................................................................36 I.2.3.3. Tham biến & tham trị.............................................................................36

I.2.4. Form.............................................................................................................37 I.2.4.1. Các thuộc tính của Form........................................................................38 I.2.4.2. Các sự kiện của Form............................................................................38 I.2.4.3. MDI Form.............................................................................................39

I.2.5. Module.........................................................................................................40 I.2.6. Cách thức tổ chức dữ liệu trong VB project..................................................40 I.2.7. Class module................................................................................................40

I.2.7.1. Khái niệm Object & Class.....................................................................40 I.2.7.2. Lập trình OOP trong VB........................................................................41 I.2.7.3. Ví dụ - Xây dựng lớp clsBox.................................................................42

I.2.8. Làm việc với file...........................................................................................48 I.2.8.1. Mở file...................................................................................................48 I.2.8.2. Đọc file..................................................................................................49 I.2.8.3. Ghi file..................................................................................................49 I.2.8.4. Một số kỹ thuật sử dụng để đọc file text.................................................50

I.3. Kỹ năng gỡ rối chương trình (debug)...................................................................51 I.3.1. Sử dụng MsgBox..........................................................................................52 I.3.2. Sử dụng cửa sổ Watch..................................................................................52 I.3.3. Đặt điểm dừng & chạy từng dòng lệnh..........................................................54

I.4. Sử dụng ActiveX trong Visual Basic....................................................................54 I.4.1. Các ActiveX thông dụng...............................................................................54

I.4.1.1. CommonDialog.....................................................................................54 I.4.1.2. VSFlexGrid...........................................................................................55

Page 5: 1139020232Thuc Tap Tin Hoc Xay Dung

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

5

I.4.1.3. MenuXP................................................................................................57 I.4.1.4. MaXC....................................................................................................59 I.4.1.5. VDraw...................................................................................................60

I.4.2. Đăng ký & tìm hiểu ActiveX........................................................................60 I.4.2.1. Đăng ký ActiveX...................................................................................60 I.4.2.2. Tìm hiểu cách sử dụng ActiveX bằng VB..............................................60

I.5. Kết nối cơ sở dữ liệu với ADO.............................................................................61 I.5.1. Thiết lập Connection String..........................................................................62 I.5.2. Thiết lập RecordSource.................................................................................64 I.5.3. Bind control với ADO Data..........................................................................65 I.5.4. Làm việc với Database bằng code.................................................................66

I.6. Các hàm API cơ bản............................................................................................68 I.6.1. Khai báo API................................................................................................69 I.6.2. Các hàm API trên DC (Device Context)........................................................70

CHƯƠNG II. Thiết kế phần mềm....................................................................................73 II.1. Khái quát về UML...............................................................................................73

II.1.1. Giới thiệu UML............................................................................................73 II.1.2. Các khái niệm của UML...............................................................................73

II.1.2.1. Phần tử mô hình.....................................................................................73 II.1.2.2. Quan hệ .................................................................................................74 II.1.2.3. Biểu đồ ..................................................................................................74

II.1.3. Kiến trúc hệ thống........................................................................................75 II.1.3.1. Khung nhìn UC (Use case view)............................................................76 II.1.3.2. Khung nhìn thiết kế (Design view)........................................................76 II.1.3.3. Khung nhìn cài đặt (Implementation view)............................................76 II.1.3.4. Khung nhìn triển khai (Deployment view).............................................77 II.1.3.5. Khung nhìn tiến trình (Process view).....................................................77

II.2. Rational Rose.......................................................................................................77 II.2.1. Rational Rose là gì........................................................................................77 II.2.2. Giao diện của Rational Rose.........................................................................78

II.3. Use case diagram.................................................................................................78 II.3.1. Phân tích UC.................................................................................................78

II.3.1.1. UC là gì?...............................................................................................78 II.3.1.2. Tìm kiếm Actor.....................................................................................79 II.3.1.3. Tìm kiếm UC.........................................................................................79

II.3.2. UC Diagram..................................................................................................79 II.3.2.1. Tài liệu mô tả UC..................................................................................80

II.3.3. Tổng kết........................................................................................................80 II.4. Biểu đồ tương tác (Interaction diagram)...............................................................81

Page 6: 1139020232Thuc Tap Tin Hoc Xay Dung

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

6

II.4.1. Đối tượng là gì?............................................................................................81 II.4.2. Tìm đối tượng...............................................................................................81 II.4.3. Biểu đồ trình tự (Sequence Diagram)............................................................82 II.4.4. Biểu đồ cộng tác (Collaboration Diagram)....................................................82

II.5. Class diagram.......................................................................................................83 II.5.1. Class là gì?....................................................................................................83 II.5.2. Tìm kiếm class..............................................................................................83 II.5.3. Phân loại class (stereotype)...........................................................................84 II.5.4. Class Diagram...............................................................................................84

II.5.4.1. Quan hệ giữa các class (relationship).....................................................84 II.5.4.2. Tính nhiều (multiplicity) của quan hệ ....................................................86

II.5.5. Cập nhật sequence diagram...........................................................................87 II.6. Biểu đồ thành phần (Component diagram)...........................................................87

II.6.1. Tổng kết........................................................................................................87 II.7. Ví dụ áp dụng.......................................................................................................88

II.7.1. Mô tả bài toán...............................................................................................88 II.7.2. Biểu đồ UseCase...........................................................................................89

II.7.2.1. Tìm kiếm Actor.....................................................................................89 II.7.2.2. Tìm UseCase.........................................................................................89 II.7.2.3. Biểu đồ UseCase....................................................................................90 II.7.2.4. Mô tả UseCase.......................................................................................90

II.7.3. Biểu đồ tương tác..........................................................................................95 II.7.3.1. Tìm đối tượng........................................................................................95 II.7.3.2. Biểu đồ tuần tự (sequence diagram).......................................................96

II.7.4. Biểu đồ lớp.................................................................................................103 II.7.4.1. Tìm kiếm lớp.......................................................................................103 II.7.4.2. Biểu đồ lớp..........................................................................................104

II.7.5. Cập nhật biểu đồ tương tác..........................................................................104

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

III.3.1. Cài đăt VDraw............................................................................................106 III.3.2. Kiến trúc VDraw.........................................................................................107 III.3.3. Vẽ đối tượng...............................................................................................108 III.3.4. Thay đổi vùng nhìn, điểm nhìn...................................................................109 III.3.5. Lựa chọn đối tượng.....................................................................................110 III.3.6. Người dùng chọn đối tượng........................................................................111 III.3.7. Đọc và lưu bản vẽ .......................................................................................113

Page 7: 1139020232Thuc Tap Tin Hoc Xay Dung

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

7

III.3.8. Một số mẹo vặt với VDraw.........................................................................114

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

Page 8: 1139020232Thuc Tap Tin Hoc Xay Dung

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

8

CHƯƠNG I. Công cụ lập trình Phần này xin giới thiệu về công cụ lập trình Visual Basic (VB), đây là môi trường phát triển thường được các sinh viên chuyên ngành Tin h ọc Xây d ựng sử dụng trong các đồ án t ốt nghiệp. Sau khi đọc phần này, bạn có thể:

- Có được những kiến thức cơ bản về ngôn ngữ cũng như môi trường phát triển VB

- Sử dụng các hàm API trong Visual Basic

- Tận dụng các ActiveX để bổ sung chức năng cho ứng dụng

- Kết nối cơ sở dữ liệu trong Visual Basic

Chú ý:

- Tài liệu được xây dựng với định hướng: người đọc đã có những kiến thức cơ bản về lập trình (nắm được một ngôn ngữ cụ thể).

- Khoảng 65% nội dung của phần VB được sử dụng từ [1], chúng tôi chỉ lược bớt, thay đổi thứ tự hoặc chút ít nội dung cho phù hợp hơn.

I.1. Làm quen với giao diện Visual Basic Dùng VB6 là cách nhanh và t ốt nhất để lập trình cho Microsoft Windows. VB6 cung c ấp cho bạn một bộ công cụ hoàn ch ỉnh để đơn giản hóa việc triển khai lập trình ứng dụng cho MSWindows.

Visual Basic là gì?

- Phần "Visual" đề cập đến phương pháp được sử dụng để tạo giao diện đồ họa người dùng (Graphical User Interface hay viết tắc là GUI). Có sẵn những bộ phận hình ảnh, gọi là controls , bạn có th ể sắp đặt vị trí và xác l ập các đặc tính của chúng trên một khung màn hình, gọi là form . Nếu bạn đã từng sử dụng chương trình vẽ chẳng hạn như Paint, bạn đã có sẵn các kỹ năng cần thiết để tạo một GUI cho VB6.

- Phần "Basic" đề c ập đến ngôn ng ữ BASIC (Beginners All-Purpose Symbolic Instruction Code), một ngôn ngữ lập trình đơn giản, dễ học, dễ dùng.

Visual Basic b ắt nguồn từ MSBasic, do Bill Gates vi ết từ thời dùng cho máy tính 8 bits 8080. Khả năng của ngôn ngữ này cho phép những người chuyên nghiệp hoàn thành bất kỳ điều gì nhờ sử dụng ngôn ngữ lập trình MSWindows nào khác.

Người mang l ại phần "Visual" cho VB là Alan Cooper, ông đã gói môi tr ường hoạt động của Basic trong m ột phạm vi d ễ hiểu, dễ dùng, không c ần phải chú ý đến sự tinh x ảo của MSWindows, nhưng vẫn dùng các chức năng của MSWindows một cách hiệu quả.

Page 9: 1139020232Thuc Tap Tin Hoc Xay Dung

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

9

Visual Basic còn có hai d ạng khác: Visual Basic for Application (VBA) và VBScript. VBA là ngôn ngữ nằm phía sau các ch ương trình Word, Excel, MSAccess, MSProject, .v.v.. còn gọi là Macros. Dùng VBA trong MSOffice, AutoCAD..., ta có th ể làm tăng chức năng bằng cách tự động hóa các chương trình.

Dù cho mục đích của bạn là t ạo một tiện ích nhỏ cho riêng b ạn, trong một nhóm làm vi ệc của bạn, trong m ột công ty l ớn, hay c ần phân b ố chương trình ứng dụng rộng rãi trên th ế giới qua Internet, VB6 cũng sẽ có các công cụ lập trình mà bạn cần thiết.

I.1.1. Cài đặt

Để cài đặt VB6, máy tính c ủa bạn cần phải có một ổ đĩa CD-ROM (CD drive) . B ạn cần ít nhất 32 MB RAM, 2 GB hard disk và CPU Pentium II. Khi bỏ VB6 CD vào CD drive, nó sẽ tự kh ởi động để hiển th ị menu cho b ạn chọn những thứ gì c ần cài đặt, hãy click Install Visual Basic 6.0 để cài VB6. Ngo ại trừ các file hệ điều hành (Operating System) trong th ư mục (folder) \Os, các file trong đĩa compact đều không b ị nén. Vì th ế, bạn có th ể sử dụng chúng trực tiếp từ đĩa. Ví dụ, có nhiều công cụ và thành phần trong folder \Tools vốn có thể được cài đặt trực tiếp từ CD-ROM.

Ngoài ra, bạn có thể chạy Setup khi nào cần thiết. Ví dụ, bạn có thể chạy Setup để cài đặt lại Visual Basic trong folder khác, hoặc để cài đặt thêm bớt các phần của VB6.

Nếu vì lý do gì hệ thống không install các đĩa compact MSDN (bạn sẽ khám phá ra điều này khi thấy Help không có m ặt lúc ch ạy VB6), bạn có th ể cài đặt chúng trực tiếp từ đĩa số 1 của bộ MSDN.

Để bổ sung và xóa các thành phần VB:

- Bỏ đĩa CD vào ổ đĩa

- Nếu menu không t ự động hiện lên thì ch ạy chương trình Setup có s ẵn trong folder gốc trên đĩa CD

- Chọn nút Custom trong hộp thoại Microsoft Visual Basic 6.0 Setup

- Chọn hay xóa các thành ph ần b ằng cách check hay uncheck các h ộp danh sách Options của dialog Custom

- Thực hiện các chỉ dẫn Setup trên màn hình

Ghi chú: Trong lúc cài VB6, nh ớ chọn Graphics n ếu không b ạn sẽ thiếu một số hình ảnh như icons, bitmaps v.v... Đáng lẽ Microsoft cho t ự động cài đặt Graphics, t ức là Default (không có nói gì) thì cài đặt Graphics.

Page 10: 1139020232Thuc Tap Tin Hoc Xay Dung

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

10

I.1.2. Giao diện (IDE)

Khi khởi động VB6 bạn sẽ thấy mở ra hộp thoại New Project. Ở đây VB6 cho bạn chọn một trong nhi ều lo ại chương trình, hãy ch ọn Standard EXE ( để tạo chương trình là file EXE, chạy độc lập)

Sau khi l ựa chọn loại chương trình, giao di ện của môi tr ường phát tri ển (IDE - Integrated Development Environment) của VB hiện ra

Page 11: 1139020232Thuc Tap Tin Hoc Xay Dung

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

11

IDE là môi tr ường cho phép b ạn lập trình, thi ết kế giao di ện, gỡ rối... Các thành ph ần của IDE gồm Menu bar, Toolbar, Toolbox, Project Explorer, Properties Windows...

I.1.2.1. Menu Bar

Giống như tất cả các phần mềm khác, menu bar của VB chứa tất cả các chức năng (được bố trí một cách hệ thống) mà bạn sử dụng để làm việc với VB6, kể cả các menu để truy cập các chức năng đặc biệt dành cho việc lập trình chẳng hạn như Project, Format, hoặc Debug

I.1.2.2. Toolbars (Debug, Edit, form Editor, Standard)

Các toolbars có hình các icons cho phép b ạn click để thực hiện công việc tương đương với dùng một menu, nhưng nhanh và tiện hơn. Bạn dùng menu View | Toolbars để làm cho các toolbars hiện ra hay bi ến mất đi. Bạn có th ể thay đổi vị trí một toolbar bằng cách nắm vào hai gạch dọc nằm bên trái toolbar rồi dời toolbar đi chỗ khác (nắm ở đây nghĩa là để con trỏ chuột lên chỗ hai gạch dọc rồi bấm xuống và giữ nút bên trái c ủa chuột, trong khi kéo con trỏ chuột đi nơi khác).

Page 12: 1139020232Thuc Tap Tin Hoc Xay Dung

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

12

I.1.2.3. Toolbox

Đây là hộp đồ nghề với các công c ụ, gọi là controls, mà b ạn có th ể đặt lên các form trong lúc thiết kế (design). Nếu Toolbox biến mất, bạn có thể display nó trở lại bằng cách dùng menu command View | Toolbox . Bạn có th ể khiến toolbox hiển thị nhiều controls hơn bằng cách chọn Components... từ popup menu (chọn Toolbox r ồi b ấm nút ph ải c ủa mouse để hi ện popup menu) hay dùng menu Project | Components . Ngoài vi ệc trình bày Toolbox m ặc định, bạn có th ể tạo cách trình bày khác b ằng cách ch ọn Add Tab... t ừ popup menu và b ổ sung các control cho tab từ kết quả.

I.1.2.4. Project Explorer

Sử dụng để liệt kê các form và các module trong project (d ự án) hi ện hành c ủa b ạn. Trên Pascal, bạn chỉ làm việc với từng file riêng l ẻ, còn trong VB, m ỗi khi vi ết một chương trình là b ạn làm vi ệc v ới m ột project. Project là sự tập hợp các files mà bạn s ử d ụng để t ạo m ột trình ứng d ụng. Chia ứng dụng thành nhiều module nh ỏ cho phép bạn lập trình hiệu quả hơn.

Page 13: 1139020232Thuc Tap Tin Hoc Xay Dung

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

13

I.1.2.5. Properties window

Liệt kê các đặc tính c ủa các form ho ặc control được chọn. Một property là m ột đặc tính c ủa một object chẳng hạn như size, caption, hoặc color. Khi bạn sửa đổi một property bạn sẽ thấy hiệu quả ngay lập tức, thí dụ thay đổi property Font của một Label sẽ thấy Label ấy được hiển th ị bằng Font chữ mới. Khi b ạn ch ọn m ột Property c ủa control hay form trong Properties window, phía bên ph ải ở chỗ value của property có th ể display ba ch ấm (...) m ũi tên hướng xuống dưới. Bấm vào đó để hiển hộp tho ại để thiết lập các thông số cho property này.

I.1.2.6. Form Layout

Bạn dùng Form Layout để chỉnh vị trí của các forms khi form hiện ra lần đầu lúc chương trình chạy. Click phải chuột trên cửa sổ, chọn Resolution Guides trên popup menu để thấy nếu dùng m ột màn ảnh với độ mịn (resolution) t ệ hơn, thí dụ như 640 X 480, thì nó sẽ nhỏ như thế nào

I.1.2.7. Form Designer

Dùng để thiết kế giao diện lập trình. Bạn có thể bổ sung các controls, các đồ họa (graphics), các hình ảnh và m ột form. Mỗi form trong trình ứng dụng của bạn có designer form riêng của nó.

Page 14: 1139020232Thuc Tap Tin Hoc Xay Dung

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

14

I.1.2.8. Immediate Window

Dùng để gỡ rối (debug) trình ứng dụng của b ạn. B ạn có th ể hi ển th ị d ữ ki ện trong khi ch ạy chương trình ứng d ụng. Khi chương trình đang tạm ngừng ở một break point, b ạn có th ể thay đổi giá tr ị các bi ến (variables) hay ch ạy một dòng chương trình. Phím tắt để bật / tắt cửa sổ Immediate là tổ hợp Ctrl+G

I.1.2.9. View Code button

Click lên nút này trên Project Explorer để xem code c ủa m ột form mà b ạn đã chọn. Cửa sổ code giống như hình bên.

I.1.2.10. View form button

Click lên nút này để xem form designer của một form mà bạn đã chọn.

Ghi chú: Nhiều cửa trong IDE như Toolbars, Toolbox, Project Explorer .v.v..có th ể ở trạng thái trôi (floating) hay dính (docked). B ạn có th ể thay đổi vị trí chúng b ằng cách n ắm vào Title Bar của cửa sổ rồi dời đi. Dĩ nhiên bạn cũng có thể mở rộng hay làm nhỏ một cửa bằng cách dời một cạnh dọc hay ngang c ủa nó. Khi để một cửa sổ này lên trên m ột cửa sổ khác chúng có thể tìm cách dính nhau.

I.1.3. Chương trình đầu tiên “Hello World”

Một chương trình Visual Basic g ồm có ph ần mã lập trình và các hình ảnh (visual). Bạn có thể thiết kế phần hình ảnh bằng cách dùng những đồ nghề (Controls hay Objects) từ Túi đồ nghề (Toolbox) n ằm bên trái. N ếu b ạn không th ấy cái Túi đồ ngh ề thì dùng m ệnh l ệnh Menu View | Toolbox để bắt nó hiện ra.

Khi bạn bắt đầu thiết kế một chương trình bằng cách chọn Standard EXE, môi tr ường triển khai lập trình (IDE) cho b ạn sẵn một Form tên là Form1. B ạn hãy s ửa đề tựa (Title) c ủa

Page 15: 1139020232Thuc Tap Tin Hoc Xay Dung

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

15

form ra cái gì có ý ngh ĩa hơn b ằng cách đổi thuộc tính Caption của form trong c ửa sổ Propeties (trong hình dưới đây ta sửa thuộc tính Caption của form thành ra "Chuong trinh dau tien").

I.1.3.1. Sắp đặt các vật dụng lên Form

Muốn đặt một Control lên Form, click hình cái Control trong Toolbox r ồi Drag (b ấm nút trái của con chu ột rồi kéo cho thành hình ch ữ nhật trước khi buông nút trái ra) con chu ột trên Form vẽ thành cỡ của Control. Những Controls bạn sẽ dùng thường nhất từ Toolbox là Label (nhãn), Textbox (hộp để đánh chữ vào) và CommandButton (nút bấm mệnh lệnh).

Trong hình trên ta có 1 Label, 1 Textbox và 1 CommandButton. Mu ốn sửa chữ Label1 ra "Loi chao" thì s ửa thuộc tính Caption. Còn Textbox không dùng thu ộc tính Caption mà dùng thuộc tính Text. Ta cũng có thể thay đổi các thuộc tính Caption và Text trong khi chạy chương trình (at run-time). Trong lúc thi ết kế (design time) bạn có thể sửa đổi kiểu chữ của những Controls bằng cách đổi thuộc tính Font của chúng trong cửa sổ Properties (click bên

Page 16: 1139020232Thuc Tap Tin Hoc Xay Dung

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

16

phải của thuộc tính Font trong Properties Window, IDE s ẽ hiển th ị hộp thoại Font để bạn lựa chọn những đặc tính của Font như trong hình dưới đây).

Nếu bạn thấy bực mình tại sao chữ mặc định (default size) của các Control hơi nhỏ, bạn có thể giải quyết bằng cách s ửa cỡ chữ của chính Form cho nó l ớn hơn. Vì khi m ột Control được đặt lên một Form, nó thừa kế cỡ chữ của Form.

I.1.3.2. Viết code

Nháy đúp vào Button, VB bật lên cửa sổ Code cùng với một thủ tục Command1_Click mà nội dung chưa có gì, bạn hãy bổ sung nội dung để có thủ tục Command1_Click như sau

Private Sub Command1_Click() MsgBox "Xin chao " & Text1.Text End Sub

Trong đoạn ch ương trình trên, Command1 là tên c ủa Command button trên form. Command1_Click là hàm được gọi khi ng ười dùng nh ấn nút. Đoạn lệnh MsgBox... th ực chất là l ời gọi hàm. Hàm MsgBox hi ển th ị một hộp thoại với nội dung trên h ộp thoại là tham số đầu tiên của hàm. Text1 là tên của hộp nhập liệu TextBox trên form, Text1.Text là nộp dung c ủa hộp nhập liệu. Trong đoạn chương trình này, chúng ta s ẽ hiển th ị một hộp thoại với lời nhắc trong hộp thoại là Xin chao + nội dung của hộp nhập liệu Text1.

I.1.3.3. Chạy chương trình

Để chạy chương trình vừa lập được, bạn nhấn F5 hoặc biểu tượng Run trên Toolbar. Sau khi ch ạy, một hộp tho ại giống với form mà chúng ta v ừa v ẽ s ẽ hi ện ra. Click chu ột vào TextBox để ghi tên c ủa bạn vào, ví d ụ: sửa nội dung TextBox thành “Tin hoc Xay dung”. Nhấn vào nút Command1, chương trình sẽ hiển thị một hộp thoại khác với lời nhắc trên hộp thoại giống như hình sau

Page 17: 1139020232Thuc Tap Tin Hoc Xay Dung

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

17

Hộp thoại MsgBox được sử dụng rất nhiều trong VB để hiển thị các thông báo, và th ường được dùng để hiển th ị giá tr ị của các bi ến trong quá trình ch ạy chương trình. Khi ch ương trình của bạn chạy lỗi mà không phát hiện ra, MsgBox là một công cụ hữu hiệu để bạn theo dõi sự thay đổi của các biến trong quá trình chạy chương trình. MsgBox là công cụ đơn giản nhất để bạn thực hi ện một quá trình g ọi là Debug (g ỡ lỗi chương trình), đây là k ỹ thu ật không thể thiếu đối với các lập trình viên, trong các phần sau chúng ta sẽ đi vào nghiên cứu chi tiết về kỹ thuật này.

I.1.4. Form & Controls

Hầu hết các chương trình VB6 đều có ít nhất một Form. Khi ta chạy chương trình, Form này sẽ hiện ra trước hết để ta ra l ệnh nó làm chuy ện gì. Form tr ống không làm được gì nhi ều, nên ta đặt lên Form nh ững controls nh ư Textbox (h ộp nh ập li ệu để gõ ch ữ vào), Label (nhãn), CommandButton (nút l ệnh), .v.v.. Các controls cho phép ng ười dùng nh ập các d ữ kiện để chương trình x ử lý, và các controls c ũng hiển th ị kết quả và th ực hiện cách m ệnh lệnh của người dùng.

I.1.4.1. Sắp đặt controls lên Form

Ta hãy bắt đầu thiết kế một chương trình mới (New Project) bằng cách chọn Standard EXE, môi trường triển khai l ập trình (IDE) cho b ạn sẵn một Form tên là Form1. Mu ốn đặt một Control lên Form, click hình Control tương ứng trong Toolbox rồi Drag (bấm nút trái của con chuột rồi kéo cho thành hình chữ nhật trước khi buông nút trái ra) con chu ột trên Form vẽ thành c ỡ c ủa Control. M ột cách khác để đặt m ột control lên Form là nháy đúp (doubleClick) control trong Toolbox, m ột hình control s ẽ hi ện ra trên Form. K ế đó b ạn chuyển control đi đến chỗ mình muốn và thay đổi kích thước của nó. Nếu bất cứ lúc nào bạn không thấy Túi đồ nghề (Toolbox) nằm bên trái, b ạn có th ể dùng m ệnh lệnh Menu View | Toolbox để bắt nó hi ện ra. Có m ột cách khác là click lên bi ểu tượng toolbox trên toolbar chính của VB6.

Page 18: 1139020232Thuc Tap Tin Hoc Xay Dung

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

18

I.1.4.2. Resize và di chuyển control

Khi bạn chọn một control (click lên nó), quanh control s ẽ hiện ra resize handle, 8 nút đen dọc theo chu vi của control, dùng để thay đổi vị trí và kích thước control.

Click lên các nút đen của resize handle, bạn có thể thay đổi kích thước control. Có một cách khác để resize control là dùng Shift + phím m ũi tên (lên, xu ống, phải, trái). Bấm nút Shift trong khi bấm một arrow key, control sẽ lớn ra hay thu hẹp theo chiều của ArrowKey.

Tương tự như thế, bấm nút Ctrl trong khi b ấm một arrow key, control s ẽ di chuy ển theo chiều của ArrowKey.

Các thao tác v ẽ và thay đổi kích th ước control v ừa minh h ọa là khi b ạn thi ết k ế form (design-time). Trong lúc ch ương trình ch ạy (run-time), trong code ta có th ể thay đổi kích thước và v ị trí các controls d ễ dàng, th ậm chí có th ể làm cho chúng hi ện ra hay bi ến mất bằng cách sửa đổi giá trị các thuộc tính left, top, width, height và visible của các control.

I.1.4.3. Alignment Grid

Để giúp bạn sắp đặt ngay ngắn các controls trên m ột form, VB6 cho b ạn Alignment Grid. Nó là những chấm đen của các hàng dọc và xuôi trên form. Bạn có thể làm cho các dấu đen của grid trên form bi ến m ất bằng cách dùng menu Tools | Options để hiện th ị hộp thoại Option, tiếp đó chọn Tab General và bỏ checkbox "Show Grid"

Page 19: 1139020232Thuc Tap Tin Hoc Xay Dung

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

19

Bạn c ũng có th ể nhân d ịp này thay đổi kho ảng cách chi ều r ộng (Width) và chi ều cao (Height) của các chấm đen của grid. Kích thước nhỏ nhất của Width hay Height là 24. Hãy so sánh hai trường hợp form có và không có Show Grid như dưới đây

I.1.4.4. Control Locking

Một khi bạn đã sắp đặt kích thước và vị trí của các control trên form rồi, rất dễ ta tình c ờ thay đổi các đặc tính ấy vì vô ý click lên m ột control. Do đó VB6 cho ta Menu command Format | Lock Controls để khóa chúng l ại. Sau khi khóa, hình chi ếc khóa trên menu b ị chìm xuống.

Nếu sau này b ạn muốn thay đổi kích thước hoặc vị trí của chúng thì nhớ dùng Menu command Format | Lock Controls lại. Sau khi m ở khóa, cái hình chiếc khóa trên menu hiện ra bình thường.

VB cung c ấp rất nhiều control chu ẩn, tạo điều kiện cho b ạn có th ể dễ dàng phát tri ển ứng dụng của mình. Sau đây chúng ta cùng tìm hiểu các control thông dụng.

Tên Hình minh họa Áp dụng

TextBox

Nhập dữ liệu từ phía người dùng (người dùng gõ các thông tin vào hộp TextBox, chương trình có thể đọc và thay đổi thông tin của TextBox thông qua thuộc tính Text)

CommandButton

Nút lệnh, thực hiện một công việc gì đó khi người dùng nhấn chuột, gõ phím nóng... tác động lên nút lệnh. Khi bị tác động, nút lệnh sẽ gọi đến hàm tương ứng với sự kiện Click

Label

Hiển thị thông tin để nhắc người dùng. Thường được sử dụng kết hợp với một TextBox để nêu ý ngh ĩa của dữ liệu trong TextBox đó

CheckBox

Cho phép người dùng nhập dữ liệu theo kiểu có / không

OptionButton

Cho phép ng ười dùng nh ập dữ liệu theo ki ểu một lựa chọn trong nhiều lựa chọn khác nhau. Nếu như CheckBox cho phép chọn nhiều lựa chọn trong 1 nhóm thì OptionButton ch ỉ cho

Page 20: 1139020232Thuc Tap Tin Hoc Xay Dung

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

20

phép chọn 1 lựa chọn trong cùng 1 nhóm.

Frame

Dùng để nhóm nhiều CheckBox và OptionButton vào với nhau thành cùng một nhóm.

ComboBox

Cho phép người dùng lựa chọn 1 giá tr ị từ nhiều giá trị khác nhau. ComboBox được hiển thị dưới dạng xổ xuống, khi click chuột vào Combo thì danh sách các giá trị mới hiện ra.

ComboBox có 2 loại: Một loại chỉ cho phép chọn giá tr ị, một loại vừa cho phép chọn giá trị vừa cho phép nhập giá trị mới

Timer

Phát sinh sự kiện Timer sau một khoảng thời gian (Xác định bởi thuộc tính Interval). S ử dụng để tạo chuyển động, hoạt hình...

I.1.5. Thuộc tính & Sự kiện

Chúng ta đã làm vi ệc với form và control (v ẽ các đối tượng), thay đổi các thu ộc tính c ủa form, control qua bảng thuộc tính (properties). Phần này sẽ trình bày một cách hệ thống các thuộc tính và sự kiện phổ biến.

I.1.5.1. Thuộc tính

Mỗi đối tượng có các thu ộc tính mô t ả vị trí, kích th ước, tính chất khác nhau, thay đổi các giá trị của thuộc tính thì tính chất của đối tượng thay đổi. Bảng dưới đây liệt kê những thuộc tính thông dụng của hầu hết tất cả các control.

Tên thuộc tính Mô tả

Left Vị trí bên trái của control

Top Vị trí bên trên của control

Height Chiều cao của control

Width Chiều rộng của control

Name Tên control (tên này sẽ được sử dụng như là tên biến của đối tượng)

Enabled (True/False) Người dùng có thể tác động đến control hay không?

Visible (True/False) Control có được nhìn thấy hay không?

I.1.5.2. Sự kiện

Sự ki ện là khái ni ệm mới m ẻ đối với những người chuyển t ừ Pascal sang VB. M ỗi đối tượng sở hữu nhiều sự kiện khác nhau, tùy theo tác động của người dùng (ho ặc hệ thống) mà các đối tượng phát sinh ra các sự kiện tương ứng. Ví dụ: trong một ô nhập dữ liệu tên là txtDuLieu

Page 21: 1139020232Thuc Tap Tin Hoc Xay Dung

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

21

- Khi người dùng nhấn phím A, ô TextBox phát sinh s ự kiện KeyDown (gọi tới hàm txtDuLieu_KeyDown).

- Nếu người dùng giữ phím A trong 1 kho ảng thời gian đủ dài, ô TextBox s ẽ liên tục phát ra các s ự kiện KeyPress (gọi tới hàm txtDuLieu_KeyPress) và đưa các ký t ự 'A' vào ô nhập liệu.

- Khi người dùng th ả phím A ra, ô TextBox phát sinh s ự kiện KeyUp (gọi tới hàm txtDuLieu_KeyUp).

Tên sự kiên Mô tả

Change Người dùng sửa nội dung của combo box hoặc text box

Click Người dùng click trái chuột trên button hoặc control

DblClick Người dùng click đúp trái chuột trên control

DragDrop Người dùng kéo control đến một vị trí khác

DragOver Người dùng kéo control lên trên một control khác

GotFocus Control nhận focus (tức là mọi thao tác phím được gửi đến control)

KeyDown Người dùng nhấn phím khi control đang focus (ch ỉ phát sinh 1 l ần khi người dùng nhấn phím)

KeyPress Người dùng nhấn phím khi control đang focus (phát sinh nhiều lần, khi người dùng giữ phím thì sẽ phát sinh nhiều sự kiện KeyPress – hiện tượng giữ và lặp phím)

KeyUp Người dùng thả phím khi control đang focus

LostFocus Control mất focus

MouseDown Người dùng nh ấn phím chu ột (c ả trái và ph ải) khi con tr ỏ chu ột đang ở trên control

MouseUp Người dùng thả phím chuột (cả trái và phải) khi con trỏ chuột đang ở trên control

MouseMove Người dùng di chuyển con trỏ chuột trên control

I.1.6. Các control thông dụng

I.1.6.1. TextBox

TextBox là control đuợc dùng nhiều nhất để hiển thị văn bản và nhập dữ liệu. Thuộc tính chính của Textbox là Text. Ta có th ể disable (khiến nó bất lực, không phản ứng gì hết và không cho sửa đổi) một TextBox bằng cách đặt thuộc tính Enable là False (chữ sẽ bị mờ đi), hay Lock (không cho sửa đổi) m ột text box b ằng cách đặt thu ộc tính Locked là True (chữ không bị mờ).

Page 22: 1139020232Thuc Tap Tin Hoc Xay Dung

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

22

Text có thể được căn lề (thuộc tính Alignment) để căn chữ bên trái, chính giữa hay bên phải của hộp nó (như hình bên).

I.1.6.2. CommandButton

CommandButton rất tiện cho ta dùng vào vi ệc xử lý một chuyện gì khi ng ười dùng Click (chuột hoặc phím) lên button. Event ta dùng th ường nhất cho CommanButton là Click. Nội dung hiển th ị trên Button được xác định thông qua thu ộc tính Caption. Để người dùng có thể sử dụng phím nóng (ví d ụ: Phím Exit – ALT+E – đè nút Atl trong lúc b ấm nút E), b ạn đặt ký tự "&" trước chữ E trong Caption c ủa button ( &Exit). Button s ẽ hiển thị với chữ E được gạch chân (Exit).

Ngoài ra ta c ũng có thể cho thêm một cái hình vào CommandButton bằng cách chọn một icon cho thuộc tính Picture và đặt thuộc tính Style là Graphical (thay vì Standard)

Lúc run-time bạn có thể thay đổi hình hay Caption của CommandButton. Trong thí dụ dưới đây, Caption của CommandButton CmdOperation biến đổi giữa hai values Stop và Start:

Private Sub CmdOperation_Click() If CmdOperation.Caption = "&Stop" Then CmdOperation.Caption = "St&art" Else CmdOperation.Caption = "&Stop" End If End Sub

I.1.6.3. Label

Mục đích chính của Label là để hiển thị thông tin hỗ trợ người dùng. Do đó ta có thể dùng thuộc tính Font, ForeColor và Backcolor hiển th ị chữ theo ý thích. Ngoài ra thu ộc tính BorderStyle có thể cho Label lõm xuống nếu bạn đặt nó là Fixed Single. Nếu đặt thuộc tính BackStyle bằng Transparent sẽ tránh trường hợp Backcolor của Label làm cho không đẹp.

Label c ũng có thu ộc tính Tabindex. N ếu b ạn mu ốn dùng ALT key để focus v ề m ột Textbox, hãy để một Label với TabIndex b ằng TabIndex của TextBox trừ 1. Gi ả sử Label có Caption là "&Address" thì ALT+A sẽ mang Tab Cursor về TextBox màu vàng như trong thí dụ dưới đây:

Ngoài ra nhớ rằng bạn có thể thay đổi Caption của Label lúc run-time.

Page 23: 1139020232Thuc Tap Tin Hoc Xay Dung

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

23

I.1.6.4. CheckBox

CheckBox được dùng để người dùng xác nh ận có đặc tính nào m ột cách nhanh chóng (giá trị có hoặc không). Thuộc tính Value của CheckBox có thể là Checked (làm cho hộp vuông có dấu, bằng 1), Unchecked (làm cho hộp vuông trống không, bằng 0) hay Grayed (làm cho hộp vuông có d ấu màu nh ạt, bằng 2). B ạn có th ể dùng thu ộc tính Alignment để làm cho Caption đứng bên phải (Left Justify) hay bên trái (Right Justify) của hộp vuông.

I.1.6.5. OptionButton

OptionButton (còn g ọi là RadioButton) có hình tròn v ới một chấm ở giữa, thay gì hình vuông với một gạch ở giữa như CheckBox. OptionButton luôn luôn được qui tụ thành một nhóm, chứa trong m ột container. Container là m ột Control có kh ả năng chứa các controls khác (Frame, PictureBox, hay chính Form đều là Container). Sau khi đặt một Container lên Form, nếu muốn để một OptionButton lên Container, trước hết ta phải chọn container, rồi kế đó chọn OptionButton. S ở dĩ, tất cả OptionButtons ph ải nằm trong một container là vì b ất cứ lúc nào, nhi ều nh ất là m ột OptionButton trong container có value True (vòng tròn có chấm ở giữa).

Muốn biết một OptionButton có thật sự nằm trong một container, bạn thử kéo container đi chỗ khác . Nếu OptionButton b ị dời theo container thì nó n ằm trong container. M ột cách khác là th ử kéo OptionButton ra kh ỏi container. N ếu kéo ra được thì nó không n ằm trong container.

Muốn di chuy ển m ột OptionButton t ừ container này sang container khác, b ạn Cut OptionButton rồi Paste nó vào container kia.

Page 24: 1139020232Thuc Tap Tin Hoc Xay Dung

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

24

I.1.6.6. ComboBox

ComboBox là control cho phép b ạn chọn một giá tr ị từ nhi ều lựa chọn trong danh sách. ComboBox là danh sách kiểu sổ xuống nên chiếm rất ít diện tích và rất được ưa dùng.

Để tạo danh sách các giá tr ị lựa chọn lúc design-time, trên c ửa sổ Properties, click đúp vào thuộc tính List, trong danh sách gõ các giá tr ị, mỗi giá tr ị 1 dòng. Chú ý: Để xuống dòng trong khi gõ danh sách, b ạn phải dùng tổ hợp phím Ctrl+Enter thay vì phím Enter (dùng để xác nhận giá trị cuối cùng).

Để tạo danh sách các giá tr ị lựa chọn lúc run-time, ta s ử dụng phương thức AddItem của Combo. Ví dụ sau minh họa cách tạo danh sách các giá trị của control có tên là Combo1

Private Sub Form_Load() Combo1.AddItem "CNPM" Combo1.AddItem "THXD" Combo1.AddItem "KTHT" Combo1.AddItem "TUD" End Sub

Chú ý: Để người dùng không th ể nhập thông tin vào Combo nh ư TextBox, hãy thi ết lập thuộc tính Style là Dropdown List. Giá trị mặc định của Style là Dropdown Combo, ở kiểu này, Combo ho ạt động như 1 TextBox nh ưng lại cho phép ng ười dùng nh ập nhanh b ằng cách lựa chọn các giá trị từ danh sách.

Page 25: 1139020232Thuc Tap Tin Hoc Xay Dung

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

25

I.1.7. Menu

Ta dùng Menu Editor để tạo hoặc sửa một Menu cho program. Menu thu ộc về một Form. Do đó, trước hết ta chọn một Form để làm việc với Form Designer. Ti ếp đó ta dùng menu

Tools | Menu Editor hay click lên icon của Menu Editor trên Toolbar để làm cho Menu Editor hiện ra.

Đầu tiên có m ột v ệt màu xanh n ằm trong khung tr ắng của Menu Editor, n ơi sẽ hi ển th ị Caption c ủa Menu Command đầu tiên c ủa Form. Khi ta đánh ch ữ &File vào Textbox Caption, nó c ũng hi ện ra trên v ệt xanh nói trên. K ế đó, b ạn có th ể đánh tên c ủa Menu Command vào Textbox Name. Dù ta cho Menu Command m ột tên nhưng ta ít khi dùng nó, trừ trường hợp muốn nó visible/invisible (hi ện ra/biến mất). Bình th ường ta dùng tên c ủa MenuItems nhiều hơn.

Để có một Menu như trong hình d ưới đây ta còn ph ải edit thêm vào các MenuItems Open, Save, Close và Exit.

Hình dưới đây cho th ấy tất cả các MenuItems c ủa Menu Command File đều nằm thụt qua bên phải với bốn dấu chấm (...) ở phía trước. Khi ta click dấu tên chỉ qua phải thì MenuItem ta đang Edit sẽ có thêm bốn dấu chấm, tức là thụt một bậc trong Menu (Nested).

Page 26: 1139020232Thuc Tap Tin Hoc Xay Dung

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

26

Tương tự như vậy, khi ta click d ấu tên ch ỉ qua trái thì MenuItem ta đang Edit s ẽ mất bốn dấu chấm, tức là trồi một bậc trong Menu.

Nếu muốn cho User dùng Alt key để xử dụng Menu, bạn đánh thêm dấu & trước character bạn muốn trong menu Caption. Thí dụ Alt-F sẽ thả xuống Menu của Menu Command File.

Nếu b ạn đặt cho MenuItem &Open tên mnuOpen, thì khi b ạn Click lên Caption nó trên Form trong lúc thi ết kế, VB6 IDE s ẽ hiển thị cái vỏ của Sub mnuOpen_Click(), giống như Sub cmdButton_Click() của một CommandButton

Private Sub mnuOpen_Click() MsgBox "You clicked mnuOpen" End Sub

Trong thí d ụ trên ta đánh thêm m ột Statement để hi ển th ị một message đơn gi ản "You clicked mnuOpen". B ạn có th ể đặt cho m ột MenuItem tên gì c ũng được, nhưng người ta thường dùng ti ền tố mnu để dễ phân bi ệt một menuItem Event v ới một CommandButton Event. Do đó, ta có những tên mnuFile, mnuOpen, mnuSave, mnuClose, mnuExit.

Cái gạch ngang giữa MenuItems Close và Exit được gọi là Menu Separator. Bạn có thể nhét một Menu Separator bằng cách cho Caption nó bằng dấu trừ ( - ).

Ngoài phím Alt ta còn có thể cho User dùng Shortcut của menuItem. Để cho MenuItem một Shortcut, bạn chọn cho nó một Shortcut từ ComboBox Shortcut trong Menu Editor.

Trong hình dưới đây ta chọn Ctrl+O cho mnuOpen.

Bình thường menuItem được Enabled và Visible. Lúc thiết kế bạn có thể cho MenuItem giá trị khởi đầu của Enabled và Visible bằng cách dùng Checkboxes Enabled và Visible.

Trong khi ch ạy program (at runtime), b ạn c ũng có th ể thay đổi các values Enabled và Visible như sau:

mnuSave.Enabled = False mnuOpen.Visible = False

Page 27: 1139020232Thuc Tap Tin Hoc Xay Dung

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

27

Khi một MenuItem có Enabled=False thì nó bị mờ và người dùng sẽ không dùng được.

Bạn dùng các dấu mũi tên chỉ lên và xuống để di chuyển MenuItem đã được selected lên và xuống trong danh sách các MenuItems. B ạn dùng button Delete để hủy bỏ MenuItem đã được selected, Insert để nhét một MenuItem mới ngay trên MenuItem đã được selected và Next để chọn MenuItem ngay dưới MenuItem đã được selected.

I.2. Ngôn ngữ Visual Basic

I.2.1. Kiểu, biến & biểu thức

I.2.1.1. Biến

VB không bắt buộc bạn phải khai báo biến, tuy nhiên một lời khuyên là bạn hãy đặt chế độ bắt buộc khai báo bi ến. Để thiết lập chế độ này, b ạn vào menu Tools | Options , trên tab Editor, đánh d ấu vào “Require Variable Declaration ”. Sau đó, b ất k ỳ m ột Form hay Module nào được tạo mới đều có khai báo sau đây ở đầu tiên.

Option Explicit

Với khai báo này, tất cả các biến trước khi sử dụng đều phải có khai báo với cú pháp sau.

Dim <Tên biến> As <Kiểu biến>

Ví dụ

Dim i As Integer ' Biến kiểu số nguyên Dim s As String ' Biến kiểu xâu ký tự Dim a As Double ' Biến kiểu số thực kép Dim c, d, e As Double ' Khai báo thế này là sai, chỉ có e là Double ' Còn c, d là kiểu Variant (biến tùy ý) Dim c As Double, d As Double, e As Double ' Khai báo thế này mới đúng

Quy ước đặt tên biến

- Bắt đầu bằng chữ cái, không bắt đầu bằng chữ số.

- Tên biến có th ể chứa chữ cái, ch ữ số, ký t ự “_”, nh ưng không ch ứa các ký t ự đặc biệt.

- Độ dài tối đa của tên biến là 255 ký tự.

I.2.1.2. Kiểu biến

Biến được sử dụng để lưu các giá tr ị, giá tr ị có th ể là s ố (số thứ tự, số người...), có th ể là dạng văn bản (xâu ký tự). Ngoài ra bi ến có thể ở dạng phức tạp, ví dụ mảng: chuỗi các giá trị cùng kiểu sắp xếp liên tiếp, hoặc kiểu dữ liệu do người dùng định nghĩa.

Page 28: 1139020232Thuc Tap Tin Hoc Xay Dung

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

28

Khi bạn đã biết lập trình trên m ột ngôn ngữ, việc hiểu kiểu biến của một ngôn ngữ khác là tương đối đơn giản. Các kiểu biến trong VB được chia thành các loại sau

Biến kiểu số

Kiểu Mô tả Khoảng giá trị Ví dụ

Byte Số nguyên ngắn 0..255

Integer Số nguyên -32768.. 32767

Long Số nguyên dài -2147483648.. 2147483647

Single Số thực độ chính xác đơn

Double Số thực độ chính xác kép

' Thay gì viết Dim Result As Long Result = 30345 * 100 ' sẽ bị overflow error ' Hãy viết như sau: Dim Result As Long Result = 30345 Result = Result * 100 ' không bị overflow error

Biến kiểu xâu ký tự

Mỗi ký tự trong máy tính tương ứng với một số hiệu (mã ASCII). Một chuỗi các ký tự ghép với nhau tạo ra một xâu ký tự (String). String trong VB được ký hiện trong cặp ngoặc kép, ví dụ:

Dim FirstWord As String Dim SecondWord As String * 20 ' Xâu ký tự có độ dài tối đa 20 ký tự Dim Greeting As String FirstWord = "Hello" SecondWord = "World" Greeting = FirstWord & SecondWord ' Greeting bây giờ là "HelloWorld" Greeting = FirstWord & " " & SecondWord

Biến kiểu logic

Kiểu logic là kiểu biến cơ bản, có mặt trong hầu hết các ngôn ngữ. Biến logic (Boolean) chỉ mang hai giá trị là True (đúng) và False (sai).

Biến kiểu Boolean thường được sử dụng với các toán tử logic (And, Or, Xor, Not). Các biểu thức điều kiện trả về giá trị kiểu Boolean.

Biến kiểu mảng

Page 29: 1139020232Thuc Tap Tin Hoc Xay Dung

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

29

Mảng là kiểu dữ liệu phức gồm nhiều giá trị cùng kiểu sắp xếp liên tiếp nhau. Các phần tử này được truy xu ất qua ch ỉ số. Mảng trong VB g ồm mảng t ĩnh và mảng động, mảng tĩnh là m ảng được xác định kích thước ngay từ khi d ịch chương trình, m ảng động có kích thước chưa xác định và chỉ được cấp phát khi run-time.

Tốc độ truy xuất dữ liệu của mảng tĩnh và mảng động của VB là như nhau

Dim N(3) As Long ' Không nên khai báo kiểu này, gây mập mờ Dim M(1 To 3) As Long ' Khai báo với cả chỉ số đầu và cuối cho tường minh Dim Q() As Long Dim i As Integer M(1) = 1 M(2) = 2 M(3) = 3 ReDim Q(1 To 100) For i = LBound(Q) To UBound(Q) Q(i) = i Next

Ki ểu do người dùng định nghĩa

Ngoài các ki ểu dữ liệu chuẩn của VB, người dùng còn có th ể tự định ngh ĩa kiểu biến của riêng mình (giống với kiểu bản ghi – Record của Pascal).

Private Type TDam dai As Double ' cm rong As Double ' cm cao As Double ' cm ten As String * 4 End Type Private Sub Form_Load() Dim dam As TDam ' Biến [dam] thuộc kiểu TDam do người dùng đnghĩa dam.dai = 500 ' Truy xuất các trường bằng dấu chấm sau tên biến dam.rong = 22 dam.cao = 40 dam.ten = "D1" With dam ' Truy xuất nhanh các trường bằng câu lệnh With MsgBox .ten & " " & .rong & "x" & .cao & "x" & .dai End With ' Các trường trong With truy xuất không cần tên biến End Sub

Các bạn lưu ý phân biệt kiểu và biến (rất nhiều người nhầm lẫn 2 khái niệm này với nhau). Trong ví dụ nêu trên TDam là kiểu (giống như kiểu Integer, kiểu String) chứ không phải là một biến để gán giá trị.

Trong Sub Form_Load, dam là một biết kiểu TDam. Theo khai báo đã có, biến dam sẽ có các trường (fields) là dai, rong, cao, ten. Để truy nhập các trường của biến dam, sử dụng dấu chấm (ví dụ dam.dai hay dam.rong hoặc dam.cao)

Page 30: 1139020232Thuc Tap Tin Hoc Xay Dung

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

30

Kiểu liệt kê (Enum)

Kiểu liệt kê là ki ểu do người dùng định ngh ĩa, biến thuộc kiểu này có giá tr ị là m ột trong các giá tr ị được liệt kê trong ki ểu. Sử dụng kiểu li ệt kê v ừa đơn giản vừa có t ốc độ cao (nhanh hơn rất nhiều so với thói quen sử dụng String để phân biệt các trường hợp). Để nắm rõ cách sử dụng kiểu Enum, hãy quan sát hình minh họa bên dưới.

Kiểu Variant

Kiểu Variant là một kiểu dữ liệu khác l ạ đối với những người mới chuyển từ Pascal sang VB. Kiểu Variant chấp nhận mọi giá trị có thể: số nguyên, số thực, xâu ký tự, mảng, kiểu dữ liệu người dùng định nghĩa...

Sử dụng Variant cho phép ng ười lập chình uyển chuyển, mềm dẻo hơn trong quá trình l ập trình. Tuy nhiên, Variant có nh ược điểm là rất chậm, do đó bạn nên h ạn chế dùng trong trường hợp sử dụng tính toán nhi ều (nhất là đối với các ứng dụng tính toán k ết cấu trong ngành Tin học Xây dựng)

Kiểu Collection

Sử dụng mảng với chỉ số tuần tự cho tốc độ làm việc nhanh nhưng không thật sự mềm dẻo. Nếu chúng ta mu ốn truy c ập một phần tử theo tên thành viên thì vi ệc sử dụng cấu trúc dữ liệu kiểu mảng là không hiệu quả do thời gian tìm kiếm lâu.

Trong SAP2000, tên phần tử được đặt tùy ý (số hoặc chữ), nếu là số thì thường không theo thứ tự hoặc không liên tiếp. Do đó sử dụng mảng để lưu các phần tử đọc được từ file kết quả của SAP là không khả thi.

VB hỗ trợ kiểu dữ liệu tập hợp (Collection) cho phép truy c ập phần tử theo tên (cấu trúc dữ liệu này được tối ưu hóa nên tốc độ tìm kiếm rất nhanh).

Dim Ten As New Collection ' Tạo mới một Collection Ten.Add "Cong nghe Thong tin" ' Thêm 1 phần tử vào Collection Ten.Add "Tin hoc Xay dung" Ten.Add "Cong nghe phan mem" Ten.Add "Ky thuat He thong"

Page 31: 1139020232Thuc Tap Tin Hoc Xay Dung

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

31

MsgBox Ten(1) ' Sử dụng tập hợp như mảng MsgBox Ten(3) ' Truy cập theo chỉ số Dim TuDien As New Collection TuDien.Add "Cong nghe Thong tin", "CNTT" ' Thêm 1 phần tử gồm giá trị, tên TuDien.Add "Tin hoc Xay dung", "THXD" ' Tên phần tử phải là duy nhất TuDien.Add "Cong nghe phan mem", "CNPM" TuDien.Add "Ky thuat He thong", "KTHT" MsgBox TuDien("CNTT") ' Truy cập phần tử theo tên MsgBox TuDien("CNPM")

Quy ước đặt tên biến theo kiểu

Bảng dưới đây liệt kê các kiểu biến thường sử dụng, để việc lập trình được thuận tiện, người ta thường đặt kiểu biến là ti ếp đầu ngữ - prefix (v ới 3 ký tự). Việc đặt tên biến như vậy sẽ giúp cho người lập trình không bị nhầm lẫn về kiểu biến, tránh được những sai sót đáng tiếc về sau.

Tiếp đầu ngữ Kiểu Ví dụ

bln Boolean blnButtonEnabled

byt Byte bytLength

cur Currency curSales98

dte Date dteOverdue

dbl Double dblScientificAmt

int Integer intYear1998

lng Long lngWeatherDistance

obj Object objWorksheetAcct99

sng Single sngSales1stQte

str String strFirstName

vnt Variant vntValue

I.2.1.3. Toán tử

Toán tử Giải thích Ví dụ Kết quả

^ Mũ 2 ^ 3 8

* Nhân 2 * 3 6

/ Chia 6 / 2 3

+ Cộng 2 + 3 5

- Trừ 6 – 3 3

Mod phần dư 11 Mod 3 2

Page 32: 1139020232Thuc Tap Tin Hoc Xay Dung

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

32

\ chia nguyên 11 \ 3 3

& Nối xâu "Hi, " & "There" "Hi, There"

I.2.1.4. Biểu thức

Biểu thức là sự kết hợp của các giá trị, biến, toán tử với nhau. Biểu thức biểu diễn trên máy tính có d ạng gần giống với biểu thức toán h ọc mà chúng ta th ường sử dụng: Các toán t ử không được thực hiện theo thứ tự từ trái sang ph ải mà có sự ưu tiên giữa các toán tử, bảng sau đây liệt kê thứ tự ưu tiên (từ cao đến thấp) của các toán tử trong cùng một biểu thức.

Thứ tự Toán tử Ví dụ Kết quả

1 Ngoặc () (2 + 3) * 7 35

2 ^ 2 ^ 3 + 1 9

3 *, /, \, Mod 2 + 3 * 7 23

4 +, - 10 – 4 * 2 + 1 3

I.2.1.5. Phép gán

Phép gán làm nhi ệm vụ đưa một giá trị mới vào trong biến, giá tr ị này được tính từ các giá trị đã có bằng các biểu thức. Cú pháp của phép gán như sau

<Tên biến> = <Biểu thức>

Chú ý, vế trái của phép gán bao giờ cũng là biến, vế phải là biểu thức. Vế trái của phép gán không được là hằng số, biểu thức. Các ví dụ áp dụng.

Dim n As Integer n = 10 n = 2*n*(n+1) ' n = 2*10*11 = 220 n = n+1 ' n = 221 Dim s1 As String, s2 As String s1 = "Hello," s2 = "There" s1 = s1 & " " & There ' s1 = "Hello, There"

I.2.1.6. Toán tử điều kiện

Các toán tử điều kiện dùng để so sánh các giá tr ị (biểu thức) với nhau, giá tr ị trả về là kiểu Boolean (True – đúng hoặc False – sai)

Toán tử Mô tả Ví dụ Kết quả

= Bằng 7 = 2 False

> Lớn hơn 6 > 3 True

< Nhỏ hơn 5 < 11 True

Page 33: 1139020232Thuc Tap Tin Hoc Xay Dung

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

33

>= Lớn hơn hay bằng 23 >= 23 True

<= Nhỏ hơn hay bằng 4 <= 21 True

<> Khác 3 <> 3 False

I.2.1.7. Toán tử logic

Các điều kiện logic có thể được kết hợp với nhau bằng các toán tử logic

Toán tử Mô tả Ví dụ Kết quả

And Cả hai toán hạng cùng đúng (2 < 3) And (4 < 5) True

Or Ít nhất một trong hai toán hạng đúng (2 > 3 ) Or (6 < 7) True

Xor Một toán hạng đúng, 1 toán hạng sai (2 < 3) Xor (7 > 4) False

Not Đảo Not (3 = 3) False

I.2.2. Các cấu trúc điều khiển

Chương trình mu ốn hoạt động theo s ự điều khiển không ch ỉ có các l ệnh gán mà còn ph ải gồm các l ệnh điều khiển (rẽ nhánh, l ặp...). Các l ệnh này cho phép ch ương trình ho ạt động theo một kịch bản xác định.

I.2.2.1. Cấu trúc If...Then... End If If <Điều kiện> Then <Các lệnh> End If

Kiểm tra điều kiện (biểu thức logic)

- Nếu điều kiện là đúng (True) thì th ực hiện các l ệnh nằm trong c ấu trúc (gi ữa If và End If)

- Nếu điều kiện sai (False) thì bỏ qua, không thực hiện các lệnh này

I.2.2.2. Cấu trúc If...Then... Else... End If If <Điều kiện> Then <Các lệnh nếu điều kiện đúng> Else <Các lệnh nếu điều kiện sai> End If

Kiểm tra điều kiện

- Nếu điều kiện đúng, thực hiện nhánh đúng (Giữa If và Else)

- Nếu điều kiện sai, thực hiện nhánh sai (Giữa Else và End If)

Page 34: 1139020232Thuc Tap Tin Hoc Xay Dung

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

34

I.2.2.3. Select Case Select Case <Biểu thức> Case <Giá trị 1> <Các lệnh 1> Case <Giá trị 2> <Các lệnh 2> Case <Giá trị 3>, <Giá trị 4>: <Các lệnh 3, 4> Case Else <Các lệnh còn lại> End Select

Kiểm tra giá tr ị của một <Biểu thức>, tùy theo giá tr ị của biểu thức là gì thì th ực hiện các lện tương ứng. Khác v ới lệnh If ch ỉ có t ối đa 2 nhánh, l ệnh Select Case có th ể chia nhi ều nhánh, rất thích hợp cho các lệnh điều kiện phức tạp.

' Kiểm tra kết quả của câu trắc nghiệm Select Case txtGrade.Text Case "A" lblAnnounce.Caption = "Perfect!” Case "B" lblAnnounce.Caption = "Great!" Case "C" lblAnnounce.Caption = "Study harder!" Case "D" lblAnnounce.Caption = "Get help!" Case "F" lblAnnounce.Caption = "Back to basics!" Case Else lblAnnounce.Caption = "Error in grade" End Select

I.2.2.4. Vòng lặp Do While... Loop Do While <Điều kiện> <Các lệnh> Loop

Nếu điều kiện còn đúng thì thực hiện tiếp các lệnh giữa Do... Loop. Đây là vòng l ặp kiểm tra điều kiện trước, có ngh ĩa là n ếu <Điều kiện> sai ngay t ừ đầu thì <Các l ệnh> sẽ không được thực hiện 1 lần nào.

intCtr = 0 Do While intCtr <= 10 lblOut.Caption = intCtr intCtr = intCtr + 1 Loop

I.2.2.5. Vòng lặp Do... Loop While Do

Page 35: 1139020232Thuc Tap Tin Hoc Xay Dung

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

35

<Các lệnh> Loop While <Điều kiện>

Thực hiện các lệnh giữa Do... Loop cho đến khi điều kiện sai. Đây là vòng lặp kiểm tra điều kiện sau, có ngh ĩa là <Các l ệnh> sẽ được thực hiện ít nhất một lần (kể cả khi <Điều kiện> sai ngay từ đầu)

I.2.2.6. Vòng lặp For... Next For <biến Đếm> = <bắt Đầu> To <kết Thúc> [Step <khoảng Tăng>] <Các lệnh> Next [biến Đếm]

- Lặp với <biến Đếm> bắt đầu từ giá trị <bắt Đầu>, mỗi lần tăng một lượng <khoảng Tăng> cho đến bằng giá tr ị <kết Thúc>. M ỗi lần lặp thực hiện các l ệnh giữa For... Next

- Nếu không khai báo Step <khoảng Tăng>, giá trị tăng mặc định là 1

- Muốn lặp với <biến Đếm> giảm dần, đặt <khoảng Tăng> là giá trị âm (ví dụ -1)

For intCtr = 1 To 10 lblOut.Caption = intCtr Next For intCtr = 10 To 1 Step -1 lblOut.Caption = intCtr Next

I.2.2.7. Vòng lặp For Each... Next For Each <phần tử> In <nhóm> <các lệnh> Next

Biến <phần tử> (phải là kiểu Variant) lặp qua tất cả các phần tử con của <nhóm> (thường là kiểu tập hợp – Collection), mỗi lần lặp thực hiện <các lệnh>. Đây là lệnh rất thuận tiện để làm việc với nhóm các phần tử (ví dụ nhóm các control của form). Đoạn chương trình ví dụ dưới dây minh họa vòng lặp For Each với một tập hợp các xâu ký tự.

Dim s As Variant Dim Ten As New Collection Ten.Add "CNTT" Ten.Add "THXD" Ten.Add "CNPM" Ten.Add "KTHT" For Each s In Ten MsgBox s Next

Page 36: 1139020232Thuc Tap Tin Hoc Xay Dung

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

36

I.2.3. Chương trình con

Cũng như tất cả các ngôn ngữ lập trình khác, khi có nhi ều công việc được thực hiện lặp đi lặp lại bởi cùng một đoạn code, cách t ốt nhất là đưa đoạn code này vào m ột chương trình con để có thể sử dụng lại nhiều lần. Chương trình con có thể là Sub – giống procedure hoặc Function – giống function trong Pascal.

I.2.3.1. Sub Public | Private Sub <Tên sub> (danh sách tham số) <các lệnh> End Sub

Ví dụ

Private Sub TangGiaTri(a As Integer, b As Integer) a = a+b End Sub

Trong đoạn chương trình ví dụ trên:

- <Tên sub> là "TangGiaTri"

- Các tham số là a (kiểu Integer), b (kiểu Integer)

- Thủ tục thực hiện nhiệm vụ tăng biến a lên 1 lượng b

I.2.3.2. Function Public | Private Function <Tên function> (danh sách tham số) As <Kiểu function> <các lệnh> <Tên function> = <giá trị trả về> <các lệnh> End Function

Ví dụ

Private Function Tong(a As Integer, b As Integer) As Integer Tong = a + b End Function

Trong đoạn chương trình ví dụ trên:

- <Tên function> là "Tong"

- <Kiểu function> là Integer

- Các tham số là a (kiểu Integer), b (kiểu Integer)

- Hàm trả về tổng của 2 số a và b

I.2.3.3. Tham biến & tham trị

Để tìm hiểu về tham biến, tham trị, hãy trở lại ví dụ của Sub (vừa nêu ở phần trên). Ví dụ 1:

Page 37: 1139020232Thuc Tap Tin Hoc Xay Dung

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

37

Private Sub TangGiaTri(a As Integer, b As Integer) a = a+b End Sub Private Sub Command1_Click() Dim c As Integer c = 10 TangGiaTri(c, 10) MsgBox c End Sub

Kết quả của hộp thoại MsgBox là 20, có ngh ĩa là bi ến c đã được tăng lên 10 đơn v ị. Vẫn đoạn chương trình này, b ạn bổ sung thêm t ừ khóa ByVal vào trước tham s ố a trong Sub TangGiaTri để được đoạn chương trình sau. Ví dụ 2:

Private Sub TangGiaTri(ByVal a As Integer, b As Integer) a = a+b End Sub Private Sub Command1_Click() Dim c As Integer c = 10 TangGiaTri(c, 10) MsgBox c End Sub

Chạy đoạn chương trình này, hộp thoại MsgBox trả về giá trị 10. Tại sao vậy? Nguyên nhân vì trong tr ường h ợp này bi ến a trong Sub TangGiaTri không ph ải là bi ến c trong Sub Command1_Click. a chỉ là bản sao của c (do được truyền giá trị - by value), khi đó ta gọi a là tham trị.

Trong trường hợp của ví dụ 1, khai báo đầy đủ là

Private Sub TangGiaTri(ByRef a As Integer, ByRef b As Integer)

Khi đó, biến a trong Sub TangGiaTri chính là bi ến c trong Sub Command1_Click, t ăng giá trị của a chính là tăng giá trị của c. a gọi là tham chiếu (reference) của c. Trường hợp này ta gọi a là tham biến.

Chú ý: Nếu không khai báo gì, VB mặc định là ByRef (quy ước này ngược với Pascal – mặc định là tham trị)

I.2.4. Form

Windows là h ệ điều hành c ửa sổ, tất cả các giao ti ếp của người sử dụng với các ch ương trình chủ yếu thông qua cửa sổ. Cửa sổ chứa các control gọi là Form, trong VB có nhiều loại Form, tất cả đều có những thuộc tính chung.

Page 38: 1139020232Thuc Tap Tin Hoc Xay Dung

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

38

I.2.4.1. Các thuộc tính của Form

Nhiều thuộc tính c ủa một form ảnh hưởng đến hình ảnh của nó. Thu ộc tính Caption s ẽ quyết định text được hiểu thị trong title. N ếu thuộc tính BorderStyle của form không ph ải là Sizable thì ng ười dùng không th ể resize form lúc run-time. Thu ộc tính Icon quy ết định hình icon đuợc dùng trong tiêu đề của form, nhất là khi form thu nhỏ (minimized). Nếu bạn không mu ốn cho phép ng ười dùng minimize hay maximize form thì đặt thu ộc tính MinButton, MaxButton ra False. Nếu thuộc tính ControlBox là False thì form sẽ không có nút minimize, maximize hay close (x) trên góc ph ải của nó, đồng thời form cũng không có cả cả icon bên góc trái form như trong hình dưới đây

Thuộc tính WindowState xác định Form s ẽ có kích th ước bình th ường normal (=0), hay minimized (=1), maximized (=2).

Lưu ý là thuộc tính Font của Form sẽ được các control nằm trên nó thừa kế. Tức là khi bạn đặt một control lên form, thuộc tính Font của control ấy sẽ tự động trở nên giống y như của form.

I.2.4.2. Các sự kiện của Form

Nhìn từ một phương diện, Form c ũng giống như Control. T ừ 1 form, ta có th ể tạo nhiều form tương tự nhau. Trong thí dụ dưới đây, ta sử dụng MyForm và YourForm là 2 biến kiểu Form2 để tạo 2 form giống hệt nhau.

Dim MyForm As New Form2 Dim YourForm As New Form2 MyForm.Show YourForm.Show

Một Form cũng có nhiều Events rất hữu dụng.

Form_Initialize: Event này x ảy ra trước nhất và ch ỉ một lần thôi khi ta kh ởi tạo form đầu tiên. Ta dùng Form_Initialize event để thực hiện những gì cần phải làm chung cho tất cả các instances của form này.

Form_Load: Event này x ảy ra m ỗi l ần ta instantiate m ột form. N ếu ta ch ỉ dùng m ột instance duy nhất của một form trong chương trình thì Form_Load coi như tương đương với Form_Initialize. Ta dùng Form_Load event để initialise variables, controls v.v. cho instance này.

Bên trong Form_Load bạn không thể dùng SetFocus cho một control nào trên form vì form chưa hẳn thành hình (ra đời). Muốn làm việc ấy bạn phải delay (trì hoản) một chút xíu bằng cách dùng Control Timer để đợi cho Form_Load được hoàn tất. Thí dụ:

Private Sub Form_Load() Timer1.Interval = 500 Timer1.Enabled = True End Sub

Page 39: 1139020232Thuc Tap Tin Hoc Xay Dung

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

39

Private Sub Timer1_Timer() Timer1.Enabled = False ' Timer1_Timer only execute once txtName.Setfocus ' Make Tab Cursor start at TextBox txtName End Sub

Form_Activate: Mỗi lần một form trở nên active (khi form được hiện lên trên cùng so v ới các form khác) thì nó phát sinh sự kiện Activate.

Form_QueryUnload: Khi người dùng click d ấu x phía trên bên ph ải để close form thì nó phát sinh sự kiện QueryUnload với cú pháp sau:

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) End Sub

Event này cho ta m ột d ịp để Cancel Close action c ủa form (t ức là không cho User close form) bằng cách set Cancel b ằng 1. UnloadMode cho ta bi ết ai, task hay form nào mu ốn close form này.

Ngoài ra, b ạn cũng nên bi ết rằng một form tự động Load hay tr ở nên Active n ếu bạn nhắc đến nó, thí dụ như dùng Form2.List1. Khi một form đã được loaded rồi bạn có thể hide (làm cho biến mất) nó. Kế đó, khi bạn show form ra trở lại thì form không có gì thay đổi. Nhưng nếu bạn Unload m ột form (thí d ụ bằng cách dùng Unload Form2 ), r ồi sau đó load trở lại bằng cách dùng Form2.Show chẳng hạn, thì Form phải trải qua quá trình Form_Load, và d ĩ nhiên form mất tất cả những gì có trước đây. Ngoài ra, Hide/Show một form đã được loaded rồi thì rất nhanh, còn Unload/Load thì mất thì giờ hơn.

Khi bạn Show một Form chưa hiện hữu thì form sẽ được loaded và show. Đôi khi bạn muốn Load một form, r ồi làm vi ệc với nó tr ước khi Show, trong tr ường hợp đó bạn dùng Load Form2 rồi một chập sau dùng Form2.Show.

I.2.4.3. MDI Form

Đôi khi bạn muốn có một MDI form, tức là một form có thể chứa nhiều form con bên trong. Dạng MDIform này th ường được dùng trong các ứng d ụng nh ư Micrsoft Word hay AutoCAD để có th ể mở nhiều document cùng m ột lúc, mỗi document được hiển th ị trong một form con. Để có m ột MDIForm b ạn cần phải dùng menu Project | Add MDI Form . Mỗi VB6 project ch ỉ có th ể có t ối đa một MDIForm. Muốn một form tr ở thành một form con bạn set thuộc tính MDI Child của nó thành True. Khi run-time b ạn không th ể ẩn (đặt thuộc tính Visible là False) một MDIChild form, nhưng có thể minimize nó. Nếu bạn thật sự muốn ẩn nó thì phải dùng mánh lới là cho nó vị trí (top,left) số âm lớn hơn kích thước nó để nó nằm ngoài tầm hiển thị của form. Trong một chương trình dùng MDI Form, khi bạn click MDI Form nó không nh ảy ra phía tr ước và che các form con, nh ưng vẫn luôn luôn n ằm ở dưới

Page 40: 1139020232Thuc Tap Tin Hoc Xay Dung

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

40

I.2.5. Module

Khi quy mô của chương trình trở nên phức tạp, việc viết tất cả mã lệnh tại cùng một file mã chương trình sẽ gây khó khăn trong quản lý mã nguồn. Chia để trị là giải pháp tốt nhất trong trường h ợp này. Mã ch ương trình (g ồm các bi ến, hàm...) được phân chia thành nhi ều module khác nhau, mỗi module là tập hợp của nhiều biến, hàm có cùng tính ch ất hoặc chức năng (việc phân chia là tùy thuộc quan điểm của người phát triển).

Các module VB được lưu vào các file có phần mở rộng .BAS

I.2.6. Cách thức tổ chức dữ liệu trong VB project

Một ứng dụng không thể thiếu dữ liệu, công việc đầu tiên khi xây dựng ứng dụng là tổ chức các dữ liệu trong ứng dụng đó (các kiểu biến như thế nào? đặt tên biến ra sao? khai báo biến ở đâu? biến toàn cục hay địa phương).

Dưới đây là một số lời khuyên khi bạn tổ chức dữ liệu trong một VB project.

- Không lưu dữ liệu toàn cục trong Form : Hầu hết những người mới làm quen v ới VB đều cùng có m ột thói quen không t ốt là để các bi ến toàn c ục trong Form. Khi chạy chương trình, Form ch ưa được khởi tạo. Nó ch ỉ được khởi tạo khi nào b ạn sử dụng các thao tác hoặc thuộc tính của Form lần đầu tiên. Ngoài ra, form có thể bị loại khỏi bộ nhớ khi bạn dùng phương thức Unload, khi đó các giá trị tính toán được sẽ bị mất. (xem ví dụ minh họa ở phầ cuối của mục này). Giải pháp cho vấn đề này là lưu dữ liệu trong module , mỗi khi form load, đọc toàn bộ dữ liệu cần thiết từ module vào form. Khi người dùng click nút OK trên form thì m ới cập nhật dữ liệu từ form vào module.

- Đối với các form nh ập dữ liệu, chỉ nên sử dụng chế độ modal. Tức là ch ế độ sử dụng form ở dạng hộp thoại: Khi form được bật lên, người dùng chỉ có thể tương tác với form đó. Muốn tác động đến các thành ph ần khác c ủa chương trình, ph ải đóng modal form lại. (ví dụ: hộp thoại mở file của các ứng dụng).

Sau đây là ví dụ minh họa về các vấn đề đã được nêu ở trên:

I.2.7. Class module

Class module cho phép l ập trình hướng đối tượng với VB. Class của VB có th ể định nghĩa các thuộc tính, thao tác. Các Class module c ủa VB được lưu vào các file có ph ần mở rộng *.CLS

I.2.7.1. Khái niệm Object & Class

Nói một cách nôm na, lập trình theo hướng đối tượng là thiết kế các bộ phận phần mềm của chương trình, g ọi là Object sao cho m ỗi bộ phận có th ể tự lo li ệu công tác c ủa nó giống

Page 41: 1139020232Thuc Tap Tin Hoc Xay Dung

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

41

như một người thầu ngoài đời vậy. Chắc có l ẽ bạn sẽ hỏi thế thì các Sub hay Function mà bạn đã từng viết để xử lý từng giai đoạn trong chương trình có thể đảm trách vai trò của một thầu không?

Người thầu chẳng những có thể làm được công tác (Subs và Functions) gì mà còn chịu trách nhiệm luôn cả mọi thứ vật dụng cần thiết (data) cho việc ấy nữa.

Có một cách định ngh ĩa khác cho Object là " một Object g ồm có data structure và các Subs/Functions làm việc trên các data ấy". Thông thường, khi ta dùng Object ít khi giám thị chúng, ngược lại nếu khi có sự cố gì thì ta muốn chúng báo cáo cho ta biết.

I.2.7.2. Lập trình OOP trong VB

Trong VB6, các Forms, Controls hay ActiveX mà ta v ẫn dùng lâu nay thực chất là các Object. Lấy thí dụ như Listbox. Một Listbox tự quản lý các items hiển thị bên trong nó. Ta biết listbox List1 đang có bao nhiêu items b ằng cách hỏi List1.ListCount. Ta bi ết item nào vừa mới được selected b ằng cách h ỏi List1.ListIndex. Ta thêm m ột item vào listbox b ằng cách gọi method AddItem của List1, ..v.v.. Nói cho đúng ra, Object là một thực thể của một Class. Nếu Listbox là một Class thì List1, List2 là các thực thể của Listbox.

Ngay cả một form tên frmMyForm mà ta vi ết trong VB6 ch ẳng hạn, nó cũng là một Class. Thường thường ta dùng thẳng frmMyForm như sau:

frmMyForm.Show

Trong trường hợp này th ật ra frmMyForm tuy là m ột Class nh ưng được dùng y nh ư một Object. Còn nếu muốn, ta có thể tạo ra hai, ba Objects c ủa Class frmMyForm cùng một lúc như trong thí dụ sau:

Dim firstForm As frmMyForm Dim secondForm As frmMyForm Set firstForm = New frmMyForm Set secondForm = New frmMyForm firstForm.Show secondForm.Show

Trong thí d ụ trên ta khai báo firstForm và secondForm là nh ững Objects c ủa Class frmMyForm. Sau đó ta khởi tạo các Objects firstForm và secondForm bằng statements 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

Page 42: 1139020232Thuc Tap Tin Hoc Xay Dung

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:

Page 43: 1139020232Thuc Tap Tin Hoc Xay Dung

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

Page 44: 1139020232Thuc Tap Tin Hoc Xay Dung

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.

Page 45: 1139020232Thuc Tap Tin Hoc Xay Dung

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:

Page 46: 1139020232Thuc Tap Tin Hoc Xay Dung

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ó.

Page 47: 1139020232Thuc Tap Tin Hoc Xay Dung

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.

Page 48: 1139020232Thuc Tap Tin Hoc Xay Dung

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 <pathname> For [Input | Output | Append] As <filenumber> [Len = buffersize]

Page 49: 1139020232Thuc Tap Tin Hoc Xay Dung

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 <pathname> 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 "<Tên file>" 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

Page 50: 1139020232Thuc Tap Tin Hoc Xay Dung

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 <Tên tr ường>=<Giá tr ị> 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 <Tên tr ường> và <Giá tr ị>, 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

Page 51: 1139020232Thuc Tap Tin Hoc Xay Dung

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

Page 52: 1139020232Thuc Tap Tin Hoc Xay Dung

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

Page 53: 1139020232Thuc Tap Tin Hoc Xay Dung

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.

Page 54: 1139020232Thuc Tap Tin Hoc Xay Dung

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...)

Page 55: 1139020232Thuc Tap Tin Hoc Xay Dung

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 (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 xin xem trong ph ần CommonDialog). Chú ý r ằng với phiên bản mới nhất của VSFlexGrid,

Page 56: 1139020232Thuc Tap Tin Hoc Xay Dung

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).

Page 57: 1139020232Thuc Tap Tin Hoc Xay Dung

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" 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

Page 58: 1139020232Thuc Tap Tin Hoc Xay Dung

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

58

- 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 .MenuItems.Add "mnuSoanThao", "mnuSoanThao_Paste", smiNone, "&Paste", _

Page 59: 1139020232Thuc Tap Tin Hoc Xay Dung

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

59

, 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 toá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 toá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 toán, nhất là bài toá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 toá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

Page 60: 1139020232Thuc Tap Tin Hoc Xay Dung

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

60

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 VSFlexGrid.

Page 61: 1139020232Thuc Tap Tin Hoc Xay Dung

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

61

I.5. Kết nối cơ sở dữ liệu với ADO Visual Basic 6 cho ta sự lựa chọn về kỹ thuật khi lập trình với database, hoặc là dùng DAO (đây là kỹ thuật đã cũ), hoặc là dùng ADO (ActiveX Data Objects).

ADO cho phép ta làm vi ệc với mọi loại nguồn dữ liệu (data sources), không nh ất thiết phải là Access Database hay ODBC. Ngu ồn dữ liệu có thể là một file text, trong đó mỗi dòng là một record gồm những fields ngăn cách bởi các dấu phẩy.

Với ADO cho ta kết nối (connect) với một database qua một Connection bằng cách chỉ định một Connection String . Trong Connection String có Database Provider (thí d ụ như Jet, ISAM, Oracle, SQLServer..v.v.), tên Database, UserName/Password để logon vào m ột database v.v...

Có thể coi Access Database (*.mdb) là m ột database điển hình bao g ồm các table (bảng), mỗi table gồm các record (bản ghi – dòng trong b ảng), mỗi dòng gồm các field (trường – cột trong bảng). Trong ADO, người ta còn sử dụng khái niệm recordset (tập các bản ghi) để thay cho table. M ột recordset không nh ất thi ết lúc nào c ũng là m ột table có s ẵn trong database, mà có thể là kết quả của một câu query trích dữ liệu từ một hoặc nhiều table trong database đó.

VB6 cung c ấp một control có tên là ADO Data cho phép b ạn kết nối đến database, lấy về một recordset, di chuyển qua từng record của recordset để lấy dữ liệu. Bình thường, khi bạn mới khởi động một project VB6 m ới, Control ADO Data không có s ẵn. Muốn có nó, b ạn

Page 62: 1139020232Thuc Tap Tin Hoc Xay Dung

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

62

hãy dùng Menu Project | Components...(phím tắt Ctrl+T), rồi chọn Microsoft ADO Data Control 6.0 (OLEDB) từ giao diện Components như dưới đây:

I.5.1. Thiết lập Connection String

Bạn hãy b ắt đầu m ột dự án VB6 m ới, đặt tên là ADODataControl b ằng cách ch ọn tên project trong Project Explorer bên ph ải rồi sửa thuộc tính Name trong Properties Window. Form chính đặt tên (thu ộc tính Name) là frmADO, nhãn (thu ộc tính Caption) là ADO DataControl Demo.

Nháy đúp chu ột lên Icon c ủa Control Data ADO (xem hình v ẽ) trong Toolbox. M ột Control Data ADO tên Adodc1 sẽ hi ện ra trên Form. Mu ốn cho nó n ằm bên d ưới Form, giống như một StatusBar, hãy đặt l ại thu ộc tính Align của nó trong Properties Window thành 2 - vbAlignBottom.

Trên cửa sổ Properties Windows, chọn thuộc tính (Custom), sau đó click lên nút Browse để hộp thoại Property Pages hiện ra. Trong h ộp thoại này, trên Tab General chọn Radio (Option) Button Use Connection String (hình vẽ) rồi click nút Build....

Page 63: 1139020232Thuc Tap Tin Hoc Xay Dung

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

63

Trong hộp thoại Data Link Properties , Tab Provider, chọn Microsoft Jet 3.51 OLE DB Provider, rồi click nút Next >>.

Ở ch ỗ Select or enter a database name ta ch ọn C:\Program Files\Microsoft Visual Studio\VB98\BIBLIO.MDB, trong máy c ủa bạn có th ể file này th ường nằm trên ổ đĩa C. Sau đó, b ạn có th ể click nút Test Connection phía d ưới để thử xem connection có được thiết l ập tốt không. N ếu mọi việc tốt đẹp, b ạn s ẽ nh ận được thông báo Test Connection Successed. Ckick OK để hoàn thành việc xây dựng Connection String.

Page 64: 1139020232Thuc Tap Tin Hoc Xay Dung

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

64

I.5.2. Thiết lập RecordSource

Lập connection xong r ồi, ta ch ỉ định Recordset b ằng cách ch ọn thuộc tính RecordSource của control Adodc1, click vào nút Browse bên phải. Trong hộp thoại Property Pages vừa hiện ra, ch ọn 2-adCmdTable làm Command Type , kế đó mở Combo box cho Table or Stored Procedure Name để ch ọn table Titles (trong database Biblio.mdb). V ới thao tác này, bạn đã xác định được Recordset hiện tại của Adodc1 là bảng Titles

Tùy theo cách ta dùng Recordset trong ADO, nó có ba loại và được gọi là Cursor Type:

- Static Cursor: Static Cursor cho b ạn một static copy (bảo sao t ĩnh) của các records. Trong lúc b ạn dùng Static Cursor, n ếu có ai khác s ửa đổi hay thêm, b ớt gì vào recordset bạn sẽ không thấy.

- Keyset Cursor: Keyset Cursor h ơn Static Cursor ở chỗ trong lúc b ạn dùng nó, n ếu có ai s ửa đổi record nào b ạn sẽ biết. Nếu ai xóa record nào, b ạn sẽ không th ấy nó nữa. Tuy nhiên bạn sẽ không biết nếu có ai thêm một record nào vào recordset.

Page 65: 1139020232Thuc Tap Tin Hoc Xay Dung

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

65

- Dynamic Cursor: Trong lúc b ạn đang dùng m ột Dynamic Cursor, n ếu có ai khác sửa đổi hay thêm, bớt gì vào recordset bạn sẽ thấy hết.

Bạn hãy chọn trị số 2-adOpenDynamic cho property Cursor Type của Adodc1:

I.5.3. Bind control với ADO Data

Với các thao tác mô t ả trên, bạn đã hoàn thành việc xác định một ADO Data đầy đủ, để thể hiện d ữ li ệu t ừ ADO Data control ra form, b ạn ph ải ti ếp t ục th ực hi ện bước bind các control với ADO Data . Hầu h ết các control (Text Box, Combo Box, List Box, Picture, Grid...) đều có thể bind dữ liệu. Tuy nhiên, trong ph ạm vi các ứng dụng Tin học Xây dựng, chúng ta thường sử dụng các bảng (grid) để thể hiện dữ liệu. Do đó, trong ví dụ này, chúng ta cũng sử dụng grid. Có 2 loại grid thường được sử dụng:

- Microsoft Data Grid Control 6.0 (OLDDB) : Số hiệu phiên b ản có th ể khác trên máy tính c ủa bạn. Đây là grid chu ẩn của Microsoft xây d ựng để làm việc với ADO Data. Tuy nhiên, grid này còn nghèo nàn về chức năng.

- VideoSoft VSFlexGrid 7.0 (OLEDB) : Đây là grid được xây d ựng bởi hãng th ứ 3 (không phải Microsoft). Grid cho phép bạn bind dữ liệu với ADO Data hoặc sử dụng trực ti ếp, không thông qua ADO Data (unbind). VSFlexGrid có nhi ều tính n ăng thuận ti ện h ơn. Ph ần cài đặt và thêm VSFlexGrid control vào project, xin xem (I.4.1.2)

Trong ví dụ này chúng ta sẽ sử dụng VSFlexGrid: Thêm VSFlexGrid control vào form. Tên mặc định c ủa control m ới này là VSFlexGrid1. Ch ọn VSFlexGrid1, trong Properties Windows, sửa thuộc tính DataSource của nó thành Adodc1 (bạn ch ỉ cần chọn thuộc tính, click vào ComboBox bên phải đển chọn DataSource).

Đến đây, mặc dầu chưa viết một hàng code nào, bạn có thể chạy chương trình và nó sẽ hiển thị như dưới đây:

Page 66: 1139020232Thuc Tap Tin Hoc Xay Dung

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

66

I.5.4. Làm việc với Database bằng code

Ví dụ trên cho phép ta k ết nối với database mà không c ần sử dụng một dòng code nào. Ưu điểm của phương pháp này là visual nên d ễ học đối với người mới bắt đầu. Tuy nhiên, khi sử dụng với các m ục đích phức tạp hơn hoặc trong tri ển khai cài đặt trên nhi ều máy tính khác nhau thì phương pháp này bộc lộ khá nhiều hạn chế.

Theo kinh nghi ệm của chúng tôi, các b ạn nên phát tri ển ứng dụng của mình b ằng cách sử dụng code, bạn có thể can thiệp sâu hơn vào database cũng như có thể thực hiện được nhiều chức năng phức tạp hơn, không phụ thuộc vào đường dẫn tuyệt đối của database. Hãy theo dõi ví dụ sau:

Tạo m ới project, thêm VSFlexGrid vào project c ủa b ạn (menu Project | Components ). Thêm VSFlexGrid control vào form với tên mặc định là VSFlexGrid1.

Chọn menu Project | References , trên h ộp thoại References, tick vào th ư viện Microsoft ActiveX Data Object 2.5 Library (số hiệu phiên bản có thể khác trên máy tính của bạn).

Thêm đoạn code rất đơn giản sau đây vào form

Option Explicit Private Sub Form_Load() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset ' Mở connection trỏ đến Biblio.mdb database ' Nếu cài đặt trên máy tính khác & file Biblio.mdb ở cùng đường dẫn với ' chương trình, bạn có thể sử dụng App.Path thay cho "C:\Pro...." cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ "C:\Program Files\Microsoft Visual Studio\VB98\" & "BIBLIO.MDB" ' Tạo recordset lấy cột [Title] của bảng [Titles] ' Trong query, không nên sử dụng "select *..." mà nên để tường mình các ' tên trường rs.Open "select Title from titles", cn, adOpenDynamic, adLockOptimistic

Page 67: 1139020232Thuc Tap Tin Hoc Xay Dung

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

67

' Bind VSFlexGrid1 vào recordset vừa tạo ra Set VSFlexGrid1.DataSource = rs End Sub

Bạn có thể thấy ngay đoạn code này cũng cho kết quả tương tự như ví dụ trước, nhưng đơn giản và rõ ràng h ơn nhiều. Đó là ch ưa kể đến việc nó s ẽ không phụ thuộc vào đường dẫn tuyệt đối của database.

Ngoài ra, trong đồ án t ốt nghiệp Tin h ọc Xây d ựng, r ất nhiều bạn lấy dữ liệu từ các file MDB c ủa SAP2000 đưa vào các recordset. Sau đó s ử d ụng các thao tác MoveNext, MoveFirst, MoveLast, MovePrevious để di chuyển giữa các record. T ệ hơn là có b ạn lặp đi lặp lại thao tác này nhi ều lần dẫn đến chương trình ch ạy rất chậm (thời gian có khi tính đến phút), nhất là đối với dữ liệu khoảng trên 1 vạn phần tử.

Để tránh những trường hợp đáng tiếc này, xin lưu ý các bạn là đối với các recordset phải sử dụng lại nhiều lần. Nên tránh làm vi ệc trực tiếp với Recordset b ằng cách chuyển toàn b ộ Recordset này ra m ột mảng bằng thao tác GetRows (Tỷ lệ nhanh hơn so với phương pháp cũ trung bình là khoảng 5 lần phụ thuộc vào số lần duyệt toàn bộ Recordset).

Trong trường hợp chỉ duyệt 1 lần, bạn không cần phải sử dụng GetRows nhưng nên lưu ý là Open recordset với các tham số là adOpenForwardOnly và adLockReadOnly (xem ví dụ), với các tham số này bạn chỉ có thể duyệt recordset theo chiều tiến nhưng tốc độ nhanh gấp đôi.

Option Explicit ' GetTickCount: số mili giây kể từ khi bật máy tính – dùng để đo thời gian Private Declare Function GetTickCount Lib "kernel32" () As Long Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Private Sub Form_Load() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ "C:\Program Files\Microsoft Visual Studio\VB98\" & "BIBLIO.MDB" ' Mở recordset với chế độ này chỉ cho phép duyệt theo chiều tiến ' Nhưng tốc độ nhanh gấp đôi rs.Open "select Title, Subject from titles", cn, adOpenForwardOnly, _ adLockReadOnly End Sub Private Sub Command1_Click() Dim q As Variant Dim a As Long Dim i As Integer, j As Integer Dim b As String a = GetTickCount ' Bắt đầu tính thời gian duyệt rs.MoveFirst ' Về đầu recordset

Page 68: 1139020232Thuc Tap Tin Hoc Xay Dung

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

68

q = rs.GetRows ' Lấy toàn bộ dữ liệu trong recordset vào 1 mảng 2 chiều For i = 1 To 10 ' Duyệt mảng 10 lần For j = 1 To UBound(q, 2) b = q(0, j) ' Lấy cột đầu tiên (Title) trong recordset Next Next MsgBox GetTickCount – a ' Hiện ra số mili giây để duyệt 10 lần recordset End Sub Private Sub Command2_Click() Dim a As Long Dim i As Integer Dim b As String a = GetTickCount ' Bắt đầu tính thời gian duyệt For i = 1 To 10 ' Duyệt recordset 10 lần rs.MoveFirst ' Về đầu recordset Do While Not rs.EOF b = rs.Fields(0) ' Lấy dữ liệu cột đầu tiên (Title) rs.MoveNext ' Chuyển sang bản ghi kế tiếp Loop Next MsgBox GetTickCount – a ' Hiện ra số mili giây để duyệt 10 lần recordset End Sub

Đoạn chương trình ví dụ trên thực hiện việc mở table Titles của database Biblio.mdb, sau đó duyệt qua table 10 l ần theo 2 ph ương pháp. Khi click nút Command1 thì s ẽ đưa tất cả dữ liệu vào 1 m ảng rồi duyệt. Khi click nút Command2 thì duy ệt bằng các thao tác MoveNext giữa các record. Sau khi quá trình duyệt kết thúc thì đưa ra khoảng thời gian (tính bằng mili giây) để so sánh tốc độ của 2 phương pháp.

Ngoài ra, có m ột điểm đáng chú ý là: Khi tìm ki ếm dữ liệu theo điều kiện thì nên s ử dụng các câu lệnh SQL để lọc dữ liệu hơn là lấy toàn bộ dữ liệu về recordset rồi dùng vòng lặp để tìm kiếm. Các câu lệnh SQL được tối ưu cho quá trình tìm kiếm nên thực hiện nhanh hơn rất nhiều.

I.6. Các hàm API cơ bản API là vi ết tắt của cụm từ Application Programming Interface. API th ực chất là tập hợp của các hàm cho phép chúng ta làm vi ệc với các component, các ứng dụng và các h ệ điều hành. Khi nhắc đến khái niệm API trong Windows, chúng ta bi ết ngay rằng đây là tập hợp các hàm do Windows cung cấp cho phép làm việc trực tiếp với Windows.

VB cung c ấp các công cụ dễ dùng để tạo các ứng dụng trên Windows. Tuy nhiên, n ếu bạn muốn can thiệp sâu vào h ệ thống thì ch ỉ sử dụng VB là không đủ. Do đó, VB hỗ trợ người phát triển gọi các hàm API của Windows để tăng sức mạnh của hệ thống.

Page 69: 1139020232Thuc Tap Tin Hoc Xay Dung

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

69

I.6.1. Khai báo API

Các hàm API trong Windows được đặt trong các thư viện liên kết động DLL, để khai báo sử dụng một API cần chỉ rõ tên file DLL, các tham s ố và kiểu tham số, giá tr ị trả về của hàm. Sau đâu là cú pháp khai báo API

<Public | Private> Declare Sub <Tên sub> Lib "<tên thư viện>" (<danh sách tham số>) <Public | Private> Declare Function <Tên hàm> Lib "<tên thư viện>" (<danh sách tham số>) As <Kiểu trả về>

Sau đây là một ví dụ

Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long

Tên hàm khai báo trong VB th ường giống với tên hàm trong th ư viện liên k ết động, tuy nhiên bạn có thể khai báo với tên khác, ví dụ

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Nếu bạn thắc mắc, khai báo dài nh ư mấy ví dụ trên thì làm sao nh ớ nổi? Hãy yên tâm, VB cung cấp cho bạn một công cụ để đưa nhanh các hàm API vào project của bạn mà chẳng cần phải nhớ gì ngoài tên của API.

Để sử dụng công cụ này, bạn vào menu Start / Programs / Microsoft Visual Studio 6.0 / Microsoft Visual Studio 6.0 Tools / API Text Viewer . Trên ứng dụng API Viewer, ch ọn menu File | Load Text File. Trên hộp thoại Select a Text API file, chọn file WIN32API.txt tại thư mục C:\Program Files\Microsoft Visual Studio\Common\Tools\Winapi. Thao tác này chỉ cần làm lần đầu tiên, các lần sau bạn chỉ cần chọn file Win32API trên menu File.

Page 70: 1139020232Thuc Tap Tin Hoc Xay Dung

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

70

Sau đó, b ạn ch ỉ c ần nh ập vào vài ký t ự đầu c ủa tên hàm t ại m ục "Type the first few letters...", khi ch ọn được hàm c ần thiết, click đúp vào tên hàm ho ặc click vào nút Add để thêm hàm vào danh sách Selected Items. Click Copy để sao chép các thông tin này, sau đó bạn có thể paste đoạn code khai báo API vào project của mình.

I.6.2. Các hàm API trên DC (Device Context)

Form và PictureBox h ỗ trợ các l ệnh v ẽ b ằng VB, tuy nhiên các l ệnh này quá đơn gi ản, không thể sử dụng để vẽ các hình phức tạp, do đó chúng ta phải sử dụng các hàm vẽ API.

Để vẽ trên Windows, các b ạn phải làm quen với khái niệm Device Context (DC). Mỗi DC là một màn hình ảo cho phép b ạn vẽ trên nó. DC có th ể là một màn hình ảo trên bộ nhớ, cũng có thể là một phần của màn hình mà bạn có thể nhìn thấy được.

Để vẽ trên DC, Windows cung cấp các dụng cụ vẽ: pen (bút vẽ), brush (chổi vẽ)... Các lệnh vẽ cơ bản gồm có MoveToEx, LineTo. Ngoài ra còn có các hàm v ẽ khác như Polyline (vẽ đường gấp khúc), Polygon (vẽ và tô màu đa giác), PolyBezier (vẽ đường cong)...

Trong VB, các control Form và PictureBox có thuộc tính [hdc]. Do đó, các control này thích hợp nhất để thực hiện các hàm vẽ bằng API.

Chú ý: Các khai báo hàm trong ví dụ dưới đây tương đối dài, các bạn không nên chép lại mà nên sử dụng công cụ API Viewer để lấy nhanh khai báo hàm.

' Kiểu POINTAPI lưu thông tin về điểm gồm 2 tọa độ x, y Public Type POINTAPI x As Long y As Long End Type ' Tạo ra chổi vẽ với màu là [crColor] ' Để nhập màu, dùng hàm RGB(red, green, blue) của VB Public Declare Function CreateSolidBrush Lib "gdi32" Alias "CreateSolidBrush" (ByVal crColor As Long) As Long ' Chọn đối tượng [hObject] cho màn hình ảo [hdc] ' Nếu [hObject] là chổi vẽ thì tức là sử dụng chổi vẽ [hObject] cho [hdc] ' [hObject] còn có thể là nhiều loại tài nguyên khác: pen, font... Public Declare Function SelectObject Lib "gdi32" Alias "SelectObject" (ByVal hdc As Long, ByVal hObject As Long) As Long ' Chuyển vị trí bút vẽ của màn hình ảo [hdc] đến điểm [x], [y] ' [lpPoint] là tọa độ của bút vẽ trước khi chuyển Public Declare Function MoveToEx Lib "gdi32" Alias "MoveToEx" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long ' Trên màn hình ảo [hdc], vẽ đoạn thẳng từ vị trí hiện tại của bút vẽ ' đến điềm [x], [y]. Sau đó chuyển bút vẽ đến điểm này Public Declare Function LineTo Lib "gdi32" Alias "LineTo" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long

Page 71: 1139020232Thuc Tap Tin Hoc Xay Dung

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

71

' Vẽ đường cong bezier qua các điểm [lppt] ' Số lượng điểm phải nhiều hơn 3 ' [lppt] là điểm đầu trong mảng có [cPoints] phần tử, các phần tử của mảng ' có kiểu là POINTAPI (xem phần ví dụ vẽ đường cong để biết chi tiết) Public Declare Function PolyBezier Lib "gdi32" Alias "PolyBezier" (ByVal hdc As Long, lppt As POINTAPI, ByVal cPoints As Long) As Long ' Vẽ đường gấp khúc qua các điểm [lpPoint] ' [lpPoint] là điểm đầu trong mảng các điểm của đường gấp khúc ' [nCount] là số điểm Public Declare Function Polyline Lib "gdi32" Alias "Polyline" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long ' Vẽ và tô màu đa giác qua các điểm [lpPoint] ' Màu tô của đa giác là màu của chổi vẽ của [hdc] Public Declare Function Polygon Lib "gdi32" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long ' Xóa đối tượng [hObject] ' Các chổi vẽ tạo bởi lệnh CreateSolidBrush, font tạo bởi lệnh CreateFont... ' Đều phải xóa ngay bằng lệnh DeleteObject, nếu không chúng sẽ chiếm nhiều ' tài nguyên của hệ thống Public Declare Function DeleteObject Lib "gdi32" Alias "DeleteObject" (ByVal hObject As Long) As Long

Chương trình ví dụ sử dụng các hàm API để vẽ một đường cong trên form.

Option Explicit Private Type POINTAPI x As Long y As Long End Type ' Khai báo các hàm vẽ trên Device Context Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long Private Declare Function PolyBezier Lib "gdi32" (ByVal hdc As Long, lppt As POINTAPI, ByVal cPoints As Long) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long Private Sub Form_Paint() ' Đường cong sẽ đi qua 4 đỉnh, đỉnh đầu và đỉnh cuối giống nhau -> ' đây là đường cong kép kín Dim p(4) As POINTAPI p(0).x = 0: p(0).y = 0 p(1).x = 100: p(1).y = 0 p(2).x = 100: p(2).y = 100 p(3).x = 0: p(3).y = 0

Page 72: 1139020232Thuc Tap Tin Hoc Xay Dung

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

72

Dim brush As Long ' [brush], chổi vẽ có màu đen brush = CreateSolidBrush(RGB(0, 0, 0)) Dim oldbrush As Long ' [oldbrush], chổi vẽ trước ' của màn hình ảo [hdc] oldbrush = SelectObject(Me.hdc, brush) ' chọn chổi vẽ mới, lưu lại chổi cũ PolyBezier Me.hdc, p(0), 4 ' Vẽ đường cong kép kín qua 4 điểm SelectObject Me.hdc, oldbrush ' Chọn lại chổi vẽ cũ DeleteObject brush ' Rồi mới xóa được chổi vẽ đã tạo ra End Sub

Ví d ụ trên minh h ọa vi ệc s ử d ụng các hàm API để v ẽ m ột đường cong (s ử d ụng hàm PolyBezier). Một điều cần chú ý v ới tất cả các hàm v ẽ trên DC là vi ệc tạo chổi vẽ, chọn chổi vẽ cho DC, xóa ch ổi vẽ... phải tuân theo đúng quy trình nh ư trong ví d ụ. Nếu không thực hiện theo th ứ tự đó, chương trình v ẫn chạy nhưng sẽ không gi ải phóng hoàn toàn b ộ nhớ. Nếu chương trình vẽ nhiều lần, bộ nhớ sẽ nhanh chóng bị đầy.

Page 73: 1139020232Thuc Tap Tin Hoc Xay Dung

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

73

CHƯƠNG II. Thiết kế phần mềm

II.1. Khái quát về UML

II.1.1. Giới thiệu UML

UML là ngôn ngữ mô hình hóa, bao gồm một hệ thống chuẩn các ký pháp (tương tự như các tiêu chuẩn về bản vẽ: quy định kích thước chữ, độ dày của nét, các ký hi ệu quy ước trong bản vẽ kỹ thuật) và tập các luật để sử dụng các ký pháp đó.

Xây nhà, có thể bạn không cần bản vẽ thiết kế. Tuy nhiên, nếu quy mô công trình càng l ớn, số lượng người tham gia càng đông thì nhu cầu có bản vẽ thiết kế càng cao. Bản vẽ chính là ngôn ngữ chung giữa chủ nhà, người thiết kế, người chỉ đạo thi công và người thợ. Về một khía cạnh nào đó, có th ể coi UML là bản vẽ thiết kế của phần mềm, UML là ngôn ng ữ chung giữa khách hàng, người thiết kế và người phát triển phần mềm.

Để sử dụng được UML, cần hiểu các vấn đề chính sau:

- Các phần tử cơ bản trong mô hình UML

- Các quy định để liên kết các phần tử thành mô hình

II.1.2. Các khái niệm của UML

Để hình thành mô hình UML, chúng ta c ần 3 khối: Phần tử, quan hệ, biểu đồ. Phần tử là yếu tố căn bản nhất trong mô hình, các quan hệ gắn các phần tử này với nhau, biểu đồ nhóm tập hợp các phần tử.

II.1.2.1. Phần tử mô hình

Phần tử gồm 4 loại: cấu trúc, hành vi, nhóm và chú thích

Phần tử cấu trúc

Là thành phần tĩnh, biểu diễn các khái niệm hay thành phần vật lý

- Lớp (class): Mô tả tập các đối tượng (object) cùng chung thuộc tính và thao tác. Biểu diễn bằng hình chữ nhật gồm 3 phần: Tên lớp, các thuộc tính, các thao tác

- Trường hợp sử dụng (UseCase – UC): Tập trình t ự các hành động mà h ệ thống thực hiện để đạt một kết quả cho tác nhân nào đó. Theo nghĩa hẹp, UC thường tương ứng với một chức năng của phần mềm.

- Thành phần (Component): Biểu diễn các file mã ngu ồn, các t ệp dữ liệu trong quá trình phát triển hệ thống

Page 74: 1139020232Thuc Tap Tin Hoc Xay Dung

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

74

Phần tử hành vi

Là thành phần động của hệ thống, biểu diễn hành vi theo thời gian và không gian

- Tương tác: là hành vi bao g ồm tập các thông điệp trao đổi giữa các đối tượng trong ngữ cảnh cụ thể để thực hiện mục đích cụ hể.

- Máy trạng thái: Là hành vi ch ỉ ra trật tự các trạng thái mà đối tượng hay tương tác sẽ đi qua để đáp ứng sự kiện. Hành vi của lớp hay cộng tác của lớp có thể được xác định bằn máy trạng thái. Máy trạng thái kích hoạt nhiều phần tử, bao gồm trạng thái, chuyển tiếp (từ trạng thái này sang tr ạng thái khác), s ự kiện và các ho ạt động (đáp ứng sự kiện)

Phần tử nhóm

Là cơ chế tổ chức các phần tử vào cùng một gói (package). Gói chỉ mang tính logic (chỉ tổn tại trong th ời gian phát tri ển hệ thống, không t ồn tại vào th ời gian ho ạt động của chương trình).

Phần tử chú thích

Sử dụng để chú giải cho các lược đồ của UML, bổ sung thêm các thông tin cho các lược đồ.

II.1.2.2. Quan hệ

Phụ thuộc (dependency)

(A) phụ thuộc (B) có nghĩa là (B) phải tồn tại trước (A), phải có (B) thì mới có (A)

Kết hợp (association)

Quan hệ kết hợp là quan h ệ mà đối tượng này ch ứa đối tượng kia. Quan h ệ kết hợp đặc trưng bởi tính nhiều (multiplicity), thể hiện đối tượng này chứa bao nhiêu đối tượng kia.

Khái quát hóa (generalization)

Quan hệ khái quát hóa là quan h ệ mà đối tượng này thừa kế các đặc tính của đối tượng kia (kế thừa trong lập trình hướng đối tượng)

Hiện thực hóa (realization)

Quan hệ giữa giao diện (interface) và lớp thực thi (hiện thực hóa) của interface đó.

II.1.2.3. Biểu đồ

Biểu đồ Use Case (UC diagram)

Page 75: 1139020232Thuc Tap Tin Hoc Xay Dung

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

75

Biểu đồ Use Case chỉ ra tương tác giữa tác nhân và hệ thống, thực chất là biểu diễn các chức năng của hệ thống.

Biểu đồ Use Case là bi ểu đồ dễ hiểu, cho cái nhìn t ổng quát về hệ thống, dùng để giao tiếp giữa khách hành, quản lý dự án, người phân tích thiết kế, lập trình viên.

Biểu đồ trình tự (Sequence diagram)

Biểu đồ trình tự chỉ ra các thao tác nhằm thực hiện các chức năng (Use Case). Biểu đồ trình tự mô tả tương tác giữa các đối tượng. Thực chất là trình tự các lời gọi hàm (phương thức) từ đối tượng này sang đối tượng khác.

Biểu đồ cộng tác (Collaboration diagram)

Biểu đồ cộng tác thực chất cũng cung cấp các thông tin giống với biểu đồ trình tự, nhưng ở một cách nhìn khác. Nếu biểu đồ trình tự chỉ ra các tương tác theo thời gian thì biểu đồ cộng tác cho phép nhìn các t ương tác đó theo số lượng (sự phân bố) các tương tác giữa từng cặp đối tượng.

Biểu đồ lớp (Class diagram)

Biểu đồ lớp ch ỉ ra c ấu trúc chi ti ết của từng lớp (class) và quan h ệ giữa các l ớp trong h ệ thống. Biểu đồ lớp rất quan trọng trong quá trình lập trình.

Biểu đồ chuyển trạng thái (State transition diagram)

Biểu đồ chuyển trạng thái mô t ả vòng đời của đối tượng, từ khi sinh ra đến khi b ị phá hủy. Biểu đồ lớp là bức tranh tĩnh về đối tượng, biểu đồ trạng thái cho cái nhìn động về các trạng thái của đối tượng.

Biểu đồ thành phần (Component diagram)

Biểu đồ thành ph ần cho cái nhìn v ật lý v ề mô hình: H ệ thống gồm những thành ph ần (các file Exe, mã nguồn, dữ liệu) gì? Quan hệ của chúng ra sao?

Biểu đồ triển khai (Deployment diagram)

Biểu đồ triển khai chỉ ra địa chỉ vật lý của các thành phần hệ thống sau khi đã cài đặt.

II.1.3. Kiến trúc hệ thống

Mỗi hệ thống được quan sát và hi ểu một cách khác nhau t ừ phía những người khác nhau. Khách hàng, người thiết kế, người quản lý và người phát triển luôn có những cái nhìn khác nhau về hệ thống.

Page 76: 1139020232Thuc Tap Tin Hoc Xay Dung

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

76

Kiến trúc hệ thống được chia thành 5 khung nhìn khác nhau tương ứng với những cách nhìn khác nhau. Tuy nhiên, tùy thuộc vào quy mô và tính chất, không phải hệ thống nào cũng cần đầy đủ 5 khung nhìn này.

II.1.3.1. Khung nhìn UC (Use case view)

Khung nhìn đầu tiên, được hình thành từ giai đoạn phân tích yêu cầu. Mô tả các hành vi của hệ thống theo cách nhìn của khách hàng, người phân tích và tester. Khung nhìn UC gồm

- Phần tĩnh: các tác nhân, UC, biểu đồ UC

- Phần động: một vài biểu đồ trình tự, cộng tác

II.1.3.2. Khung nhìn thiết kế (Design view)

Khung nhìn thi ết kế (hay khung nhìn logic – logical view), bi ểu diễn tổ chức của các l ớp quan trọng nhất, quan hệ giữa các lớp này với nhau. Khung nhìn thiết kế bao gồm:

- Phần tĩnh: Các lớp, biểu đồ lớp, biểu đồ đối tượng

- Phần động: Các biểu đồ tương tác, biểu đồ biến đổi trạng thái

II.1.3.3. Khung nhìn cài đặt (Implementation view)

Khung nhìn cài đặt (khung nhìn thành ph ần – component view). Thành ph ần là module v ật lý (thư viện, file exe, thư viện động dll), hay tệp mã nguồn để lắp ráp thành hệ thống vật lý. Khung nhìn thành phần bao gồm thành phần, biểu đồ thành phần và gói.

Người quan tâm nh ất đến khung nhìn thành ph ần là người quản lý mã ngu ồn, dịch chương trình và triển khai ứng dụng.

Development View

Process View Physical View

Use Cases/ Scenarios

Logical View Class diagrams,

Sequence diagrams

Component diagrams

Deployment diagrams Deployment diagrams

Use Case diagrams,

Sequence diagrams

Page 77: 1139020232Thuc Tap Tin Hoc Xay Dung

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

77

II.1.3.4. Khung nhìn triển khai (Deployment view)

Khung nhìn tri ển khai ch ỉ ra các ti ến trình và thi ết b ị trên m ạng, các k ết nối vật lý gi ữa chúng. Biểu đồ triển khai cũng hiển thị tiến trình và chỉ ra tiến trình nào chạy trên máy nào.

II.1.3.5. Khung nhìn tiến trình (Process view)

Biểu diễn phân tách giữa các tiến trình, đồng bộ hóa các tiến trình. Khung nhìn này ít được sử dụng (không có trong Rational Rose).

II.2. Rational Rose

II.2.1. Rational Rose là gì

Rational Rose là công c ụ hỗ trợ phân tích, thi ết kế hướng đối tượng bằng UML. Mô hình Rose gồm toàn bộ các biểu đồ UML: tác nhân, Use Case, đối tượng, lớp, thành phần...

Hơn nữa, Rational Rose còn h ỗ trợ phát sinh (generate) mã khung ch ương trình cho nhi ều ngôn ngữ khác nhau: C++, Java, Visual Basic. N ếu tận dụng tốt điều này, b ạn có th ể vừa thiết kế vừa sinh code để lập trình, sau đó lại sử dụng tính n ăng cập nhật từ code chương trình thành biểu đồ.

Page 78: 1139020232Thuc Tap Tin Hoc Xay Dung

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

78

II.2.2. Giao diện của Rational Rose

II.3. Use case diagram

II.3.1. Phân tích UC

II.3.1.1. UC là gì?

UC mô t ả ai sử dụng hệ thống như thế nào? Mô t ả tương tác giữa người sử dụng và h ệ thống phần mềm (các thao tác để giải quyết một công việc cụ thể).

UC là nền tảng của phân tích h ệ thống, tìm đầy đủ các UC s ẽ đảm bảo hệ thống được xây dựng sẽ đáp ứng đầy đủ các yêu cầu của người dùng.

UC được sử dụng trong toàn bộ quá trình phân tích thiết kế:

- Mô tả yêu c ầu chức năng của hệ thống (thỏa thuận giữa khác hàng và ng ười phân tích)

- Cung cấp cơ sở để kiểm tra, test hệ thống

Page 79: 1139020232Thuc Tap Tin Hoc Xay Dung

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

79

II.3.1.2. Tìm kiếm Actor

Tác nhân (Actor) có th ể là người sử dụng hoặc các hệ thống bên ngoài có t ương tác với hệ thống. Để xác định tác nhân, người ta thường đặt và trả lời các câu hỏi sau:

- Ai sẽ sử dụng chức năng chính của hệ thống?

- Ai quản trị, bảo dưỡng hệ thống?

- Hệ thống đang xây dựng tương tác với hệ thống khác nào?

II.3.1.3. Tìm kiếm UC

Việc tìm ki ếm UC không th ể thiếu được sự tham gia c ủa khách hàng, th ường là s ử dụng phương pháp phỏng vấn. Người phân tích đặt một số câu hỏi để khách hàng trả lời

- Tác nhân yêu cầu hệ thống thực hiện chức năng nào?

- Tác nhân cần đọc, tạo, xóa, sửa, lưu trữ các thông tin nào trong hệ thống?

II.3.2. UC Diagram

Biểu đồ UC (Use Case Diagram) là bi ểu đồ chỉ ra sự tương tác giữa actor và UC. Biểu đồ UC chính là ngôn ngữ chung giữa khách hàng, người phân tích, người quản lý và người phát triển hệ thống. Mỗi hệ thống tùy theo độ phức tạp có thể có 1 hoặc vài UC. Với hệ thống có nhiều biểu đồ:

- Biểu đồ UC mức chính chỉ ra gói hay nhóm UC

- Các biểu đồ UC khác là tương tác giữa tác nhân và UC

Chú ý:

- Biểu đồ UC không mô tả tương tác giữa actor với actor (vì nằm ngoài hệ thống)

- Không hình thành quan hệ trực tiếp giữa 2 UC, luồng thông tin giữa 2 UC

- Mỗi UC phải được khởi động bởi tác nhân

Actor

Page 80: 1139020232Thuc Tap Tin Hoc Xay Dung

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

80

II.3.2.1. Tài liệu mô tả UC

Biểu đồ UC cho cái nhìn toàn cảnh về hệ thống nhưng lại quá súc tích, để cụ thể hóa (khách hàng có th ể hiểu được), người ta phải lập các tài li ệu mô t ả cho từng UC. Tài li ệu mô t ả của mỗi UC gồm có: Mô tả vắn tắt và các dòng sự kiện

Thành phần Mô tả

Mô tả vắn tắt (brief description)

UC làm gì? Ai sử dụng UC? Kết quả cuối cùng của UC? (một vài dòng)

Dòng sự kiện (flow of events) Dòng sự kiện là m ột chuỗi các hành vi, mô t ả người sử dụng làm gì, h ệ thống làm gì.

Mỗi UC gồm

- Một dòng sự kiện chính (basic flow), là dòng đơn giản nhất (khi dữ liệu, trạng thái... không có gì đặc biệt, các hành vi được thực hiện tuần tự, cho ra đúng kết quả mong muốn)

- Các dòng s ự ki ện r ẽ nhánh (alternative flow): khi có nh ững d ữ liệu, trạng thái không bình th ường. Hệ thống phải có nh ững ứng xử thích hợp trong những trường hợp này

II.3.3. Tổng kết

Các bước phải làm

- Tìm kiếm tác nhân (actor)

- Tìm kiếm UC

Customer

Conduct Bank Transactions

ATM Maintenance

Maintain ATM Machine

Run Reports

Bank

Page 81: 1139020232Thuc Tap Tin Hoc Xay Dung

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

81

- Lập biểu đồ UC

- Lập tài liệu mô tả cho từng UC

o Mô tả vắn tắt

o Các luồng sự kiện (luồng sự kiến chính, luồng sự kiện rẽ nhánh)

II.4. Biểu đồ tương tác (Interaction diagram) Biểu đồ UC mô tả khía cạnh tĩnh của hệ thống, còn biểu đồ tương tác (Interaction diagram) chỉ ra khía cạnh động của hệ thống. Biểu đồ tương tác bao gồm các tác nhân, đối tượng, và thông điệp trao đổi giữa chúng . Biểu đồ tương tác là c ụ thể hóa c ủa các lu ồng sự kiện trong các tài liệu mô tả UC.

Biểu đồ tương tác xu ất hiện trong c ả khung nhìn UC và khung nhìn thi ết kế (khung nhìn logic trong Rose). Các bước thực hiện như sau

- Phân tích mô tả UC, tìm các đối tượng

- Dựa vào luồng các sự kiện, xây dựng biểu đồ tương tác của khung nhìn UC

- Xây dựng biểu đồ lớp

- Chỉnh sửa lại bi ểu đồ tương tác c ủa khung nhìn UC để có bi ểu đồ tương tác c ủa khung nhìn thiết kế (khung nhìn logic)

Biểu đồ tương tác gồm có:

- Biểu đồ trình tự (Sequence diagram)

- Biểu đồ cộng tác (Collaboration diagram)

II.4.1. Đối tượng là gì?

Đối tượng là các thực thể vật lý hoặc các hệ thống phần mềm, giao diện... Đối tượng là tập hợp các dữ liệu (property) và thao tác (operator).

II.4.2. Tìm đối tượng

Để tìm đối tượng, khảo sát các danh từ trong luồng sự kiện (của tài li ệu mô t ả UC). Tuy nhiên, không phải tất cả các danh từ đều là đối tượng, danh từ có thể là:

- Đối tượng

- Mô tả trạng thái của đối tượng

- Actor hoặc các hệ thống bên ngoài

Page 82: 1139020232Thuc Tap Tin Hoc Xay Dung

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

82

II.4.3. Biểu đồ trình tự (Sequence Diagram)

Biểu đồ trình tự là các giao ti ếp bằng thông điệp giữa actor với đối tượng, đối tượng với đối tượng được sắp xếp theo trình tự thời gian. Mỗi biểu đồ trình tự biểu diễn một luồng sự kiện của một UC.

II.4.4. Biểu đồ cộng tác (Collaboration Diagram)

Là góc nhìn khác của biểu đồ trình tự. Trong khi biểu đồ trình tự có trật tự theo thời gian thì biểu đồ cộng tác t ập trung nhi ều hơn vào quan h ệ giữa các đối tượng, thể hiệu tổ chức và cấu trúc của các đối tượng gửi hay nhận thông điệp.

John : Student

registration form

schedule form

available course

1: enter 2: validate id

3: enter current semester

4: create new schedule 5: display

6: get courses

Page 83: 1139020232Thuc Tap Tin Hoc Xay Dung

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

83

II.5. Class diagram

II.5.1. Class là gì?

Đối tượng tồn tại trong thế giới thực (máy móc, tổ chức,...). Lớp là mô tả về thuộc tính, thao tác của một kiểu (một tập) các đối tượng. Như vậy, lớp là trừu tượng của đối tượng, đối tượng là hiện thực (instance) của lớp.

Khái niệm lớp trong Tin h ọc rất gần với khái ni ệm lớp trong thuy ết tiến hóa c ủa Darwin: Các lớp tập hợp các loài có chung nhi ều đặc điểm, lớp sau có th ể kế thừa các đặc tính của lớp trước và có những đặc tính riêng của mình.

II.5.2. Tìm kiếm class

Lớp được tìm ki ếm đầu tiên trong bi ểu đồ tương tác. Tìm các đối tượng (trong bi ểu đồ tương tác) có chung các đặc điểm (thuộc tính, thao tác...), gộp chúng lại chúng ta có các lớp.

Ngoài ra, có nh ững lớp không th ể tìm được trong bi ểu đồ tương tác, đó là các l ớp n ằm ngoài, ch ịu trách nhi ệm điều khiển hoạt động của biểu đồ tương tác này, ta g ọi đó là l ớp điều khiển (control class).

Một số câu hỏi hữu ích có thể đặt ra để tìm lớp:

- Có thông tin nào cần lưu trữ hay phân tích?

- Có hệ thống ngoài không?

- Có thư viện, thành phần không?

John : Student

registration form

schedule form available classes

1: enter id

2: validate id

3: enter current semester

4: create new schedule 5: display

6: get courses

Page 84: 1139020232Thuc Tap Tin Hoc Xay Dung

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

84

II.5.3. Phân loại class (stereotype) Stereotype Mô tả

Boundary class (lớp biên) Lớp biên là lớp nằm trên biên của hệ thống (form, report, giao diện với các hệ thống khác...)

Entity class (lớp thực thể) Lớp thực thể lưu trữ thông tin mà nó sẽ được ghi vào bộ nhớ ngoài.

Control class (lớp điều khiển) Lớp điều khiển là lớp có trách nhiệm điều phối hoạt động của các lớp khác.

II.5.4. Class Diagram

Biểu đồ lớp thể hiện các lớp và quan hệ giữa chúng, hoặc các gói các l ớp và quan h ệ giữa các gói này. Bi ểu đồ lớp giúp người phát tri ển quan sát và l ập kế hoạch cấu trúc h ệ thống trước khi lập trình. Nó đảm bảo hệ thống được thiết kế tốt ngay từ đầu.

Trong biểu đồ lớp, mỗi lớp được biểu diễn bằng một hình chữ nhật với tên lớp, các thu ộc tính (attribute) và các thao tác (operator):

- Thuộc tính (attribute) : Thu ộc tính là các thông tin c ủa lớp (ví d ụ lớp Công ty có các thuộc tính: Tên, Địa chỉ, Số nhân viên...)

- Thao thác (operator): Thao tác là các hành vi c ủa lớp. Mỗi thao tác gồm có 3 phần sau: Tên thao tác, tham số của thao tác và kiểu giá trị của thao tác.

II.5.4.1. Quan hệ giữa các class (relationship)

Trong hệ thống, các lớp không đứng riêng lẻ mà làm việc phối hợp với nhau. Quan hệ giữa các lớp cho phép một lớp biết về thuộc tính, thao tác và quan h ệ của lớp khác. Các quan h ệ được bi ểu di ễn trên bi ểu đồ l ớp. Gi ữa các l ớp có 4 ki ểu quan h ệ chính: kết h ợp (association), phụ thu ộc (dependencies) , tập h ợp (aggregation) và khái quát hóa (generalization).

Quan hệ kết hợp (assiciation)

Quan hệ kết hợp chỉ ra rằng có một đường liên kết giữa 2 lớp. Khi có quan hệ kết hợp, mỗi lớp có th ể gửi thông điệp đến lớp khác trong bi ểu đồ tương tác. K ết hợp có th ể một chiều hay hai chiều.

Quan hệ kết hợp có th ể đệ quy. Kết hợp đệ quy ch ỉ ra r ằng một đối tượng có quan h ệ với một đối tượng khác thuộc cùng một lớp.

Page 85: 1139020232Thuc Tap Tin Hoc Xay Dung

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

85

Quan hệ phụ thuộc (dependency)

Quan hệ phụ thuộc cũng sử dụng để kết nối 2 lớp. Nhưng khác với quan hệ kết hợp, quan hệ phụ thuộc chỉ có 1 chi ều. Quan hệ phụ thuộc chỉ ra lớp (A) phụ thuộc lớp (B). Có ngh ĩa là các thao tác của lớp (A) hiểu được ngữ nghĩa của lớp (B). Trong VB, khi thiết kế không cần phải xây d ựng quan h ệ phụ thuộc vì b ất cứ lớp (form, module, class module...) nào trong VB đều có thể hiểu các lớp khác.

Quan hệ tụ hợp (aggregation)

Tụ hợp (aggregation) là hình th ức mạnh của quan hệ kết hợp. Quan h ệ kết hợp ch ỉ ra rằng một đối tượng thuộc lớp này chứa đối tượng thuộc lớp kia. Quan h ệ kết hợp cài đặt trong VB thực chất là việc khai báo một thuộc tính của một lớp là một đối tượng thuộc lớp khác.

Quan hệ khái quát hoá (generalization)

Khái quát hóa (hay tr ừu tượng hóa) là ti ến trình nh ằm lược bỏ những thuộc tính, thao tác không thực sự cần thiết của đối tượng để có được cái nhìn t ổng quát h ơn. Khái ni ệm khái quát hóa gắn liền với khái niệm kế thừa (inherite) trong lập trình hướng đối tượng. Nếu lớp (A) kế thừa lớp (B) có nghĩa là lớp (A) là con của lớp (B), lớp (A) có đầy đủ các thuộc tính, thao tác của lớp (B), đồng thời có những thuộc tính và thao tác riêng của mình. Trong UML, ta gọi (B) là khái quát hóa của (A).

ScheduleForm<<boundary>>

RegistrationForm<<boundary>>

1 111

Page 86: 1139020232Thuc Tap Tin Hoc Xay Dung

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

86

II.5.4.2. Tính nhiều (multiplicity) của quan hệ

Tính nhiều của quan h ệ giữa hai lớp (A) và (B) là s ự biểu diễn MỘT đối tượng thuộc lớp (A) có quan hệ với bao nhiêu đối tượng của lớp (B) trong cùng 1 thời điểm?

Với mỗi quan hệ, phải xác định tính nhiều ở 2 đầu của đường quan hệ.

Tính nhiều Ý nghĩa

* Nhiều

0 Không

1 Một

0..* Từ không đến nhiều

1..* Từ một đến nhiều

0..1 Không hay một

1..1 Chỉ một

Một giáo viên có thể dạy nhiều cua học, mỗi cua học chỉ có một giáo viên.

Mỗi cua h ọc có t ừ 3 đến 10 sinh viên. M ột sinh viên có th ể tham gia nhi ều cua h ọc hoặc chẳng tham gia cua học nào.

1..*

Person Teacher

Course

1

Course Student

3..10 0..*

Truck

tonnage

GroundVehicle

weight licenseNumber

Car

Page 87: 1139020232Thuc Tap Tin Hoc Xay Dung

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

87

II.5.5. Cập nhật sequence diagram

Biểu đồ tuần tự được xây d ựng ở bước trước là bi ểu đồ tuần tự của khung nhìn UC (khi chúng ta ch ưa có các l ớp). Trong khung nhìn thi ết kế (khung nhìn logic), sau khi đã xác định các lớp, các thuộc tính và thao tác c ủa lớp, chúng ta ph ải tiến hành xây d ựng biểu đồ tuần tự của khung nhìn logic.

Biểu đồ tuần tự này thực chất là sự cập nhật của biểu đồ tuần tự của khung nhìn UC, nhưng được cập nhật tên lớp, thao tác của lớp.

Quá trình này nếu kết hợp với công việc lập trình có thể tạo được khung chương trình đồng bộ với các biểu đồ UML. Việc lập trình theo khung này giúp người thiết kế có thể hình dung độ phức tạp của dự án, khối lượng công việc cần thực hiện, giúp phát tri ển dự án một cách có kế hoạch.

Rational Rose hỗ trợ tích hợp với Java, VC, VB theo cả 2 chiều: Từ mô hình UML phát sinh mã nguồn và t ừ mã ngu ồn chuyển đổi thành mô hình UML để giúp xây d ựng phần mềm một cách đồng bộ.

II.6. Biểu đồ thành phần (Component diagram) Biểu đồ thành phần là biểu đồ mức kiến trúc vật lý (liên quan đến cài đặt), gồm các modul vật lý (mã nguồn chương trình, các tệp chạy được - exe, dll...). Các dạng biểu đồ thành phần

- Thành phần mã nguồn: Có ý ngh ĩa vào thời điểm dịch chương trình, là các file mã nguồn của chương trình (*.frm, *.frx, *.bas, *.cls)

- Thành ph ần nh ị phân : Được d ịch ra t ử các file mã ngu ồn (các file *.obj, *.lib, *.dll...). Có ý nghĩa vào thời điểm liên kết hoặc thời điểm chạy chương trình

- Thành phần khả thi : là các t ệp chương trình th ực hiện được (*.exe...), là k ết quả của các thành phần nhị phân (liên kết tĩnh hay động).

II.6.1. Tổng kết

Các việc phải làm:

- Phân tích các bi ểu đồ tương tác (tuần tự và cộng tác), tìm ki ếm các đối tượng trong biểu đồ này

- Gộp các đối tượng cùng lo ại thành các l ớp. Bổ sung các l ớp điều khiển và lớp biên chưa có trong biểu đồ tương tác.

- Tìm các thuộc tính và thao tác của biểu đồ tương tác

- Tìm quan hệ

- Lập biểu đồ lớp

Page 88: 1139020232Thuc Tap Tin Hoc Xay Dung

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

88

- Chỉnh sửa lại bi ểu đồ tương tác c ủa khung nhìn UC thành bi ểu đồ tương tác c ủa khung nhìn thiết kế (khung nhìn logic)

II.7. Ví dụ áp dụng

II.7.1. Mô tả bài toán

Phần mô t ả bài toán r ất quan trọng để bạn có th ể có được một bản thiết kế phần mềm tốt, hãy đặt mình ở vị trí của khách hàng để yêu cầu người thiết kế, mô tả càng chi tiết càng tốt. Sau đây là phần mô tả bài toán ví dụ:

Xây dựng phần mềm nhập sơ đồ kết cấu phẳng, nhập tải trọng, kết xuất dữ liệu ra file S2K (SAP2000 v8.0).

Các chức năng

- Tạo lưới: người dùng chọn các bước theo chiều dọc (ví dụ 3:6:6:3m), và theo chi ều ngang (ví d ụ 3:3:3m), chương trình t ạo ra l ưới vuông góc theo các kho ảng chia đã chọn.

- Chương trình ở 1 trong 3 chế độ

o Chọn: Người dùng sử dụng chuột để chọn đối tượng

o Vẽ nút: Người dùng vẽ các nút tại các mắt lưới

o Vẽ thanh: Người dùng vẽ các thanh bằng cách nối 2 nút

o Khi click trái chu ột vào các bi ểu tượng trên toolbar thì chuy ển về các ch ế độ tương ứng. Khi click ph ải chuột thì ch ương trình chuy ển ngay sang ch ế độ chọn.

- Vẽ nút trên các đỉnh lưới: Ở chế độ vẽ nút, mỗi khi người dùng di chuy ển chuột, vị trí nút lưới gần con trỏ chuột nhất được sáng lên (giống chế độ snap của AutoCAD). Khi người dùng click trái chuột thì chương trình sẽ tạo ra nút tại vị trí đó.

- Vẽ thanh nối các nút: Ở chế độ vẽ thanh, chương trình chia làm 2 chế độ nhỏ

o Chọn nút đầu: Khi ng ười dùng di chuy ển chuột, nút g ần con tr ỏ chuột nhất được sáng lên. Khi click trái chuột thì chương trình đánh dấu nút tương ứng và chuyển sang chế độ Chọn nút cuối.

o Chọn nút cu ối: Khi người dùng di chuy ển chuột, nút g ần con tr ỏ chuột nhất được sáng lên, một đường nối giả định được vẽ giữa nút đầu và nút cuối. Khi click trái chuột, chương trình tạo thêm 1 thanh nối giữa 2 nút và lại chuyển về chế độ Chọn nút đầu

- Chọn nút, thanh bằng chuột (click hoặc chọn theo window)

Page 89: 1139020232Thuc Tap Tin Hoc Xay Dung

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

89

o Chọn nút, thanh bằng chuột: Khi người dùng click chuột ở gần nút hoặc thanh (khoảng cách khoảng 6 pixel), đánh dấu nút hoặc thanh đang được chọn

o Chọn nút, thanh b ằng window: Khi ng ười dùng click vào 1 vùng tr ống trên màn hình, tạo ra một hình chữ nhật di chuyển theo con chuột. Click chuột lần nữa để xác định vùng chọn hình chữ nhật, tất cả các đối tượng nằm trong vùng chọn được đánh dấu là đang chọn.

- Xóa thanh, nút: Khi ng ười dùng b ấm phím Delete ho ặc click vào bi ểu tượng trên Toolbar, xóa tất cả các nút và thanh đang được chọn. Nếu một nút b ị xóa, tất cả các thanh nối với nút đó cũng bị xóa theo.

- Nhập tải tập trung cho nút: Khi ng ười dùng chọn menu hoặc click vào Toolbar, hi ển thị hộp thoại cho phép nhập tải tập trung cho tất cả các nút đang được chọn.

- Nhập tải phân bố đều cho thanh: Khi người dùng chọn menu hoặc click vào Toolbar, hiển th ị hộp tho ại cho phép nh ập t ải phân b ố đều cho t ất cả các thanh đang được chọn.

- Lưu dữ liệu ra file S2K

II.7.2. Biểu đồ UseCase

II.7.2.1. Tìm kiếm Actor

Hệ thống chỉ có 1 Actor là người dùng chương trình.

II.7.2.2. Tìm UseCase

Dựa vào các ch ức năng được liệt kê trong yêu c ầu người dùng, có th ể phân chia các ch ức năng đó thành các UseCase sau

- Tạo lưới

- Vẽ nút

- Vẽ thanh

- Chọn đối tượng

- Xóa đối tượng

- Nhập liên kết

- Nhập tải tập trung

- Nhập tải phân bố đều

- Lưu dữ liệu ra file S2K

Page 90: 1139020232Thuc Tap Tin Hoc Xay Dung

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

90

II.7.2.3. Biểu đồ UseCase

II.7.2.4. Mô tả UseCase

UseCase Tạo lưới

Name Tạo lưới

Brief Description Tạo lưới chia vuông góc theo các khoảng cách ngang và dọc do người dùng lựa chọn

Preconditions

Actor Input System Response

0 Chọn chức năng Tạo mới

1 Hiển thị hộp thoại (danh sách các kho ảng cách theo phương x và y)

2 Thêm khoảng cách (phương x, y)

3 Bổ sung khoảng cách theo phương x, y

4 Xóa khoảng cách (phương x, y)

5 Xóa kho ảng cách t ại v ị trí được ch ọn trong danh sách các kho ảng cách phương x, y

6 Nhấn OK để tạo lưới

Main Flow

7 Tạo l ưới vuông góc v ới các kho ảng các theo ph ương x, y đã ch ọn. Đóng h ộp thoại

0 Nhấn OK để tạo lưới Alternative Flow

1 Nếu số khoảng cách theo phương x (hoặc y) là 0, thông báo lỗi

Post-conditions

UseCase Vẽ nút

Page 91: 1139020232Thuc Tap Tin Hoc Xay Dung

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

91

Name Vẽ nút

Brief Description Vẽ nút trên mắt lưới

Preconditions Đã tạo lưới.

Actor Input System Response

0 Chọn chức năng vẽ nút

1 Chuyển sang chế độ vẽ nút

2 Di chuyển con trỏ chuột

3 Tìm m ắt l ưới g ần con tr ỏ chu ột nh ất, đánh dấu mắt lưới đó

4 Click trái chuột

Main Flow

5 Tạo nút tại vị trí mắt lưới đang được đánh dấu

0 Click phải chuột hoặc nhấn phím ESC hoặc chọn 1 chức năng khác

Chuyển ch ương trình sang ch ế độ ch ọn đối tượng

Alternative Flow

1

Post-conditions

UseCase Vẽ thanh

Name Vẽ thanh

Brief Description Vẽ thanh nối 2 nút

Preconditions Có ít nhất 2 nút đã được vẽ

Actor Input System Response

0 Chọn chức năng vẽ thanh

1 Chuyển sang chế độ vẽ thanh – nút đầu

2 Di chuyển con trỏ chuột

3 Tìm nút gần con trỏ chuột nhất, đánh dấu nút đó

4 Click trái chuột

5 Ghi nh ận nút đang được đánh d ấu, chuyển sang chế độ vẽ thanh – nút cuối

6 Di chuyển con trỏ chuột

7 Tìm nút gần con trỏ chuột nhất, đánh dấu nút đó, vẽ đường kết nối giữa 2 nút

8 Click trái chuột

Main Flow

9 Tạo thanh n ối giữa nút đầu và nút cu ối, chuyển sang chế độ vẽ thanh – nút đầu

Alternative Flow 0 Click phải chuột hoặc nhấn phím

Page 92: 1139020232Thuc Tap Tin Hoc Xay Dung

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

92

ESC hoặc chọn 1 chức năng khác

Chuyển ch ương trình sang ch ế độ ch ọn đối tượng

1 Chọn nút cuối trùng nút đầu Thông báo l ỗi, chuy ển sang ch ế độ v ẽ thanh – nút đầu

Post-conditions

UseCase Chọn đối tượng

Name Chọn đối tượng

Brief Description Chọn đối tượng bằng chuột

Preconditions

Actor Input System Response

0 Chọn chế độ chọn đối tượng

1 Chuyển sang ch ế độ ch ọn đối t ượng – bình thường

2 Di chuyển chuột

3 Nếu đang ở chế động ch ọn đối tượng – cửa sổ, vẽ cửa sổ từ điểm đã lưu đến v ị trí của con trỏ chuột

4 Click chuột trên màn hình chính

5 Nếu con tr ỏ chu ột g ần nút ho ặc thanh, đánh dấu đối tượng được chọn

6 Nếu con tr ỏ chu ột không g ần đối tượng nào, lưu lại điểm vừa click, chuy ển sang chế độ chọn đối tượng – cửa sổ

Main Flow

7 Nếu đang ở chế độ chọn đối tượng – cửa sổ, đánh d ấu t ất c ả các đối n ằm trong cửa sổ

0 Click phải chuột hoặc nhấn phím ESC hoặc chọn 1 chức năng khác

1 Chuyển ch ương trình sang ch ế độ ch ọn đối tượng

2 Chọn nút cuối trùng nút đầu

Alternative Flow

Thông báo l ỗi, chuy ển sang ch ế độ v ẽ thanh – nút đầu

Post-conditions

UseCase Xóa đối tượng

Name Xóa đối tượng

Brief Description Xóa các đối tượng đang đánh dấu được chọn

Page 93: 1139020232Thuc Tap Tin Hoc Xay Dung

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

93

Preconditions Có đối tượng được chọn

Actor Input System Response

0 Nhấn nút Delete hoặc biểu tượng trên Toolbar

1 Xóa tất cả các thanh được đánh dấu chọn

Main Flow

2 Xóa t ất c ả các nút đang được đánh d ấu chọn. Xóa tất cả các thanh nối với nút đó

0 Không có nút nào được chọn Alternative Flow

1 Thông báo lỗi

Post-conditions

UseCase Nhập liên kết

Name Nhập liên kết

Brief Description Nhập các ràng bu ộc (chuyển vị theo phương x, y, z, chuy ển vị quay theo ph ương 1, 2, 3)

Preconditions Có đối tượng được chọn

Actor Input System Response

0 Chọn ch ức n ăng nh ập liên k ết (menu hoặc toolbar)

2 Hiển th ị h ộp tho ại cho phép đối t ượng chuyển vị theo phương x, y, z ho ặc quay theo ph ương 1, 2, 3 (d ưới d ạng check box)

3 Lựa ch ọn các giá tr ị trên check box

4 Click OK

Main Flow

Đưa ràng buộc vào các đối tượng

0 Không có đối t ượng nào được chọn

1 Thông báo lỗi

2 Nhấn cancel

Alternative Flow

3 Đóng hộp thoại

Post-conditions

UseCase Nhập tải tập trung

Name Nhập tải tập trung

Brief Description Nhập tải tập trung (các giá trị X, Y, Z) cho tất cả các nút đang được chọn

Preconditions Có đối tượng được chọn

Main Flow Actor Input System Response

Page 94: 1139020232Thuc Tap Tin Hoc Xay Dung

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

94

0 Chọn ch ức n ăng nh ập t ải t ập trung (menu hoặc toolbar)

1 Bỏ đánh dấu tất cả các thanh đang được chọn

2 Hiển thị hộp thoại cho phép nhập 3 giá trị x, y, z của tải

3 Nhập các giá trị x, y, z

4 Click OK

5 Đưa giá tr ị các t ải vào nút, đóng h ộp thoại

0 Không có nút nào được chọn

1 Thông báo lỗi

2 Nhập sai giá tr ị x, y, z (không phải số)

3 Thông báo lỗi

4 Nhấn cancel

Alternative Flow

5 Đóng hộp thoại

Post-conditions

UseCase Nhập tải phân bố đều

Name Nhập tải phân bố đều

Brief Description Nhập tải phân b ố đều (các giá tr ị X, Y, Z lo ại hệ tọa độ local hay global) cho t ất cả các thanh đang được chọn.

Preconditions Có đối tượng được chọn

Actor Input System Response

0 Chọn ch ức n ăng nh ập t ải phân bố (menu hoặc toolbar)

1 Bỏ đánh d ấu t ất c ả các nút đang được chọn

2 Hiển thị hộp thoại cho phép nhập 3 giá trị x, y, z c ủa t ải phân b ố, h ệ t ọa độ local hay global

3 Nhập các giá tr ị x, y, z, lo ại h ệ tọa độ

4 Click OK

Main Flow

5 Đưa giá tr ị các t ải vào thanh, đóng h ộp thoại

0 Không có thanh nào được chọn

1 Thông báo lỗi

Alternative Flow

2 Nhập sai giá tr ị x, y, z (không

Page 95: 1139020232Thuc Tap Tin Hoc Xay Dung

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

95

phải số)

3 Thông báo lỗi

4 Nhấn cancel

5 Đóng hộp thoại

Post-conditions

UseCase Lưu dữ liệu ra file S2K

Name Lưu dữ liệu ra file S2K

Brief Description Lưu dữ liệu (nút, thanh, tải tập trung, tải phân bố) ra file S2K

Preconditions Có nút và thanh

Actor Input System Response

0 Chọn ch ức n ăng l ưu d ữ li ệu (menu, toolbar)

1 Hiển thị hộp thoại chọn tên file

2 Click OK

3 Ghi danh sách các nút (s ố thứ tự, tọa độ) ra file

4 Ghi danh sách các thanh (s ố th ứ t ự, 2 nút, ràng buộc) ra file

5 Ghi các ràng buộc của nút ra file (nếu có)

6 Ghi các tải tập trung của nút ra file

Main Flow

7 Ghi các tải phân bố của thanh ra file

0 Thao tác trên file bị lỗi

1 Thông báo lỗi, hỏi có tiếp tục hay không?

2 Chưa vẽ nút, thanh

3 Thông báo lỗi

4 Nhấn cancel

Alternative Flow

5 Đóng hộp thoại

Post-conditions

II.7.3. Biểu đồ tương tác

II.7.3.1. Tìm đối tượng

Dựa vào yêu cầu người dùng và các đặc tả chi tiết của từng Usecase, chúng ta có danh sách các ứng viên đối tượng (tìm các danh từ có chứa thuộc tính và thao tác)

- MainForm: tất cả các thao tác trên sơ đồ kết cấu đều thực hiện trên form này

- Structure: Sơ đồ kết cấu

Page 96: 1139020232Thuc Tap Tin Hoc Xay Dung

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

96

- Frame: Thanh

- Node: Nút

- Grid: lưới vuông góc

- GridForm: hộp thoại nhập các khoảng cách của lưới vuông góc

- RestraintForm: hộp thoại nhập liên kết

- ForceForm: hộp thoại nhập tải tập trung

- DistributedForm: hộp thoại nhập tải phân bố

- SaveDialog: hộp thoại chọn tên file để lưu

II.7.3.2. Biểu đồ tuần tự (sequence diagram)

Page 97: 1139020232Thuc Tap Tin Hoc Xay Dung

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

97

Page 98: 1139020232Thuc Tap Tin Hoc Xay Dung

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

98

Page 99: 1139020232Thuc Tap Tin Hoc Xay Dung

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

99

Page 100: 1139020232Thuc Tap Tin Hoc Xay Dung

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

100

Page 101: 1139020232Thuc Tap Tin Hoc Xay Dung

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

101

Page 102: 1139020232Thuc Tap Tin Hoc Xay Dung

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

102

Page 103: 1139020232Thuc Tap Tin Hoc Xay Dung

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

103

II.7.4. Biểu đồ lớp

II.7.4.1. Tìm kiếm lớp

Từ danh sách các đối tượng đã liệt kê, tập hợp các đối tượng cùng loại được các lớp sau

- frmMain

- clsStructure

- clsFrame

- clsNode

- clsGrid

- frmGrid

- frmRestraint

- frmForce

- frmDistributed

- CommondDialog: lớp hộp thoại có sẵn của Microsoft

Page 104: 1139020232Thuc Tap Tin Hoc Xay Dung

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

104

II.7.4.2. Biểu đồ lớp

II.7.5. Cập nhật biểu đồ tương tác

Sau khi đã có biểu đồ lớp, các đối tượng trong biểu đồ tương tác giai đoạn 1 phải được cập nhật với tên lớp, các thuộc tính và thao tác của lớp đó. Quá trình cập nhật biểu đồ tương tác nên kết hợp với sinh code (b ằng Rational Rose) để tạo được sự thống nhất giữa thiết kế và thực thi.

Page 105: 1139020232Thuc Tap Tin Hoc Xay Dung

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

105

Page 106: 1139020232Thuc Tap Tin Hoc Xay Dung

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

106

CHƯƠNG III. Đồ họa

III.1. Mục đích Tài liệu này được lập ra nhằm mục đích hướng dẫn sinh viên ngành Tin học Xây dựng trong việc xây dựng các hệ đồ họa phục vụ cho đồ án tốt nghiệp.

Cấu trúc của tài liệu:

- Các chức năng chính c ủa 1 h ệ đồ họa: Liệt kê các ch ức năng mà m ột hệ đồ họa điển hình phải có

- Sử dụng VDraw Component: Hướng dẫn sử dụng VDraw Component (là một hệ đồ họa phổ biến rất thích h ợp cho l ập trình các ứng dụng phải thể hiện các d ữ liệu đồ họa cũng như tương tác giữa người dùng và các dữ liệu đồ họa)

III.2. Các chức năng chính của 1 hệ đồ họa Các hệ thống đồ họa được đề cập ở đây là các h ệ thống phục vụ các bài toán thi ết kế hoặc hỗ trợ thiết kế. Đây thực chất là các h ệ CAD đơn giản, một hệ thống CAD đơn giản điển hình bao gồm các chức năng chính sau

- Vẽ các đối tượng cơ bản: Điểm, đoạn thẳng, text, đường tròn, mặt (face), biểu tượng. Không giống như các chương trình vẽ (draft) đơn giản, các đối tượng hình học trong hệ CAD phải được quản lý, có thể thêm, xóa, sửa...

- Thay đổi vùng nhìn (zoom, pan) để quan sát toàn bộ hoặc một phần bản vẽ - Lựa chọn các đối tượng (bằng chuột: pick hoặc window) - Đọc và lưu các đối tượng ra bản vẽ (comment: dạng DXF)

III.3. Sử dụng VDraw Component Chủ đề này nhằm mục đích hướng dẫn sinh viên sử dụng Component rất phổ biến hỗ trợ thể hiện, quản lý, tương tác với các bản vẽ dưới các định dạng quen thuộc của AutoCAD. Chú ý rằng VDraw được cung cấp dưới dạng ActiveX component nên bạn có thể sử dụng trong bất cứ môi trường lập trình nào trên Windows (Visual C++ hay Visual Basic). Trong các ví d ụ cung cấp theo tài liệu này, chúng tôi chọn Visual Basic làm ví dụ.

III.3.1. Cài đăt VDraw

VDraw là m ột ActiveX, do đó các b ước cài đặt VDraw tuân theo các b ước đã hướng dẫn trong phần ActiveX. L ưu ý r ằng các phiên b ản VDraw có trên th ị trường đĩa lậu thường không phải là phiên bản tự cài đặt, do đó bạn phải sử dụng công cụ regsvr32 để đăng ký với cú pháp sau (chú ý đường dẫn đền file vdraw.ocx có thể khác trên máy tính của bạn)

Page 107: 1139020232Thuc Tap Tin Hoc Xay Dung

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

107

regsvr32.exe c:\vdraw\vdraw.ocx

Sau khi cài đặt VDraw b ạn có th ể sử dụng trong VB nh ư những ActiveX đã hướng dẫn trong phần trước (Đánh dấu vào mục Vector Draw... trong hộp thoại Components)

III.3.2. Kiến trúc VDraw

Kiến trúc VDraw mô ph ỏng ki ến trúc c ủa AutoCAD, m ột b ản v ẽ được qu ản lý b ởi đối tượng document (VDRAWDocument). Các đối t ượng qu ản lý b ởi document được chia thành 2 loại

- Đối tượng nhìn th ấy (gọi là th ực thể - entity ho ặc hình v ẽ - figure): Các đối tượng này k ế th ừa t ừ l ớp vdFigure, bao g ồm: vdLine, vdPolyline, vdArc, vdCircle, vdEllipse, vdRectangle, vdImage, vdPoint, vd3DFace, vdPolyface, vdViewport, vdText, vdDimension, vdInsert, vdPolyhatch

- Đối tượng trừu tượng (không nhìn th ấy được), sử dụng để tổ chức và qu ản lý các entity khác, bao gồm: vdLayer, vdTextstyle, vdDimstyle, vdBlock, vdLayout...

Ngoài quản lý các thực thể, đối tượng document còn cung cấp các đối tượng hỗ trợ

- vdLayers (Layers): quản lý các layer - vdBlocks (Blocks): quản lý các block - vdDimStyles (DimStyles): quản lý các kiểu dim - vdTextStyles (TextStyles): quản lý các kiểu text

Page 108: 1139020232Thuc Tap Tin Hoc Xay Dung

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

108

- vdSelections (Selections): quản lý các nhóm chọn Để người dùng tương tác (zoom, vẽ các đối tượng, tổ chức đối tượng, layer...), VDraw cung cấp đối tượng vdCommand với các phương thức sau:

- Cmd???: CmdLine, CmdCircle, CmdSelect, CmdCopy, CmdDim, CmdTrim, CmdText, CmdStretch... cho phép ng ười dùng vẽ các đối tượng với input từ chương trình hoặc bàn phím và chuột

- Zoom: Thay đổi khung nhìn với tham số từ chương trình hoặc do người dùng vào từ bàn phím, chuột

- ....

III.3.3. Vẽ đối tượng

Các đối tượng được vẽ trên VDraw th ực chất là thêm các th ực thể (entity) trong danh sách entities của đối tượng document. Nếu tham số đầu vào của hàm là điểm, bạn có thể đưa vào dưới dạng

- Mảng 3 phần tử tương ứng với 3 tọa độ (x, y, z) - Mảng 2 phần tử tương ứng với 2 tọa độ (x, y), phần tử z mặc định = 0 - Trong Visual Basic, cách đơn gi ản nh ất để đưa input d ạng điểm là s ử d ụng hàm

Array (xem ví dụ) Ví dụ về tạo đối tượng với VDraw:

- Tạo mới Project - Ctrl+T (m ở h ộp tho ại Components), đánh d ấu vào VDraw trong danh sách các

Component - Đưa VDraw component t ừ ToolBox và form, đưa nút l ệnh có tên Command1 vào

form - Click đúp vào nút lệnh để lập trình cho sự kiện Click của nút lệnh

Private Sub Command1_Click() ' VDENTITYLIST là class của thư viện VDraw, là danh sách các hình vẽ ' Trong trường hợp này, biến Ents là danh sách các hình vẽ của document Dim Ents As VDENTITYLIST ' VDCIRCLE là class của hình vẽ đường tròn trong thư viện VDraw Dim C As VDCIRCLE, C2 As VDCIRCLE ' Khởi tạo Ents là danh sách các hình vẽ của document hiện tại Set Ents = VDRAW41.ActiveDocument.Entities ' Thêm vào document một đoạn thẳng từ điểm (0,0) đến điểm (5,5) Ents.AddLine Array(0, 0), Array(5, 5) ' Thêm vào document một đường tròn tâm (0,0), bán kính 10 ' Lưu nó trong biến [C] Set C = Ents.AddCircle(Array(0, 0, 0), 10)

Page 109: 1139020232Thuc Tap Tin Hoc Xay Dung

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

109

' Thêm vào document một đường polyline qua 4 điểm Ents.AddPolyLine Array(Array(0, 0), Array(10, 5), _ Array(2, 10), Array(-4, 3)) ' Thêm vào document một đường kích thước xiên từ điểm (0,0) đến điểm (5,5) ' Đặt text của đường kích thước đó tại điểm (2,2) Ents.AddDimAligned Array(0, 0), Array(5, 5), Array(2, 2) ' Tạo thêm 1 bản sao của đường tròn [C], lưu nó trong biến [C2] Set C2 = C.Copy ' Thêm đường tròn này vào document Ents.AddItem C2 ' Sửa lại bán kính của nó là 5 đơn vị C2.radius = 5 ' Zoom "E" VDRAW41.CommandAction.Zoom "E", "USER", "USER" End Sub

III.3.4. Thay đổi vùng nhìn, điểm nhìn

Để thay đổi vùng nhìn, giống như trong AutoCAD, với VDraw ta cũng sử dụng lệnh Zoom với cú pháp sau:

object.Zoom ( Type, FirstCorner, OtherCorner )

- Type: Kiểu zoom (giống với tham số zoom trong lệnh zoom của AutoCAD) o "E" Zooms extents o "P" Zooms previous o "W" Zooms window (hai góc vùng nhìn: FirstCorner, OtherCorner) o "A" Zoom all. o "S" Zoom theo tỷ lệ tương đối với vùng nhìn hiện tại, ví dụ FirstCorner = 0.5

thì kích thước vùng nhìn sẽ lớn gấp đôi (tức là so với màn hình các v ật thể sẽ bé đi ½)

- FirstCorner, OtherCorner: Hai góc xác định vùng nhìn o Dạng điểm (mảng các tọa độ) o "USER": người dùng vào tham số o Khi không cần thiết, có thể nhập vào giá trị bất kỳ (ví dụ Empty)

- Các ví dụ: object.Zoom ("E", "USER", "USER") object.Zoom ("W", Array(0,0), Array(100,100)) object.Zoom ("P", "USER", "USER") object.Zoom ("W", "USER", "USER") object.Zoom ("W", Array(0,0), "USER")

Page 110: 1139020232Thuc Tap Tin Hoc Xay Dung

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

110

Cũng giống với AutoCAD, VDraw được khởi tạo với chế độ quan sát 2D nh ưng thực chất đây là hệ thống 3D, các bạn có thể vẽ các đối tượng 3D và quan sát chúng ở nhiều góc độ khác nhau. Để thay đổi góc nhìn quan sát các hình vẽ, ta sử dụng lệnh LookAt (xem ví dụ)

Private Sub Command1_Click() Dim Ents As VDENTITYLIST Set Ents = VDRAW41.ActiveDocument.Entities ' Vẽ đường tròn tâm (0,0) bán kính 10 Ents.AddCircle Array(0, 0), 10 ' Vẽ hình chữ nhật tâm tại (0,0), chiều ngang 10, chiều cao 10 Ents.AddRect Array(0, 0), 10, 10 ' Zoom "E" VDRAW41.CommandAction.Zoom "E", Empty, Empty End Sub Private Sub Command2_Click() ' Zoom Window (vị trí của cửa sổ xác định bởi người dùng) VDRAW41.CommandAction.Zoom End Sub Private Sub Command3_Click() ' Đặt mắt tại điểm (3, 4, 5), nhìn tới điểm (0, 0, 0) VDRAW41.CommandAction.LookAt Array(3, 4, 5), Array(0, 0, 0) ' Zoom "E" VDRAW41.CommandAction.Zoom "E", Empty, Empty ' Zoom nhỏ hình vẽ lại còn 1/2 VDRAW41.CommandAction.Zoom "S", 0.5, Empty End Sub

III.3.5. Lựa chọn đối tượng

Để thao tác v ới nhiều đối tượng 1 l ần, sử dụng đối tượng vdSelection, đối tượng này được sử dụng với các lệnh Cmd??? (CmdCopy, CmdRotate, CmdErase...). vdSelection được tạo bằng phương thức Add của đối tượng SelectionSetList (xem ví dụ).

Các phương thức của vdSelection

- RemoveAll: Loại bỏ tất cả các th ực thể khỏi selection, selection v ẫn tồn tại nhưng không chứa thực thể nào

- RemoveItem: Loại bỏ một thực thể khỏi selection - ClearAll: Xóa tất cả các đối tượng trong selection, selection vẫn tồn tại - Free: Xóa selection (giải phóng các vùng nhớ sử dụng bởi selection)

Private Sub Command1_Click() Dim Ents As VDENTITYLIST Dim Doc As VDRAWDOCUMENT

Page 111: 1139020232Thuc Tap Tin Hoc Xay Dung

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

111

Dim Sel As VDSELECTIONSET Dim rect As VDRECT, cir As VDCIRCLE Set Doc = VDRAW41.ActiveDocument Set Ents = Doc.Entities Set cir = Ents.AddCircle(Array(0, 0), 10) ' Vẽ đường tròn Set rect = Ents.AddRect(Array(0, 0), 10, 10) ' Vẽ hình chữ nhật Set Sel = Doc.SelectionSetList.Add("quang") ' Tạo selection Sel.AddItem rect ' Thêm rect vào selection VDRAW41.CommandAction.CmdCopy Sel, Array(0, 0), Array(0, 0) ' Copy selection VDRAW41.CommandAction.CmdRotate Sel, Array(0, 0), 3.14 / 4 ' Quay hình chữ nhật, 45 do VDRAW41.CommandAction.Zoom "E", Empty, Empty End Sub

III.3.6. Người dùng chọn đối tượng

Trong chương trình, ngoài vi ệc vẽ các đối tượng, VDraw còn cho phép ng ười dùng tương tác với các đối tượng đó. Ví dụ như khi bạn xây dựng một chương trình vẽ sơ đồ kết cấu với VDraw. Sau đó, người dùng ch ọn các thanh ho ặc nút trong s ơ đồ để nh ập các giá tr ị tải trọng. Để thực hiện được chức n ăng này, ta dùng ph ương thức Select c ủa đối tượng con CommandAction trong VDraw với cú pháp sau:

VDraw41.CommandAction.CmdSelect( SelectMode )

Trong đó:

- VDraw41: Tên đối tượng VDraw, tên được sử dụng trong ví dụ là tên mặc định của đối tượng đối với phiên bản 4.1

- CommandAction: đối t ượng thu ộc l ớp VDCOMMAND dùng để t ương tác v ới VDraw thông qua các l ệnh t ương t ự các l ệnh th ường s ử d ụng trong AutoCAD (Zoom, Select, Copy, Move, Erase, Line, Rectangle, Circle...)

- SelectMode: Tham số xác định cách thức để lựa chọn đối tượng, có thể có các giá trị như sau:

o "ALL": Chọn tất cả các đối tượng trong Document

o "LAST": Đối tượng được tạo ra sau cùng

o "PREV": Chọn các đối tượng được chọn ở lệnh gần nhất

o "USER": Cho phép ng ười dùng ch ọn đối tượng bằng chuột (chọn bằng cách pick đối tượng ho ặc b ằng cửa sổ - gi ống AutoCAD). Để xác nh ận các đối tượng được chọn (kết thúc lệnh chọn), người dùng click phải chuột.

Page 112: 1139020232Thuc Tap Tin Hoc Xay Dung

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

112

o Một SelectionSet

o Một đối tượng (ví dụ: đoạn thẳng, đường tròn....)

Trong trường hợp để người dùng chọn đối tượng, ta sử dụng tham số SelectMode với giá trị "USER". Tuy nhiên, giải pháp này gặp phải một số vấn đề, xét ví dụ sau:

Tạo mới 1 Project, trên form m ặc định, thêm vào 1 VDraw control (tên là VDRAW41) và một nút lệnh (tên là Command1), sau đó nhập vào đoạn chương trình sau:

Private Sub Form_Load() VDRAW41.ActiveDocument.Entities.AddLine Array(0, 0), Array(5, 5) VDRAW41.ActiveDocument.Entities.AddCircle Array(0, 0), 2 End Sub Private Sub Command1_Click() VDRAW41.CommandAction.CmdSelect "USER" ' Chuyển sang chế độ người dùng chọn MsgBox "Chon xong roi" ' Hộp thoại này sẽ hiện ra khi... ' ...người dùng chọn xong đối tượng End Sub

Khi chạy chương trình, chúng ta th ấy VDraw control có một đoạn thẳng và một đường tròn (do Sub Form_Load vẽ ra).

Click chuột vào Command1 r ồi di chu ột đến đoạn thẳng và click ti ếp, ta th ấy đoạn thẳng được chọn nhưng không th ấy hộp thoại hiện ra. N ếu tiếp tục click vào đường tròn thì c ả đường tròn cũng được chọn nhưng hộp thoại cũng không hiện ra.

Click phải chuột trong VDraw control thì bạn mới thấy hộp thoại xuất hiện, có nghĩa là lệnh tiếp sau của lệnh CmdSelect chỉ được gọi khi người dùng click phải chuột. Điều này dễ gây hiểu lầm cho người sử dụng, do đó chúng tôi đưa ra một giải pháp khác, xét ví dụ sau:

Tạo mới 1 Project, trên form mặc định, thêm vào 1 VDraw control (tên là VDRAW41) và 2 nút lệnh (tên là Command1 và Command2), sau đó nhập vào đoạn chương trình sau:

Private Sub Form_Load() VDRAW41.ActiveDocument.Entities.AddLine Array(0, 0), Array(5, 5) VDRAW41.ActiveDocument.Entities.AddCircle Array(0, 0), 2 VDRAW41.ActiveDocument.Entities.AddRect Array(2, 2), 2, 2 End Sub Private Sub Command1_Click() VDRAW41.CommandAction.CmdSelect "USER" End Sub Private Sub Command2_Click() Dim ob As VDFIGURE For Each ob In VDRAW41.ActiveDocument.Entities If ob.HighLight Then MsgBox ob.Type End If Next

Page 113: 1139020232Thuc Tap Tin Hoc Xay Dung

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

113

VDRAW41.CommandAction.Cancel End Sub

Đoạn chương trình trên cũng gần giống ở ví dụ trước:

- Sub Form_Load: Vẽ một đoạn thẳng, một đường tròn và một hình chữ nhật

- Sub Command1_Click : Chuy ển sang ch ế độ người dùng ch ọn đối tượng (nhưng không đợi người dùng click phải chuột)

- Sub Command2_Click: Sử dụng cấu trúc For Each...Next để duyệt qua t ất cả các đối t ượng c ủa VDraw, tìm xem đối t ượng nào đang b ị đánh d ấu (thu ộc tính HighLight) thì hiển thị kiểu (Type) của nó ra bằng MsgBox. Sau khi duyệt xong thì bỏ chế độ chọn bằng phương thức Cancel của CommandAction.

Bây giờ bạn có thể chạy thử nghiêm chương trình. Click nút Command1 để chọn đối tượng. Sau khi ch ọn xong đối tượng cần thi ết, b ạn Click nút Command2 để xem đối tượng nào đang được chọn.

Tóm lại, việc lựa chọn đối tượng theo phương pháp thứ nhất hoặc thứ 2 tùy thu ộc vào yêu cầu của ứng dụng. Yêu c ầu đặt ra là ph ải lựa chọn được phương pháp thích h ợp sao cho người dùng không cảm thấy khó chịu khi sử dụng.

III.3.7. Đọc và lưu bản vẽ

VDraw cho phép đọc và l ưu bản vẽ bằng định dạng DWG (phiên b ản hiện tại 4.0 h ỗ trợ DWG 2000). Để đọc và lưu bản vẽ ta sử dụng hai phương thức Open và Save của VDraw control.

retval = object.Open (FileName, WindowHandleToPlaceCaption, DwgFileChecking)

- FileName: Tên file, nếu là xâu rỗng thì hiện hộp thoại mở file - WindowHandleToPlaceCaption: Handle c ủa cửa sổ cần thay tiêu đề bằng tên file được mở

- DwgFileChecking: Cách xử lý trong trường hợp file mở bị lỗi (0: Có gắng mở, 1: Bỏ qua)

retval = object.Save

- Mô tả: Lưu file vào ổ đĩa. - retval: TRUE nếu thành công, FALSE nếu không

retval = object.SaveAs(FullFileName, CADVersion)

- FullFilename: Đường dẫn (đầy đủ) đến file - CADVersion: số hiệu phiên bản - retval: TRUE nếu thành công, FALSE nếu không

Giá trị Tên hằng Giải thích

0 VdCadVer25 DWG/DXF Release 2.5

Page 114: 1139020232Thuc Tap Tin Hoc Xay Dung

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

114

1 VdCadVer26 DWG/DXF Release 2.6

2 VdCadVer9 DWG/DXF Release 9

3 VdCadVer10 DWG/DXF Release 10

4 VdCadVer11 DWG/DXF Release 11

5 VdCadVer13 DWG/DXF Release 13

6 VdCadVer14 DWG/DXF Release 14

7 VdCadVer2000 DWG/DXF Release 2000/2002

100 (default)

VdCaddefault DWG/DXF Release 2000/2002

III.3.8. Một số mẹo vặt với VDraw

- Khi phải tạo ra các bản vẽ với VDraw, bạn có nên dùng các lệnh của Vdraw để tạo từ đầu các layer, đặt màu s ắc cho chúng, t ạo các textstyle, dimstyle...? Câu tr ả lời là không nên làm nh ư vậy! Để thuận tiện hơn, bạn ch ỉ cần sử dụng AutoCAD để tạo sẵn những bản vẽ đã có các tính ch ất trên (c ấu trúc layer, màu s ắc, kiểu chữ, kiểu dim). Đồng thời bản vẽ của bạn cũng có thể có sẵn một số block sẽ sử dụng (các ký hiệu hoặc khung tên...). Sau đó, ch ỉ cần dùng l ệnh Open đã trình bày ở trên để mở bản vẽ, bạn đã có sẵn một môi trường hoàn chỉnh để làm việc. Chú ý rằng, để VDraw có thể sử dụng bản vẽ sẵn của bạn, phải lưu bản vẽ về định dạng AutoCAD 2000.

Page 115: 1139020232Thuc Tap Tin Hoc Xay Dung

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

115

-

CHƯƠNG IV. Trợ giúp và đóng gói

IV.1. Lập trợ giúp với RoboHelp

IV.2. Đóng gói với InstallSheld

IV.3. Tạo film demo với WinCam

Page 116: 1139020232Thuc Tap Tin Hoc Xay Dung

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

116

Tài liệu tham khảo [1]. Hướng dẫn học Visual Basic 6.0 (www.vovisoft.com)

[2]. Learning VB6 24h

[3]. Phân tích thi ết kế hướng đối tượng bằng UML – Đặng Văn Đức – Nhà xu ất bản Giáo dục

[4]. Object-oriented Analysis and Design using the UML, Rational, Software engineering