Tin hoc xay dung beta

85
ĐẠI HC GIAO THÔNG VN TI BMÔN TĐỘNG HÓA THIT KCU ĐƯỜNG BÀI GING TIN HC XÂY DNG

Transcript of Tin hoc xay dung beta

Page 1: Tin hoc xay dung beta

ĐẠI HỌC GIAO THÔNG VẬN TẢI BỘ MÔN TỰ ĐỘNG HÓA THIẾT KẾ CẦU ĐƯỜNG

BÀI GIẢNG

TIN HỌC XÂY DỰNG

Page 2: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 2

PHầN Mở ĐầU TỔNG QUAN MÔN HỌC...............................................................5 PHầN 1 NGÔN NGỮ LẬP TRÌNH VISUAL BASIC CƠ BẢN .................................7 CHƯƠNG I TỔNG QUAN VISUAL BASIC 6.0.......................................................8 I.1. Giới thiệu về Visual Basic......................................................................................................................... 8 1.2. Integrated Development Environment (IDE)......................................................................................... 9

1.2.1 Cấu trúc một dự án VB........................................................................................................................ 9 1.2.2 Các thành phần của IDE ...................................................................................................................... 9 1.2.3 Soạn thảo chương trình...................................................................................................................... 10

1.3. Trợ giúp trong quá trình làm việc (Help)............................................................................................. 11 CHƯƠNG II CẤU TRÚC LẬP TRÌNH TRONG VISUAL BASIC .....................12 II.1 QUY TẮC VIẾT MÃ LỆNH................................................................................................................. 12 II.2 CÁC TỪ KHÓA TRONG VB6 ............................................................................................................. 13 II.3 CÁC KIỂU DỮ LIỆU CƠ BẢN............................................................................................................ 13

II.3.1 Boolean ............................................................................................................................................. 13 II.3.2 Byte................................................................................................................................................... 14 II.3.3 Integer (Kiểu nguyên) ....................................................................................................................... 14 II.3.4 Long .................................................................................................................................................. 14 II.3.5 Single ................................................................................................................................................ 14 II.3.6 Double (Kiểu thực) ........................................................................................................................... 14 II.3.7 String (Kiểu chuỗi)............................................................................................................................ 14 II.3.8 Date (Kiểu thời gian) ........................................................................................................................ 16 II.3.9 Kiểu mảng (array) ............................................................................................................................. 16 II.3.8 Kiểu dữ liệu do người dùng định nghĩa............................................................................................. 16 II.3.9 Kiểu lớp (class) ................................................................................................................................. 17 II.3.10 Kiểu Variant.................................................................................................................................... 17 II.3.11 Chuyển đổi (convert) kiểu dữ liệu................................................................................................... 18

II.4 KHAI BÁO BIẾN................................................................................................................................... 18 II.4.1 Khai báo biến với các kiểu dữ liệu thông thường ............................................................................. 18 II.4.2 Khai báo hằng. .................................................................................................................................. 18 II.4.3 Khai báo kiểu tự định nghĩa. ............................................................................................................. 19 II.4.4 Khai báo mảng .................................................................................................................................. 19 II.4.5 Khai báo, tạo và làm việc với biến đối tượng. .................................................................................. 21 II.4.6 Các chú ý khi khai báo...................................................................................................................... 21

II.5 BIỂU THỨC ........................................................................................................................................... 21 II.5.1 Các khái niệm ................................................................................................................................... 21 II.5.2 Các loại phép toán............................................................................................................................. 21

II.6 CÁC CÂU LỆNH ..................................................................................................................................... 1 II.6.1 Lệnh gán.............................................................................................................................................. 1 II.6.2 Lệnh rẽ nhánh If.................................................................................................................................. 1 II.6.2 Câu lệnh lựa chọn Select Case ............................................................................................................ 3 II.6.3 Câu lệnh lặp xác định.......................................................................................................................... 4 II.6.4 Câu lệnh lặp xác định trong một tập hợp ............................................................................................ 5 II.6.5 Câu lệnh lặp không xác định............................................................................................................... 5

II.7 CHƯƠNG TRÌNH CON (HÀM VÀ THỦ TỤC)................................................................................... 6 II.7.1 Khái niệm............................................................................................................................................ 6 II.7.2 Hàm - Function ................................................................................................................................... 6 II.7.3 Thủ tục - Sub....................................................................................................................................... 7 II.7.4 Truyền tham số cho chương trình con................................................................................................. 7

II.8 TRUY XUẤT DỮ LIỆU TRONG VISUAL BASIC.............................................................................. 9 II.8.1 Các khái niệm ..................................................................................................................................... 9 II.8.2 Biến toàn cục..................................................................................................................................... 10 II.8.3 Biến cục bộ ....................................................................................................................................... 10 II.8.4 Biến module ...................................................................................................................................... 10

II.9 GỠ LỖI TRONG VISUAL BASIC (Debug)........................................................................................ 10 2.9.1 Xử lý lỗi lúc RunTime ....................................................................................................................... 11 2.9.2 Dùng khai báo Option Explicit .......................................................................................................... 11 2.9.3 Dùng Breakpoints .............................................................................................................................. 11 2.9.4 Dùng Immediate Window.................................................................................................................. 12

Page 3: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 3

2.9.5 Dùng Watch Window ........................................................................................................................ 12 2.9.2 Dùng Comment (chú thích) ............................................................................................................... 12

II.10 TỔ CHỨC CHƯƠNG TRÌNH............................................................................................................ 13 CHƯƠNG III FORM VÀ MỘT SỐ ĐIỀU KHIỂN THÔNG DỤNG......................14 III.1 Các khái niệm liên quan....................................................................................................................... 14 III.2 Form....................................................................................................................................................... 16

III.2.1 Khái niệm ........................................................................................................................................ 16 III.2.2 Thuộc tính........................................................................................................................................ 16 III.2.3 Sự kiện............................................................................................................................................. 16

III.3 Nhãn (Label).......................................................................................................................................... 16 III.3.1 Khái niệm ........................................................................................................................................ 16 III.3.2 Thuộc tính........................................................................................................................................ 16 III.3.3 Sự kiện............................................................................................................................................. 16

III.4 Khung (Frame)...................................................................................................................................... 17 Khung cũng có các thuộc tính và sự kiện thông dụng như của điều khiển nhãn như: Name, Caption, Click, DblClick... .................................................................................................................................................. 17

III.3 Nút lệnh (CommandButton) ................................................................................................................ 17 III.3.1 Khái niệm ........................................................................................................................................ 17 III.3.2 Thuộc tính........................................................................................................................................ 17 III.3.3 Sự kiện............................................................................................................................................. 17

III.4 Ô nhập dữ liệu (TextBox)..................................................................................................................... 17 III.3.1 Khái niệm ........................................................................................................................................ 17 III.3.2 Thuộc tính........................................................................................................................................ 18 III.3.3 Sự kiện............................................................................................................................................. 18

III.5 ListBox................................................................................................................................................... 19 III.3.1 Khái niệm ........................................................................................................................................ 19 III.3.2 Thuộc tính........................................................................................................................................ 19 III.3.3 Phương thức..................................................................................................................................... 19

III.6 ComboBox ............................................................................................................................................. 19 III.7 Check Box.............................................................................................................................................. 20

III.7.1 Khái niệm: ....................................................................................................................................... 20 III.7.2 Thuộc tính:....................................................................................................................................... 20

III.8 Option Button........................................................................................................................................ 20 III.9 Điều khiển thanh cuộn ngang (HscrollBar) ........................................................................................ 20

III.9.1 Khái niệm ........................................................................................................................................ 20 III.9.2 Thuộc tính........................................................................................................................................ 20 III.9.3 Sự kiện............................................................................................................................................. 21

III.10 Điều khiển thanh cuộn đứng (VScrollBar) ....................................................................................... 21 III.11 Điều khiển thời gian (Timer) ............................................................................................................. 21

III.11.1 Khái niệm ...................................................................................................................................... 21 III.11.2 Thuộc tính:..................................................................................................................................... 21 III.11.3 Sự kiện........................................................................................................................................... 21

III.12 Danh sách ổ đĩa (DriveListbox), thư mục (DirListbox), tập tin (FileListbox) ............................... 21 CHƯƠNG IV LÀM VIỆC VỚI TẬP TIN (FILE) .................................................23 IV.4 Mô hình File System Object (FSO)...................................................................................................... 23

IV.4.1 Tạo đối tượng FileSystemObject..................................................................................................... 23 IV.4.2 Truy cập ổ đĩa, thư mục, tập tin....................................................................................................... 24 IV.4.3 Thông tin về ổ đĩa............................................................................................................................ 24 IV.4.4 Làm việc với thư mục...................................................................................................................... 24 IV.4.5 Làm việc với tập tin......................................................................................................................... 24 IV.4.6 Ví dụ ................................................................................................................................................ 25

IV.5 Hàm I/O và lệnh xử lý tập tin .............................................................................................................. 27 IV.5.1 Mở tập tin ........................................................................................................................................ 27 IV.5.2 Đọc nội dung tập tin ........................................................................................................................ 28 IV.5.3 Ghi dữ liệu lên tập tin ...................................................................................................................... 28 IV.5.4 Đóng tập tin ..................................................................................................................................... 28 IV.5.5 Ví dụ ................................................................................................................................................ 29

PHầN 2 TIN HỌC XÂY DỰNG..............................................................................31 CHƯƠNG I THIẾT KẾ GIAO DIỆN ................................................................32 I.1 Menu ......................................................................................................................................................... 32

Page 4: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 4

I.1.1 Khái niệm ........................................................................................................................................... 32 I.1.2 Các thuộc tính..................................................................................................................................... 32 I.1.3 Cách tạo menu.................................................................................................................................... 33

I.2 Hộp thoại (Dialog Box) ............................................................................................................................ 33 I.2.1 Khái niệm ........................................................................................................................................... 33 I.2.2 Hộp thoại thông điệp .......................................................................................................................... 34

I.2.2.1 Loại chỉ xuất thông báo .............................................................................................................. 34 I.2.2.2 Loại tương tác với người dùng ................................................................................................... 34

I.2.3 Hộp thoại nhập ................................................................................................................................... 35 I.2.4 Các loại hộp thoại thông dụng (Common Dialog).............................................................................. 35

I.2.4.1 Hộp thoại mở và lưu tập tin ........................................................................................................ 35 I.2.4.2 Hộp thoại Chọn màu................................................................................................................... 36 I.2.4.3 Hộp thoại chọn Font chữ ............................................................................................................ 36 I.2.4.4 Hộp thoại In ấn ........................................................................................................................... 37

I.3 Xử lý các sự kiện chuột và bàn phím...................................................................................................... 38 I.3.1 Sự kiện chuột...................................................................................................................................... 38 I.3.2 Sự kiện bàn phím................................................................................................................................ 39

I.4 Sử dụng Multiple document interface (MDI) ........................................................................................ 39 I.4.1 Khái niệm ........................................................................................................................................... 39 I.4.2 Thiết lập ứng dụng MDI..................................................................................................................... 40

I.5 Tạo giao diện Wizard (Thuật sĩ)............................................................................................................. 40 CHƯƠNG II XỬ LÝ ĐỒ HỌA..........................................................................42 II.1 Tọa độ màn hình..................................................................................................................................... 42 II.2 Màu (Color) ............................................................................................................................................ 43 II.3 Các thuộc tính đồ họa của Form và PictureBox .................................................................................. 44 II.4 Các phương thức đồ họa........................................................................................................................ 44

II.4.1 Phương thức Print ............................................................................................................................. 44 II.4.2 Phương thức PSet.............................................................................................................................. 45 II.4.3 Phương thức Line.............................................................................................................................. 46 II.4.4 Phương thức Circle ........................................................................................................................... 48 II.4.5 Phương thức PaintPicture.................................................................................................................. 48

II.5 Các điều khiển đồ họa ............................................................................................................................ 52 II.5.1 Điều khiển hộp hình ảnh (Picture Box)............................................................................................. 52 II.5.2 Điều khiển hình ảnh (Image)............................................................................................................. 52 II.5.3 Điều khiển hình dạng (Shape)........................................................................................................... 52 II.5.4 Điều khiển Line................................................................................................................................. 53

II.6 Các phép biến đổi tọa độ........................................................................................................................ 53 CHƯƠNG III LÀM VIỆC VỚI AUTOCAD/EXCEL ................................................57 III.1 Làm việc với AutoCAD ........................................................................................................................ 57

III.1.1 Hệ thống các đối tượng trong AutoCAD ......................................................................................... 60 III.1.2 Kết nối VB với AutoCAD ............................................................................................................... 60 III.1.3 Một số phương thức cơ bản ............................................................................................................. 61 III.1.4 Ví dụ minh họa ................................................................................................................................ 61

III.2 Làm việc với Microsoft Excel............................................................................................................... 61 III.2.1 Hệ thống các đối tượng trong Excel ................................................................................................ 61 III.2.2 Kết nối VB với MS Excel................................................................................................................ 62 III.2.2 Một số phương thức cơ bản ............................................................................................................. 63 III.2.3 Ví dụ minh họa ................................................................................................................................ 63

Page 5: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 5

Phần mở đầu TỔNG QUAN MÔN HỌC

Page 6: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 6

Lesson 1

TỔNG QUAN MÔN HỌC Nội dung - Mục tiêu - Tìm hiểu cơ bản về ngôn ngữ lập trình Visual Basic (VB). - Sử dụng các điều khiển, viết mã lệnh và xây dựng chương trình trong VB6 - Cơ sở về phương pháp hướng đối tượng. - Lập trình hướng đối tượng dựa trên VB6. - Sinh viên nắm được các kỹ năng cơ bản của lập trình, ứng dụng vào ngành xây dựng thông qua môi trường VB6. - Hiểu về phương pháp hướng đối tượng, xây dựng chương trình theo phương pháp hướng đối tượng với VB6. - Nói tóm lại dù chưa đạt mức thành thạo nhưng cũng sẽ tự mình hoàn thành được các chương trình nhỏ phục vụ chuyên môn sau này. - Hướng mở rộng: VB.NET, VBA, VBScript (Vẽ hình + Giải thích). Phương pháp học - Nắm vững kiến thức cơ bản, dành nhiều thời gian cho việc thực hành trên máy tính. - Đam mê, tự tìm hiểu, đi từ những ví dụ cơ bản. - Chú tâm ngay từ đầu, mục đích không phải chỉ để thi qua. - Học từ nhiều nguồn tài liệu khác nhau, đặc biệt là Internet, giúp tra cứu mỗi khi gặp khó khăn và thắc mắc. - Bài giảng sẽ đi từng phần các kiến thức cơ bản, kết hợp với việc thực hành ngay trên lớp. Thời gian sử dụng máy chiếu >70%. Sinh viên hăng hái tham gia xây dựng bài sẽ được cộng điểm khuyến khích. Tài liệu tham khảo - Microsoft Visual Basic 6.0 Và Lập Trình Cơ Sở Dữ Liệu - Tự Học Lập Trình Visual Basic 6.0…

Le Dac Hien
Draft
Page 7: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 7

Phần 1 NGÔN NGỮ LẬP TRÌNH VISUAL BASIC

CƠ BẢN

Page 8: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 8

CHƯƠNG I TỔNG QUAN VISUAL BASIC 6.0

Mục tiêu: Chương này giới thiệu về môi trường phát triển tích hợp (IDE) Microsoft

Visual Basic 6.0; cũng như giúp sinh viên có cái nhìn tổng quan về Visual Basic. Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau:

- Sử dụng môi trường phát triển tích hợp VB 6.0 để phát triển ứng dụng. - Cách tạo dự án mới (New Project) trong VB 6.0. - Sử dụng tốt hệ thống trợ giúp trong quá trình làm việc

Kiến thức có liên quan: - Sử dụng hệ điều hành Windows.

I.1. Giới thiệu về Visual Basic Visual Basic 6.0 (VB6) là một phiên bản của bộ công cụ lập trình Visual Basic (VB), cho phép người dùng tiếp cận nhanh cách thức lập trình trên môi trường Windows. Visual Basic là gì? 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, được phát triển cho những người không chuyên sâu về lập trình. VB được phát triển và mở rộng dựa trên BASIC. 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ắt là GUI). VB có sẵn các thành phần điều khiển trực quan (controls), các điểu khiển này được lập trình viên sắp xếp trên form tạo thành giao diện người dùng. Chính bởi sự đơn giản, dễ học nên VB6 là cách nhanh và tốt nhất để lập trình trong môi trường Microsoft Windows. VB6 cung cấp bộ công cụ hoàn chỉnh để đơn giản hóa việc lập trình ứng dụng dựa trên giao diện đồ họa. 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, AutoCAD, .v.v.. còn gọi là Macros. Dùng VBA trong MSOffice, 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. VBScript được dùng cho Internet và chính Operating System. Cài đặt Visual Basic Phiên bản: Visual Basic 6.0 Cấu hình tối thiểu: 32 MB RAM, CPU Pentium II, Windows 98. Sử dụng các file cài đặt (1CD) để cài, sửa đổi, xóa VB. Ngoài ra có thể cài thêm thư viện MSDN – Help (3CD)

Page 9: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 9

1.2. Integrated Development Environment (IDE) IDE là tên tắt của môi trường phát triển tích hợp, đây là nơi tạo ra các chương trình VB.

1.2.1 Cấu trúc một dự án VB - Dự án (Project) là tập hợp các file để hình thành nên chương trình ứng dụng.

- Dự án VB (VB Project) = Code Modules + Class Modules + Userform - Code Module: mã lệnh chính của chương trình - Class Module: thiết kế các lớp của dự án - Userform: giao diện dạng hộp thoại của dự án để nhập số liệu và xuất kết quả.

VB hỗ trợ tạo nhiều kiểu ứng dụng khác nhau. Để tạo mới một dự án thực thi ta chọn Standard EXE rồi chọn Open.

1.2.2 Các thành phần của IDE - Form trắng để thiết kế giao diện cho ứng dụng - Cửa sổ dự án hiển thị các file được tạo trong ứng dụng. - Cửa sổ thuộc tính hiển thị các thuộc tính của đối tượng và điều khiển được chọn. - Toolbox chứa các điều khiển cần thiết đễ xây dựng một ứng dụng VB. - Cửa sổ viết mã chương trình (Code). - MenuBar, Toolbar, Layout, Immediate Window,ViewCode, ViewForm

Page 10: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 10

Menu Bar Chứa đầy đủ các lệnh để 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 như Project, Format, hoặc Debug Toolbars (Debug, Edit, form Editor, Standard) Các toolbars gồm các biểu tượng cho phép chọn nhanh các chức năng cần thiết. Sử dụng Menu View | Toolbars để tắt hoặc mở các toolbars. Các toolbars có thể sửa đổi theo ý thích bằng chức năng: View | Toolbars | Customize... Toolbox Bao gồm các điều khiển (controls), dùng thiết kế giao diện đồ họa. Khi có nhiều các control, có thể sử dụng Add Tab... để sắp xếp lại vị các control theo ý muốn. Project Explorer Là nơi liệt kê các forms, modules và class trong dự án hiện hành. Properties window Cửa sổ thuộc tính hiển thị các thuộc tính của đối tượng và điều khiển được chọn. Một property là một đặc tính của một đối tượng 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 display bằng Font chữ mới. Form Layout Dùng form Layout để chỉnh vị trí của các form khi form hiện ra lần đầu lúc chương trình chạy. Immediate Window Dùng để gở rối (debug) quá trình test ứng dụng. Ta có thể xem các thông số khi chạy chương trình hay khi đang tạm ngừng. Có thể thay đổi giá trị các biến hay chạy một dòng chương trình.

1.2.3 Soạn thảo chương trình Trong Visual Basic IDE, cửa sổ mã lệnh (Code) cho phép soạn thảo mã chương trình với một số chức năng (Tắt mở trong Tools|Option)

- Đánh dấu (Bookmarks): Chức năng này cho phép đánh dấu các dòng lệnh của chương trình giúp việc xem lại các phần mã lệnh dễ dàng. Sử dụng tính năng này qua thanh công cụ hoặc menu Edit.

- Tự động kiểm tra cú pháp (Auto Syntax Check). Khi chức năng này bật, nếu viết một dòng chứa lỗi, VB sẽ thông báo về lỗi và hiển thị con trỏ ngay dòng chương trình lỗi. Nếu không có chức năng này, VB chỉ hiển thị dòng mã sai với màu đỏ không kèm chú thích.

- Yêu cầu khai báo biến (Require Variable Declaration) (Tùy chọn): VB sẽ thông báo lỗi khi một biến được dùng mà không khai báo và sẽ chỉ ra vị trí của biến đó.

- Gợi nhớ mã lệnh: (Auto List Members) Tự động hiển thị gợi ý khi ta gõ vào tên của chúng. Sử dụng Ctrl+Space để sử dụng chức năng tự động hoàn thành mã chương trình.

Page 11: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 11

1.3. Trợ giúp trong quá trình làm việc (Help) Trong khi lập trình có thể cần tìm hiểu thông tin liên quan đến các commands, functions .v.v.. của VB6. Các thông tin này được Microsoft cung cấp rất đầy đủ trong thư viện trợ giúp Microsoft Developer Network | MSDN Library Visual Studio 6.0. Truy cập thông qua menu Help | Contents của VB6, hoặc chọn (bôi đen) một từ khóa trong code rồi ấn F1. Phần trợ giúp được thiết kế giống như 1 quyển sách, kết hợp với chức năng tìm kiếm theo từ khóa khiến người đọc dễ dàng tra cứu. Các thông tin được liên kết với nhau đầy đủ giúp việc tham khảo đạt hiệu quả cao. Yêu cầu: Máy tính phải cài đầy đủ thư viện MSDN (3CD) Context Sensitive Help (trợ giúp đúng tình huống) Nhiều phần của VB6 hỗ trợ context sensitive, có nghĩa là khi gặp lỗi hoặc cần trợ giúp chỉ cần ấn F1 hoặc bôi đen từ khóa rồi nhấn F1. Chương trình sẽ hiển thị thông tin liên quan đến vấn đề cần trợ giúp. Các phần context sensitive là:

• Các Windows của VB6 như Properties, Code .v.v.. • Các control trong Toolbox. • Các Object trên một form hoặc Object tài liệu. • Các đặc tính trong Window Properties. • Các keywords của VB6 • Các thông báo lỗi (error messages)

Ngoài ra, trong Help thường có Example là các ví dụ minh họa cách dùng cho một đối tượng nào đó dùng tham khảo rất phù hợp. Tìm kiếm trợ giúp trên Internet Việc tìm kiếm thông tin trên Internet là hết sức cần thiết, dù trong lĩnh vực nào. Đặc biệt là trong công việc lập trình. Chúng ta có thể tra cứu, tìm kiếm ví dụ, thảo luận về vấn đề mắc phải… Một số website hữu ích: http://msdn.microsoft.com/ - Trang chủ của Microsoft Developer Network http://www.google.com - Trang tìm kiếm nhanh và hiệu quả http://www.codeproject.com - Mã nguồn miễn phí và nhiều ví dụ hữu ích

Question for today!

Page 12: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 12

Lesson 2 CHƯƠNG II CẤU TRÚC LẬP TRÌNH TRONG VISUAL BASIC Mục tiêu: Chương này giới thiệu về các cấu trúc lập trình trong VB; đây là các cấu trúc cốt

lõi để xây dựng nên một chương trình VB.

Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau: - Sử dụng môi trường lập trình VB để viết mã lệnh, các quy tắc, từ khóa.

- Các kiểu dữ liệu trong VB.

- Cách khai báo hằng, biến trong VB.

- Biểu thức trong VB.

- Các câu lệnh đơn cũng như các câu lệnh có cấu trúc.

- Chương trình con trong VB.

- Truy xuất dữ liệu, tổ chức chương trình trong VB.

- Gỡ lỗi trong VB.

Kiến thức có liên quan: - Cách sử dụng môi trường phát triển của VB

II.1 QUY TẮC VIẾT MÃ LỆNH Cũng giống như các ngôn ngữ lập trình khác, VB đưa ra những quy tắc cho người lập trình trong quá trình viết mã lệnh. Người lập trình cần phải tuân theo các quy tắc này để trình biên dịch có thể dịch mã lệnh mà không phát sinh lỗi cú pháp.

- Các câu lệnh phải là các dòng riêng biệt. Nếu có nhiều lệnh trên cùng một dòng thì giữa các lệnh ngăn cách nhau bằng dấu hai chấm (:). Nếu dòng lệnh quá dài, muốn ngắt lệnh thành hai dòng thì sử dựng dấu cách và dấu gạch dưới (_).

- Dòng chú thích được bắt đầu bằng (‘) Qui ước đặt tên biến của ngôn ngữ VB cũng tương tự như các ngôn ngữ khác:

• Chỉ dùng được ký tự (hoa và thường), số, và ký tự gạch chân. • Phải bắt đầu bằng ký tự, dài không quá 255 ký tự. • Không có khoảng trống, không trùng tên từ khóa.

Ví dụ: Đúng Sai

My_Car My.Car ThisYear 1NewBoy Long_Name_Can_beUSE He&HisFather

Page 13: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 13

Các lỗi cú pháp sẽ được VBA IDE phát hiện và báo lỗi cho người lập trình ngay trong quá trình viết mã lệnh.

II.2 CÁC TỪ KHÓA TRONG VB6 Từ khoá là tập hợp các từ cấu thành một ngôn ngữ lập trình. Mỗi ngôn ngữ lập trình có một bộ từ khoá riêng, dưới đây là danh sách các từ khoá trong ngôn ngữ lập trình VB6:

As For Mid Print String Binary Friend New Private Then ByRef Get Next Property Time ByVal Input Nothing Public To Date Is Null Resume True Else Len On Seek WithEventsEmpty Let Option Set Error Lock Optional Static False Me ParamArray Step

II.3 CÁC KIỂU DỮ LIỆU CƠ BẢN Kiểu dữ liệu là một tập hợp các giá trị mà một biến của kiểu có thể nhận và một tập hợp các phép toán có thể áp dụng trên các giá trị đó. Trong VB6 có rất nhiều kiểu dữ liệu khác nhau như: Boolean, Double, Integer, Object, String, Variant... Từng kiểu có mục đích riêng và việc sử dụng đúng sẽ giúp chương trình chạy nhanh. Chúng ta sẽ đi tìm hiểu các kiểu dữ liệu cơ bản

II.3.1 Boolean Đặc điểm: Chỉ có 2 trạng thái: True và False. Khi chuyển từ các dữ liệu dạng số sang kiểu logic, 0 sẽ được chuyển thành FALSE còn giá trị khác sẽ được chuyển thành TRUE. Khi chuyển từ kiểu logic sang kiểu số, giá trị FALSE sẽ được chuyển thành 0 còn giá trị TRUE sẽ được chuyển thành -1. Phạm vi áp dụng: các bài toán lặp, if then, thường dùng làm cờ hiệu (flags). Ví dụ: ‘Cách 1: DKTuoi = (Tuoi =< 18) DKThuNhap = (ThuNhap > 1000000) If DKTuoi And DKThuNhap Then LaTrieuPhuTre End If ‘Cách 2: If (Tuoi =< 18) Then DKTuoi = 1 Else DKTuoi = 0 End If If (ThuNhap > 1000000) Then DKThuNhap = 1 Else DKThuNhap = 0 End If If (DKTuoi = 1) And (DKThuNhap = 1) Then LaTrieuPhuTre End If

Page 14: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 14

II.3.2 Byte Đặc điểm: Sử dụng 8-bit để lưu trữ giá trị, tức có thể lưu giá trị dương từ 0 đến 255 Phạm vi áp dụng: hữu ích trong việc lưu dữ liệu nhị phân

II.3.3 Integer (Kiểu nguyên) Đặc điểm: Kiểu số nguyên, sử dụng 16-bit để lưu trữ, Khoảng giá trị: từ -32768 đến 32767 Phạm vi áp dụng: Khi trong chương trình không sử dụng giá trị thập phân

II.3.4 Long Đặc điểm: Kiểu số nguyên, sử dụng 32-bit để lưu trữ, thường được gọi là số nguyên dài.

Khoảng giá trị: từ -2,147,483,648 đến 2,147,483,647 Phạm vi áp dụng: Kiểu Long giống như Integer chỉ chứa số nguyên.

II.3.5 Single Đặc điểm: Kiểu số thực, sử dụng 32-bit để lưu trữ, kiểu dữ liệu này còn được gọi là độ chính xác đơn. Khoảng giá trị: -3.402823e38 đến -1.401298e-45 với số âm và từ 1.401298e-45 đến 3.402823e38 cho số dương Phạm vi áp dụng: Sử dụng với giá trị thập phân nằm trong khoảng trên.

II.3.6 Double (Kiểu thực) Đặc điểm: Kiểu số thực, sử dụng 64-bit để lưu trữ, kiểu dữ liệu này được gọi là độ chính xác kép. Khoảng giá trị: -1.79769313486232e308 đến -4.94065645841247e-324 với số âm và từ 4.94065645841247e-324 đến 1.79769313486232e308 cho số dương Phạm vi áp dụng: Khi cần tính toán với yêu cầu độ chính xác cao.

II.3.7 String (Kiểu chuỗi) Đặc điểm: Chuỗi dữ liệu chứa từ 0 đến 65.500 ký tự. Từng ký tự có khoảng giá trị từ 0 đến 255 trong bảng ASCII. Có sẵn một số hàm liên quan đến chuỗi ví dụ: cắt chuỗi, tách chuỗi, nhập chuỗi,… Có thể tra cứu các hàm này trong các tài liệu tham khảo như MSDN hoặc Object Browser (thư viện Strings). Phạm vi áp dụng: Khi cần làm việc với dữ liệu văn bản (Text). Được sử dụng nhiều trong các bài toán quản lý, các bài toán yêu cầu nhập xuất dữ liệu. Việc dùng string cũng giúp cho các bài toán có giao diện thân thiện hơn. Ví dụ:

Private Sub Command1_Click() Dim sText As String Dim lTextLength As Long Dim sChar As String Dim bASCII As Byte Dim x As Long sText = " VB that la don gian!" lTextLength = Len(sText) 'So ky tu trong sText For x = 1 To lTextLength ‘Lap den ky tu cuoi cung trong sText

Page 15: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 15

sChar = Mid$(sText, x, 1)'Lay ky tu thu x trong sText bASCII = Asc(sChar) 'Lay gia tri ASCII cua ky tu MsgBox "Ma ASCII cua ky tu '" & sChar & "' la " & bASCII ‘Hien thi ket qua Next x End Sub

Các hàm xử lý chuỗi - Ghép chuỗi: cho phép ghép 2 hay nhiều chuỗi lại với nhau nhờ toán tử &. Ví dụ:

FirstWord = "Hello" SecondWord = "World" Greeting = FirstWord & SecondWord ' Greeting bây giờ là "HelloWorld"

- Len: trả về chiều dài một chuỗi được chỉ định. Ví dụ: iLen = Len(Greeting) ' iLen bằng 8 - Left: Trích chuỗi con từ phần đầu chuỗi gốc Left (String, [length]). - Right: Trích chuỗi con từ phần đuôi chuỗi gốc Right (String, [length]) - Mid: Trích chuỗi con từ giữa chuỗi gốc Mid(String, Start As Long, [length])

Ví dụ: Today = "24/05/2001" StrDay = Left(Today,2) ' StrDay = "24" ' StrYear = Right(Today,4) ' StrYear = "2001" ' StrMonth = Mid(Today,4,2) ' StrMonth = "05"

- InStr: Tìm chuỗi con trong chuỗi gốc. Nếu hàm InStr trả về 0, nghĩa là không tìm thấy. Cú pháp: InStr([start,] string1, string2, [compare]) Trong đó: Start: Xác định vị trí trong chuỗi bắt đầu việc tìm kiếm. Nếu giá trị là Null thì sẽ bắt đầu từ đầu chuỗi. Nếu như tham số Compare có đặc tả thì bắt buộc phải khai báo tham số Start. String1: Biểu thức chuỗi để so sánh. String2: Chuỗi cần tìm. Compare: Xác định kiểu so sánh chuỗi. Giá trị: vbTextCompare, vbBinaryCompare. Ví dụ 1:

myString = "The *rain in Spain mainly..." Position = Instr(myString,"*") ' Position sẽ là 5

Nếu trong myString không có dấu "*" thì Position sẽ bằng 0

Ví dụ 2: KeyValuePair = "BeatlesSong=Yesterday" Pos = Instr(KeyValuePair, "=") Key = Left(KeyValuePair, Pos-1) ‘Key= “BeatlesSong” Value = Mid(KeyValuePair, Pos+1) ‘Key= “Yesterday”

- Replace: tìm và thay thế chuỗi. Cú pháp: Replace(Expression, find, replace[, start[, count[, compare]]]) Trong đó:

- Expression: Biểu thức chuỗi chứa chuỗi cần thay thế. - find: Chuỗi cần tìm.

Page 16: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 16

- replace: Chuỗi thay thế chuỗi tìm được. - start: Tương tự như hàm InStr. - count: Xác định số lần thay thế. Mặc định là 1. - compare: Kiểu so sánh chuỗi. Giá trị: vbTextCompare, vbBinaryCompare

- LTrim (RTrim): cắt tất cả các khoảng trắng bên trái (bên phải của chuỗi) - UCase: đổi chuỗi sang chuỗi gồm các ký tự là chữ hoa. Cú pháp: UCase(string) - Asc: cho mã Ascii của một ký tự. - Chr: trả về ký tự ứng với mã Ascii được chỉ định. - InstrRev: tương tự như InStr nhưng việc tìm kiếm được tiến hành từ phải sang. - Val: Hàm đổi chuỗi sang số. - Str: Hàm đổi số sang chuỗi.

II.3.8 Date (Kiểu thời gian) Đặc điểm: Dùng để lưu trữ và thao tác trên các giá trị thời gian (ngày và giờ). Để cho VB biết dữ liệu là kiểu Date ta cần đặt giữa dấu ## hoặc “”. Việc định dạng hiển thị tùy thuộc vào việc thiết lập trong Control Panel. Phạm vi áp dụng: Lưu trữ các giá trị thời gian, ngày tháng. Ví dụ:

Dim D As Date D = #01/02/98# ‘ Hay “01/02/98”

Nếu hiểu theo kiểu người Mỹ, đây là ngày 2 tháng 1 năm 1998, còn nếu theo kiểu Vietnam thì đây là ngày 1 tháng 2 năm 1998. Chọn kiểu ngày tháng trong Control Panel|Regional Setting. - Hàm Now: trả về ngày giờ hiện tại. Ví dụ: MsgBox "NOW IS " & Format (Now, "ddd dd-mmm-yyyy hh:nn:ss") ' sẽ hiển thị NOW IS Tue 05-Oct-2004 16:15:53

II.3.9 Kiểu mảng (array) Đặc điểm: - Mảng là một khối dữ liệu gồm các phần tử có cùng tên và kiểu dữ liệu. Các phần tử trong mảng phân biệt với nhau bởi các chỉ số. - Mảng có thể có một chiều hoặc nhiều chiều. - Trong VB có hai loại biến mảng: mảng có chiều dài cố định và mảng động (chiều dài có thể thay đổi lúc thi hành). Phạm vi áp dụng: Đôi khi chúng ta có nhiều biến tương tự nhau, thí dụ như điểm thi của 10 học sinh, nếu phải đặt tên khác nhau cho từng biến (VD: HoaMark, TaiMark, SonMark, TamMark, NgaMark, HuongMark .v.v..) thì bất tiện. Chúng ta có thể dùng Array để có một tên chung cho cả nhóm, rồi nói đến điểm của từng người một bằng cách dùng một con số gọi là ArrayIndex. Việc lưu trữ dùng mảng còn giúp chúng ta xử lý dữ liệu dễ dàng hơn. Ví dụ việc tổng hợp điểm của danh sách trên.

II.3.8 Kiểu tự định nghĩa Đặc điểm: Kiểu dữ liệu do người dùng định nghĩa tương tự như kiểu bản ghi (Record) trong Pascal hay kiểu cấu trúc (Struct) trong C. - Kiểu dữ liệu này gồm các trường, có thể là các kiểu dữ liệu khác nhau.

Page 17: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 17

Phạm vi áp dụng: Trong các trường hợp cần lưu một giá trị có nhiều thuộc tính. Ví dụ các thông số của một lỗ khoan.

II.3.9 Kiểu lớp (class) Đặc điểm: Lớp được xây dựng trong Class Module hoặc trong các thư viện có sẵn. - Lớp bao gồm:

• Các thuộc tính (Property): thực chất là các biến thành viên khai báo trong lớp đó. • Các phương thức (Method): thực chất là các chương trình con được khai báo trong

lớp - các hàm (Function) và thủ tục (Procedure) thành viên. - Ngoài ra trong VB, lớp có thể có sự kiện (Event). Sự kiện tạo ra khả năng linh động trong xây dựng quan hệ giữa đối tượng với nhau và với mô môi trường.

II.3.10 Kiểu Variant Đặc điểm: Kiểu Variant là một kiểu dữ liệu đặc biệt trong VB. Biến kiểu Variant có thể chứa mọi giá trị của các kiểu dữ liệu khác, kể cả mảng. Tuy Variant tiện dụng nhưng nếu Variant được dùng nhiều chỗ, trong nhiều tình huống, cần xác định rõ hiện đang là kiểu nào. Phạm vi sử dụng: Hạn chế dùng Variant vì sẽ gây lãng phí bộ nhớ và giảm tốc độ thực thi của chương trình. Một số chú ý khi dùng biến kiểu Variant: - Nếu muốn thi hành các hàm toán học, Variant phải chứa giá trị kiểu số. - Nếu muốn nối chuỗi, dùng toán tử & thay vì toán tử +. Giá trị Empty: - Đây là giá trị đặc biệt xuất hiện khi một biến chưa được gán trị. Ta dùng hàm IsEmpty để kiểm tra giá trị Empty. - Giá trị Empty biến mất khi có một giá trị bất kỳ được gán cho biến Variant, để trở về giá trị Empty, ta gán từ khoá Empty cho biến Variant. Giá trị Null: Biến Variant chứa giá trị Null trong trường hợp những ứng dụng cơ sở dữ liệu thể hiện không có dữ liệu hoặc dữ liệu không xác định. Giá trị Error: Trong một biến kiểu Variant, Error là một giá trị đặc biệt cho biết đã có một lỗi đã xảy ra bên trong thủ tục.

Ví dụ:

Private Sub cmdShowDataTypes_Click() Dim sMess As String Dim vVariant As Variant

vVariant = "Xin chao" 'String sMess = TypeName(vVariant) & vbCrLf ' xuống dòng & về đầu dòng vVariant = 25 ' Integer sMess = sMess & TypeName(vVariant) & vbCrLf vVariant = True ' Boolean sMess = sMess & TypeName(vVariant) & vbCrLf 'Date vVariant = #1/1/2001# 'trong cặp dấu # sMess = sMess & TypeName(vVariant)

MsgBox sMess End Sub

Khi chạy chương trình kết quả là:

Page 18: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 18

II.3.11 Chuyển đổi (convert) kiểu dữ liệu VB cung cấp một số hàm để chuyển kiểu dữ liệu của một biến từ loại này sang loại khác. Val (str): Trả về giá trị kiểu thực của một chuỗi: a= Val(“1245.43 asd”) Nếu trong chuỗi có chứa ký tự khác số, hàm sẽ loại bỏ ký tự đó. CDbl (x):Trả về giá trị kiểu thực của chuỗi, chuỗi này phải là các số (number). CInt (x): Trả về giá trị kiểu nguyên (Integer). CStr (x): Trả về giá trị kiểu chuỗi. Str (x): Trả về giá trị kiểu chuỗi của một số. Các lưu ý: - Kiểu dữ liệu số nguyên: Byte, Integer, Long khi gán giá trị thập phân thì VB sẽ gán giá trị nguyên làm tròn. Lấy VD. - Thực hiện các phép tính số nguyên với số thực sẽ cho kết quả là số thực. VD: Integer + Double = Double.

Question for today!

II.4 KHAI BÁO BIẾN

II.4.1 Khai báo biến với các kiểu dữ liệu thông thường Khái niệm biến: Biến (Variable) là vùng lưu trữ được đặt tên để chứa dữ liệu tạm thời trong quá trình tính toán, so sánh và các công việc khác. Cách khai báo

Dim <tên_biến> as <Kiểu_dữ_liệu> - Dùng các từ khóa Public hay Private nhằm xác định phạm vi hoạt động của biến (sẽ giải thích ở phần sau).

Public <tên_biến> as <Kiểu_dữ_liệu> Hay: Private <tên_biến> as <Kiểu_dữ_liệu> Nếu khai báo biến không xác định kiểu dữ liệu thì biến đó có kiểu Variant. Ví dụ:

Dim sHoTen As String Public iTuoi As Integer Private iKetHon As Boolean

II.4.2 Khai báo hằng. - Là kiểu dữ liệu dùng lưu những giá trị không bao giờ thay đổi. Việc sử dụng kiểu hằng số giúp chúng ta hạn chế những nhầm lần. Đơn cử như việc sử dụng một thông số nhiều lần trong chương trình.

Page 19: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 19

[Public/ Private] Const <tên_hằng> = <giá_trị_hằng> Ví dụ:

Const g = 9.8 Const Num As Integer = 4*5

II.4.3 Khai báo kiểu tự định nghĩa. - Khai báo các kiểu dữ liệu dạng bản ghi gồm các trường theo nhu cầu của người sử dụng. Cú pháp khai báo như sau: [Pravite/Public] Type <tên_ kiểu> <tên_trường_1> as <kiểu_1> <tên_trường_2> as <kiểu_2> … <tên_trường_n> as <kiểu_n> End Type

Sau khai báo, để truy cập tới một trường của biến kiểu bản ghi, dùng toán tử (.) và cặp từ khóa With… End With Ví dụ: Dữ liệu về điểm đo trong khảo sát địa hình có thể được xây dựng gồm: chỉ số của điểm (id), tên điểm (name), tọa độ x, tọa độ y, cao độ z, mã địa vật (madiavat)

Private Type diemdo ‘ Khai báo kiểu Id as Long Ten as String X as Double, Y as Double, Z as Double Madiavat as Long End Type Private Sub Command1_Click() Dim diem as diemdo ‘ Tạo biến và gán dữ liệu With diem .Id = 1 .x = 1.5: .y = 24: .z = 11.3 .Ten = “Điểm 1” .Madiavat = 1 End With End Sub

II.4.4 Khai báo mảng

• Mảng tĩnh (mảng có kích thước cố định) [Public/ Private/ Dim] <tên_mảng>(<các thông số về chiều>) as <tên_kiểu> Các thông số về chiều có thể biểu diễn qua các ví dụ sau: Dim a(1 to 4) as Integer: mảng 1 chiều chỉ số từ 1 đến 4 kiểu nguyên. Dim a(3) as Long: mảng 1 chiều chỉ số tới 3 kiểu Long (chỉ số xuất phát mặc định là 0 hoặc được xác định thông qua khai báo Option Base)

Option Base 0 hoặc Option Base 1

Page 20: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 20

Dim a(1 to 4,2 to 6) as Double: mảng 2 chiều chỉ số từ 1 tới 4 và 2 tới 6. Dim a(2,2,3) as String: mảng 3 chiều với miền chỉ số trên tương là 2, 2 và 3.

• Mảng động (mảng có kích thước thay đổi) [Public/ Private/ Dim] <tên_mảng> () as <tên_kiểu>

Trong khai báo trên không có các thông số về chiều, thuần túy chỉ là một khai báo. - Các phần tử của mảng chưa được tạo ra (hay mảng chưa được cấp phát bộ nhớ). - Dữ liệu của mảng chỉ được tạo ra hoặc thay đổi khi có lệnh Redim.

Lệnh này có tác dụng tạo ra mảng thực sự (có kích thước và các phần tử tương ứng) hoặc thay đổi kích thước của một mảng động.

Redim <tên_mảng>(<các thông số về chiều>) as <tên kiểu> - Chú ý rằng <tên_kiểu> phải đúng như khai báo, các thông số về chiều có thể khác trước cả về số chiều và kích thước của từng chiều. - Dữ liệu mảng cũ sẽ bị, thay vào đó là phần tử của mảng mới được khởi tạo.

Ví dụ: Dim diem as diemdo Dim a() as Long Redim a(1 to 5) as Long a(1) = 100: a(2) = 200 ‘a(1) và a(2) có giá trị tương ứng 100 và 200 Redim a(1 to 3, 2 to 4) as Long ‘Mảng được làm mới hoàn toàn là một mảng 2 chiều, các giá trị a(1) và a(2) không còn ý nghĩa nữa

- Trong trường hợp muốn thay đổi kích thước của mảng mà không mất dữ liệu, dùng lệnh ReDim với từ khóa Preserve. Tuy nhiên chỉ thay đổi được biên trên của chiều cuối cùng trong mảng. Nếu thay đổi các chiều khác sẽ phát sinh lỗi. Ví dụ

Dim a() as Long ReDim a(1 to 5) as Long a(1) = 100: a(2) = 200 ReDim Preserve a(1 to 6) as Long ‘Thay đổi mở rộng mảng thêm một phần tử mà không ảnh hưởng đến các dữ liệu trước a(1)vẫn có giá trị 100, a(2)=200

Không thêm được chỉ số 0 vào mảng trên: ReDim Preserve a(0 to 6) as Long (Lỗi) Một số thao tác trên mảng - Hàm UBound trả về biên trên của một mảng. - Hàm LBound trả về biên dưới của một mảng. - Truy xuất từng phần tử trong mảng: <Tên mảng>(<Vị trí>)

- Sao chép mảng: Đối với VB6, ta có thể gán một mảng cho một mảng khác, hoặc kết quả trả về của một hàm có thể là một mảng. Ví dụ: Sub ByteCopy (old () As Byte, New () As Byte) New = old End Sub

Cách này cũng chỉ áp dụng được cho mảng khai báo động. - Mảng là kết quả trả về của hàm. Chẳng hạn như: Public Function ArrayFunction (b As Byte) As Byte()

Page 21: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 21

Dim x(2) As Byte x(0) = b x(1) = b + 2 x(2) = b + b ArrayFunction = x End Function

II.4.5 Khai báo, tạo và làm việc với biến đối tượng. Khai báo và tạo biến đối tượng phải dùng thêm từ khóa New

Dim <tên_đối_tượng> as New <Tên_Lớp> Phép gán đối tượng được thực hiện với từ khóa Set

Set <tên_đối_tượng> = <giá trị> - Chú ý rằng nếu thực hiện khai báo một biến đối tượng như thông thường (không có từ khóa New) thì biến thực sự chưa được tạo ra. Trong trường hợp ấy, sau đó phải có thao tác tạo đối tượng với các từ khóa Set và New.

Dim <tên_đối_tượng > as <tên_lớp> Set <tên_đối_tượng > = New <tên_lớp>

- Các phép toán, các toán tử có được áp dụng cho đối tượng hay không tùy thuộc vào lớp tạo ra nó. - Làm việc với một biến đối tượng tức là làm việc với các thuộc tính, phương thức và các sự kiện của nó. Để truy cập tới các thuộc tính và phương thức của đối tượng, sử dụng toán tử (.)

<Tên_đối_tượng>.<Tên_thuộc_tính> <Tên_đối_tượng >.<Tên_phương_thức>(Các tham số)

Sẽ cụ thể hơn trong các chương sau.

II.4.6 Các chú ý khi khai báo - Có thể khai báo nhiều biến cùng lúc: Dim passw As String, yourName As String, firstnum As Integer,... - Nếu kiểu dữ liệu không được định nghĩa, VB sẽ tự động khai báo là kiểu Variant. - Dữ liệu kiểu chuỗi (String) có hai cách khai báo, ngoài cách thông thường, có thể khai báo độ dài của giá trị.

Dim VariableName as String * n trong đó n là số lượng ký tự mà biến có thể lưu trữ.

Ví dụ: Dim yourName as String * 10 yourName sẽ không giữ lớn hơn 10 ký tự.

II.5 BIỂU THỨC

II.5.1 Các khái niệm - Toán tử hay phép toán (Operator): là từ hay ký hiệu nhằm thực hiện phép tính và xử lý dữ liệu. - Toán hạng: là giá trị dữ liệu (biến, hằng…). - Biểu thức: là tập hợp các toán hạng và các toán tử kết hợp lại với nhau theo quy tắc nhất định để tính toán ra một giá trị nào đó.

II.5.2 Các loại phép toán Các phép toán số học:

Page 22: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường 22

Thao tác trên các giá trị có kiểu dữ liệu số. Toán tử Mô tả

^ Lũy thừa * Nhân / Chia \ Chia lấy phần nguyên

Mod Chia lấy dư + Cộng - Trừ

Các phép toán quan hệ: Đây là các phép toán mà giá trị trả về của chúng là một giá trị kiểu Boolean (TRUE hay FALSE).

Phép toán Ý nghĩa = So sánh bằng nhau

<> So sánh khác nhau > So sánh lớn hơn < So sánh nhỏ hơn

>= So sánh lớn hơn hoặc bằng <= So sánh nhỏ hơn hoặc bằng

Các phép toán logic: Là các phép toán tác động trên kiểu Boolean và cho kết quả là kiểu Boolean. Các phép toán này bao gồm AND (và), OR (hoặc), NOT (phủ định). Sau đây là bảng giá trị của các phép toán:

Toán tử Mô tả Not Not TRUE = FALSE; Not FALSE = TRUE

And TRUE And TRUE = TRUE; FALSE And FALSE = FALSE Các trường hợp khác cho kết quả FALSE

Or FALSE Or FALSE = FALSE; Các trường hợp khác cho kết quả TRUE

Xor A Xor B: A hoặc B nhưng không phải cả hai. Eqv A Eqv B; So sánh tương đương. Giống nhau cho giá trị True

Page 23: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 1

Một số hàm toán học thông dụng Các hàm toán học có thể tra cứu trong Object Browser (thư viện Math) Abs (x): Hàm giá trị tuyệt đối Exp (x): Hàm mũ cơ số tự nhiên ex Log (x): Logarit cơ số tự nhiên Sqr (x): lấy bình phương Các hàm lượng giác: Cos (x), Sin (x), Tan (x) Hàm lượng giác ngược: Atn (x) Arctg. Fix (x): Hàm lấy phần nguyên chẵn. Ví dụ Fix (5.1) = 5; Fix (5.6) = 5 Int (x): Hàm lấy phần nguyên làm tròn. Round (x, num) làm tròn số thực x đến (num) chữ số thập phân.

Question for today! Khai báo biến cho bài toán: Nhập danh sách tập hợp các lỗ khoan. Mỗi lỗ khoan gồm các thông số (idLoKhoan, ToaDoX, ToaDoY, ChieuSau, SoLopDat, NguoiKhoan) Tổng số có 30 lỗ khoan, 3 người khoan. Yêu cầu tổng hợp xem mỗi người khoan bao nhiêu lỗ, là những lỗ nào.

II.6 CÁC CÂU LỆNH Một câu lệnh (statement) xác định một công việc mà chương trình phải thực hiện để xử lý dữ liệu đã được mô tả và khai báo. Các câu lệnh được ngăn cách với nhau bởi ký tự xuống dòng.

II.6.1 Lệnh gán Cú pháp:

<Tên biến> = <Biểu thức> Ví dụ: Giả sử ta có khai báo sau: Dim TodayTemp As Single, MinAge As Integer Dim Sales As Single, NewSales As Single, FullName As String

Các lệnh sau gán giá trị cho các biến trên: MinAge = 18 Sales = 200000 NewSales = Sales * 1.2

Giả sử người dùng cần nhập họ và tên vào ô nhập liệu TextBox có thuộc tính Name là txtName, câu lệnh dưới đây sẽ lưu giá trị của ô nhập liệu vào trong biến FullName:

FullName = txtName.Text Lưu ý: Kiểu dữ liệu của biểu thức (vế phải của lệnh gán) phải phù hợp với biến ta cần gán trị.

II.6.2 Lệnh rẽ nhánh If Từ khóa: If, Then, Else, End If

Dạng 1

Page 24: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 2

Sơ đồ khối

Cú pháp Một dòng lệnh:

If <điều kiện> Then <dòng lệnh> Nhiều dòng lệnh:

If <điều kiện> Then Các dòng lệnh

End If

Dạng 2 Sơ đồ khối

Cú pháp

If <điều kiện 1> Then [Khối lệnh 1]

ElseIf <điều kiện 2> Then [Khối lệnh 2]...

[Else [Khối lệnh n]]

True

False

Điều kiện IF

Khối lệnh THEN

END IF

True False Điều kiện IF

Khối lệnh ELSE

Khối lệnh THEN

END IF

Page 25: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 3

End If VB sẽ kiểm tra các điều kiện, nếu điều kiện nào đúng thì khối lệnh tương ứng sẽ được thi hành. Ngược lại nếu không có điều kiện nào đúng thì khối lệnh sau từ khóa Else sẽ được thi hành. Ví dụ:

If (TheColorYouLike = vbRed) Then MsgBox "You are a lucky person" ElseIf (TheColorYouLike = vbGreen) Then MsgBox "You are a hopeful person" ElseIf (TheColorYouLike = vbBlue) Then MsgBox "You are a brave person" ElseIf (TheColorYouLike = vbMagenta) Then MsgBox "You are a sad person" Else MsgBox "You are an average person" End If

II.6.2 Câu lệnh lựa chọn Select Case Trong trường hợp có quá nhiều các điều kiện cần phải kiểm tra, nếu ta dùng cấu trúc rẽ nhánh If…Then thì đoạn lệnh không được rõ ràng, khó kiểm tra, sửa đổi khi có sai sót. Ngược lại với cấu trúc Select…Case, biểu thức điều kiện sẽ được tính toán một lần vào đầu cấu trúc, sau đó VB sẽ so sánh kết quả với từng trường hợp (Case). Nếu bằng nó thi hành khối lệnh trong trường hợp (Case) đó. Các từ khóa: Select Case, Case, End Select Sơ đồ khối

Cú pháp Select Case <biểu thức kiểm tra>

Case <Danh sách kết quả biểu thức 1> [Khối lệnh 1]

Case <Danh sách kết quả biểu thức 2> [Khối lệnh 2]

… [Case Else

[Khối lệnh n]] End Select

Vế trái

Vế phải 1 Khối lệnh 1

Vế phải 1 Khối lệnh 1

Vế phải n Khối lệnh n

Page 26: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 4

Mỗi danh sách kết quả biểu thức sẽ chứa một hoặc nhiều giá trị. Trong trường hợp có nhiều giá trị thì mỗi giá trị cách nhau bởi dấu phẩy (,). Nếu có nhiều Case cùng thỏa điều kiện thì khối lệnh của Case đầu tiên sẽ được thực hiện. Ví dụ:

Select Case TheColorYouLike Case vbRed MsgBox "You are a lucky person" Case vbGreen MsgBox "You are a hopeful person" Case vbBlue MsgBox "You are a brave person" Case vbMagenta MsgBox "You are a sad person" Case Else MsgBox "You are an average person"

End Select

Toán tử Is & To

Toán tử Is: Được dùng để so sánh <Biểu thức kiểm tra> với một biểu thức nào đó. Toán tử To: Dùng để xác lập miền giá trị của <Biểu thức kiểm tra>. Ví dụ: Select Case Tuoi Case Is <18

MsgBox “Vi thanh nien” Case 18 To 30

MsgBox “Ban da truong thanh, lo lap than di” Case 31 To 60

MsgBox “Ban dang o lua tuoi trung nien” Case Else

MsgBox “Ban da lon tuoi, nghi huu duoc roi day!” End Select

Trong ví dụ trên không thể viết Case Tuoi < 18.

II.6.3 Câu lệnh lặp xác định Thực hiện một khối lệnh lặp theo một biến đếm với số lần lặp đã được xác định. Các từ khóa: For, to, Step, Next Cú pháp For <biến_đếm> = <điểm_đầu> to <điểm_cuối> [Step <bước_nhảy>] Khối_lệnh Next

Biến đếm, điểm đầu, điểm cuối, bước nhảy là những giá trị số (Integer, Single,…). Bước nhảy có thể là âm hoặc dương. Nếu bước nhảy là số âm thì điểm đầu phải lớn hơn điểm cuối, nếu không khối lệnh sẽ không được thi hành. Khi Step không được chỉ ra, VB sẽ dùng bước nhảy mặc định là 1. Ví dụ: Tính N! - Xây dựng giao diện

- Viết mã cho sự kiện Command1_Click

Page 27: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 5

Private Sub Command1_Click() Dim i As Integer, n As Integer, Kq As Long n = Val(txtNum.Text) Kq = 1 For i = 1 To n Kq = Kq * i Next KQ.Caption = Str(Kq) End Sub

II.6.4 Câu lệnh lặp xác định trong một tập hợp Thực hiện một khối lệnh lặp theo một biến chạy trong một tập hợp xác định. Các từ khóa: For Each, In, Next Cú pháp For Each <Phần_tử> In <tập_hợp> Khối_lệnh Next

Lưu ý: - Phần tử trong tập hợp chỉ có thể là biến Variant, biến Object, hoặc một đối tượng

trong Object Browser. - Không dùng For Each ... Next với mảng chứa kiểu tự định nghĩa vì Variant

không chứa kiểu tự định nghĩa. Ví dụ: Dim DanhSach(1) As String Dim HoTen As Variant DanhSach(0) = "Tran Van A": DanhSach(1) = "Nguyen Thi B" For Each HoTen In DanhSach MsgBox HoTen Next

II.6.5 Câu lệnh lặp không xác định Thực hiện một khối lệnh với số lần lặp không định trước, theo một biểu thức điều kiện. (biểu thức điều kiện có giá trị Boolean: True hoặc False).

Kiểu 1: Lặp trong điều kiện là True Do While <điều_kiện> Khối_lệnh Loop

Nếu muốn vòng lặp luôn có ít nhất một lần: Do Khối_lệnh Loop While <điều kiện>

Kiểu 2: Lặp trong điều kiện là False Do Until <điều_kiện> Khối_lệnh Loop

Nếu muốn vòng lặp luôn có ít nhất một lần thi hành khối lệnh sử dụng cú pháp Do Khối lệnh Loop Until <điều_kiện>

Page 28: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 6

Ví dụ minh họa:

Dim Check, Counter Check = False: Counter = 0 ' Khởi tạo Do While Counter < 5 ' Counter chạy từ 0 đến 4 => True . Counter = Counter + 1 ' Tăng biến đếm. MsgBox Counter ‘ Thông báo giá trị biến đếm Loop ‘ Có thể chuyến While Counter < 5 xuống đây, lúc đó Counter sẽ chạy đến 5 Do Until Check ' Check có giá trị False Counter = Counter + 1 ' Tăng biến đếm. If Counter = 5 Then Check= True Loop

Để thoát khỏi vòng lặp, sử dụng câu lệnh Exit Do

II.7 CHƯƠNG TRÌNH CON (HÀM VÀ THỦ TỤC)

II.7.1 Khái niệm Trong những chương trình lớn, có thể có những đoạn chương trình viết lặp đi lặp lại nhiều lần, để tránh rườm rà và mất thời gian khi viết chương trình người ta thường phân chia chương trình thành nhiều module, mỗi module giải quyết một công việc nào đó. Các module như vậy gọi là các chương trình con. Một tiện lợi khác của việc sử dụng chương trình con là ta có thể dễ dàng kiểm tra xác định tính đúng đắn của nó trước khi ráp nối vào chương trình chính và do đó việc xác định sai sót để tiến hành hiệu đính trong chương trình chính sẽ thuận lợi hơn. Trong Visual Basic, chương trình con có hai dạng là hàm (Function) và thủ tục (Sub). Hàm khác thủ tục ở chỗ hàm trả về cho lệnh gọi một giá trị thông qua tên của nó còn thủ tục thì không. Do vậy ta chỉ dùng hàm khi và chỉ khi thoả mãn đồng thời các yêu cầu sau đây: - Ta muốn nhận lại một kết quả (chỉ một mà thôi) khi gọi chương trình con. - Ta cần dùng tên chương trình con (có chứa kết quả) để viết trong các biểu thức. Nếu không thỏa mãn hai điều kiện ấy thì dùng thủ tục.

II.7.2 Hàm - Function Hàm (Function) là một chương trình con có nhiệm vụ tính toán và cho ta một kết quả. Kết quả này được trả về trong tên hàm. Cách khai báo: [Private | Public | Static] Function <Tên hàm> ([<tham số>[As <KiểuDL>]]) [As <KiểuDL>]

<Các dòng lệnh> hay <Các khai báo> End Function Trong đó: - <Tên hàm>: Tên hàm được đặt giống quy tắc tên biến, hằng,… - <tham số>[As <KiểuDL>]: có thể có hay không. Nếu có nhiều tham số thì mỗi tham số phân cách nhau dấu phẩy. Nếu không xác định kiểu tham số thì tham số có kiểu Variant. - <KiểuDL>: Kết quả trả về của hàm, trong trường hợp không khai báo As <kiểu dữ liệu>, mặc định, VB hiểu kiểu trả về kiểu Variant. Cú pháp gọi hàm: <Tên hàm>[(tham số)]. Ví dụ: Tính giai thừa N.

Page 29: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 7

II.7.3 Thủ tục - Sub

Thủ tục là một chương trình con thực hiện một hay một số tác vụ nào đó. Thủ tục có thể có hay không có tham số. Cách khai báo:

[Private | Public] [Static] Sub <tên thủ tục> ([<tham số>[As <Kiểu dữ liệu>]]) <Các dòng lệnh> hay <Các khai báo>

End Sub Trong đó: - <Tên thủ tục>: Tên được đặt giống quy tắc tên biến, hằng,… - ([<tham số>[As <Kiểu dữ liệu>] : có thể có hay không. Nếu có nhiều tham số thì mỗi tham số phân cách nhau dấu phẩy. Nếu không xác định kiểu tham số thì tham số có kiểu Variant. Để gọi thủ tục để thực thi, có 2 cách: <Tên thủ tục> [<Các tham số >] Hoặc Call <Tên thủ tục> ([<Các tham số >])

Ví dụ: Thủ tục kiểm tra xem số nguyên N có phải là số nguyên tố hay không? Sub KTraNgTo(N As Integer) Dim i As Integer i = 2 Do While (i <= Sqr(N)) And (N Mod i <> 0) i = i + 1 Loop If (i > Sqr(N)) And (N <> 1) Then MsgBox Str(N) & " la so nguyen to" Else MsgBox Str(N) & " khong la so nguyen to" End If End Sub

Có hai cách gọi thủ tục: KTraNgTo Val(txtNum.Text)

Hoặc Call KtraNgTo(Val(txtNum.Text))

II.7.4 Truyền tham số cho chương trình con Có hai cách truyền tham số cho chương trình con: - ByVal – Truyền tham số theo tham trị (giá trị) Một bản sao của biến được truyền vào chương trình con. Chương trình con không làm việc với biến mà chỉ làm việc với bản sao giá trị của biến. Do đó, nếu trong chương trình con có sự thay đổi giá trị của biến thì chỉ có bản sao bị ảnh hưởng mà không liên quan đến giá trị của biến. Trong VB, truyền tham số theo tham trị phải được chỉ rõ bằng từ khóa ByVal. Ví dụ: Sub Twice (ByVal Num As Integer) Num = Num * 2 Print Num End Sub Private Sub Form_Click() Dim A As Integer A = 4 Print A Twice A

Page 30: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 8

Print A End Sub

Kết quả thực hiện của đoạn chương trình trên: 4 8 4 - ByRef – Truyền tham số theo tham biến (địa chỉ) Địa chỉ của biến sẽ được truyền cho chương trình con. Do đó bất kì thay đổi nào của thủ tục trên biến sẽ tác động trực tiếp lên giá trị của biến. Trong VB, truyền tham số theo tham biến là mặc định. Dùng từ khóa ByRef Ví dụ: Sub Twice (Num As Integer) Num = Num * 2 Print Num End Sub Private Sub Form_Click() Dim A As Integer A = 4 Print A Twice A Print A End Sub

Kết quả thực hiện của đoạn chương trình trên: 4 8 8

Các ví dụ tạo chương trình con đơn giản - Cách tạo chương trình con trong VB: Tools > Add Procedure

Public Function GiaiThua(ByVal A As Integer) As Integer GiaiThua=1 Dim i As Integer i = 1 Do While i < A i = i+1 GiaiThua=GiaiThua * i Loop End Function Private Sub Form_Load() MsgBox GiaiThua (4) End Sub

Public Sub TrungBinhCong(ByVal A As Double, ByVal B As Double, ByRef C As Double) C = (A + B) / 2 End Sub Private Sub Form_Load() Dim X As Double TrungBinhCong 3, 5, X ‘Có thể dùng Call TrungBinhCong(3, 5,X) MsgBox X End Sub

- Truyền tham số dạng mảng (Byref)

Function TrungBinhCong(X() As Integer) As Double Dim vItem As Variant Dim iTong As Integer iTong = 0 For Each vItem In X Tong = Tong + vItem

Page 31: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 9

Next TrungBinhCong = Tong / UBound(X) End Function Private Sub Form_Load() Dim List(1 To 5) As Integer List(1) = 1 List(2) = 2 List(3) = 3 List(4) = 4 List(5) = 5 MsgBox TrungBinhCong(List) End Sub

- Tham số có tùy chọn có hoặc không (Optional)

Function DienTichCN(X As Double, Optional Y As Variant) As Double ‘Có thể gán Y 1 giá trị mặc định If IsMissing(Y) Then ‘ Trường hợp không có Y DienTichCN = X * X Else DienTichCN = X * Y End If End Function Private Sub Form_Load() MsgBox DienTichCN(3) ‘Diện tích hình vuông MsgBox DienTichCN(3, 4) ‘Diện tích hình chữ nhật End Sub

II.8 TRUY XUẤT DỮ LIỆU TRONG VISUAL BASIC

II.8.1 Các khái niệm a. Module: Một ứng dụng đơn giản có thể chỉ có một Form, lúc đó tất cả mã lệnh của ứng dụng đó được đặt trong cửa sổ mã lệnh của Form đó (gọi là Form Module). Khi ứng dụng được phát triển lớn lên, chúng ta có thể có thêm một số Form nữa và lúc này khả năng lặp đi lặp lại nhiều lần của một đoạn mã lệnh trong nhiều Form khác nhau là rất lớn. Để tránh việc lặp đi lặp lại trên, ta tạo ra một Module riêng rẽ chứa các chương trình con được dùng chung. Visual Basic cho phép 3 loại Module: Module Form: đi kèm với mỗi một Form là một module của Form đó để chứa mã lệnh của Form này. Với mỗi điều khiển trên Form, module Form chứa các chương trình con và chúng sẵn sàng được thực thi để đáp ứng lại các sự kiện mà người sử dụng ứng dụng tác động trên điều khiển. Module Form được lưu trong máy tính dưới dạng các tập tin có đuôi là *.frm. Module chuẩn (Standard module): Mã lệnh không thuộc về bất cứ một Form hay một điều khiển nào sẽ được đặt trong một module đặc biệt gọi là module chuẩn (được lưu với đuôi *.bas). Các chương trình con được lặp đi lặp lại để đáp ứng các sự kiện khác nhau của các điều khiển khác nhau thường được đặt trong module chuẩn. Module lớp (Class module): được sử dụng để tạo các đối tượng. Các đối tượng sẽ có các thuộc tính và phương thức của lớp mà nó tạo ra. (Class module được lưu với đuôi *.cls). b. Phạm vi của biến(scope): xác định biến có thể sử dụng trong phạm vi nào. Một biến sẽ thuộc một trong 3 loại phạm vi:

Page 32: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 10

Phạm vi biến cục bộ. Phạm vi biến module. Phạm vi biến toàn cục.

II.8.2 Biến toàn cục Khái niệm: Biến toàn cục là biến có phạm vi hoạt động trong toàn bộ ứng dụng. Khai báo: Global <Tên biến> [As <Kiểu dữ liệu>]

II.8.3 Biến cục bộ Khái niệm: Biến cục bộ là biến chỉ có hiệu lực trong những khối chương trình mà chúng được định nghĩa. Khai báo: Dim <Tên biến> [As <Kiểu dữ liệu>] Lưu ý: Biến cục bộ được định nghĩa bằng từ khóa Dim sẽ kết thúc ngay khi việc thi hành thủ tục kết thúc.

II.8.4 Biến module Khái niệm: Biến Module là biến được định nghĩa trong phần khai báo (General|Declaration) của Module và mặc nhiên phạm vi hoạt động của nó là toàn bộ Module ấy. Khai báo: Biến Module được khai báo bằng từ khóa Dim hay Private & đặt trong phần khai báo của Module. Ví dụ: Private Num As Integer Tuy nhiên, các biến Module này có thể được sử dụng bởi các khối chương trình khác trong các Module khác. Muốn thế chúng phải được khai báo là Public trong phân Khai báo (General|Declaration) của Module. Ví dụ: Public Num As Integer

Lưu ý: Không thể khai báo biến với từ khóa là Public trong chương trình con.

II.9 GỠ LỖI TRONG VISUAL BASIC (Debug) Các thao tác bẫy các lỗi thực thi của chương trình là cần thiết đối với các ngôn ngữ lập trình. Người lập trình khó kiểm soát hết các tình huống có thể gây ra lỗi. Chẳng hạn người ta khó có thể kiểm tra chặt chẽ việc người dùng đang chép dữ liệu từ đĩa mềm (hay CD) khi chúng không có trong ổ đĩa. Nếu có các thao tác bẫy lỗi ở đây thì tiện cho người lập trình rất nhiều. Để tiện việc debug, ta dùng Debug Toolbar: View | Toolbars | Debug VB6 IDE sẽ hiển thị Debug Toolbar như sau:

Page 33: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 11

2.9.1 Xử lý lỗi lúc RunTime Khi EXE của một chương trình viết bằng VB6 đang chạy, nếu gặp Error, nó sẽ hiển thị một Error Dialog cho biết lý do vắn tắt. Nếu bạn chạy chương trình trong VB6 IDE, ta có thể đến vị trí lỗi và sửa nó. Visual Basic cũng cung cấp cho ta một số cấu trúc để bẫy các lỗi đang thực thi. Dạng 1: On Error GoTo <Tên nhãn>

<Các câu lệnh có thể gây ra lỗi>

<Tên nhãn>: <Các câu lệnh xử lý lỗi>

Ý nghĩa: <Tên nhãn>: là một tên được đặt theo quy tắc của một tên biến. Nếu một lệnh trong <Các câu lệnh có thể gây ra lỗi> thì khi chương trình thực thi đến câu lệnh đó, chương trình sẽ tự động nhảy đến đoạn chương trình định nghĩa bên dưới <Tên nhãn> để thực thi.

Dạng 2: On Error Resume Next <Các câu lệnh có thể gây ra lỗi>

Ý nghĩa: Nếu một lệnh trong <Các câu lệnh có thể gây ra lỗi> thì khi chương trình thực thi đến câu lệnh đó, chương trình sẽ tự động bỏ qua câu lệnh bị lỗi và thực thi câu lệnh kế tiếp.

2.9.2 Dùng khai báo Option Explicit Chúng ta thường nhìn thấy dòng chữ Option Explicit ở dòng trên cùng của các đoạn mã VB. Vậy tại sao lại có nó và nó có tác dụng gì? Khai báo Option Explicit yêu cầu bạn phải khai báo các biến trước khi sử dụng. Việc này giúp ta có thế bảo đảm chúng ta sẽ không bị sai tên một biến nào cả. Ví dụ:

Private Sub Command1_Click() Dim sMississippi As String sMississipi = "Hello" '<-- Note the missing "p" MsgBox sMississippi End Sub

So sánh 2 trường hợp có hoặc không có Option Explicit. Thêm nữa việc sử dụng Option Explicit là rất quan trọng vì nếu không khai báo biến trước, VB sẽ mặc định kiểu của biến đó là Variant. Như vậy khi chạy chương trình sẽ chiếm nhiều bộ nhớ hơn, chậm hơn.

2.9.3 Dùng Breakpoints Breakpoint làm chương trình ngừng lại ở vị trí mà ta muốn trong code, tiếp đó ta có thể cho chương trình chạy từng bước và ta có thể kiểm tra các biến xem chúng làm việc có đúng không. Để sử dụng Breakpoint chọn đoạn cần kiểm tra rồi click bên trái của hàng code.

Page 34: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 12

Một cách khác để đặt một breakpoint là đưa con trỏ soạn thảo đến dòng cần đặt rồi chọn F9 để tắt mở Breakpoint. Lúc chương trình đang dừng, ta có thể xem trị số của một biến bằng cách để con trỏ trên biến đó, giá trị của biến sẽ hiện ra như hình dưới:

Muốn hủy bỏ tất cả breakpoints: Debug | Clear All Breakpoints.

2.9.4 Dùng Immediate Window Immediate Window cho phép ta thực thi những câu lệnh VB trong khi chương trình đang dừng. Ví dụ: Dùng Print để hiển thị trị số của một biến hay kết quả của một Function, gọi một Sub hay thay đổi trị số một biến trước khi tiếp tục cho chương trình chạy lại. Thay vì dùng "Print ICounter" ta có thể dùng "? ICounter".

2.9.5 Dùng Watch Window Watch Window giúp chúng ta kiểm soát biến hay một biểu thức nào đó trong quá trình thực thi. Cửa sổ Watch: View | Watch Window. Để thêm một Watch: Debug | Add Watch Có 3 kiểu giám sát: Watch Expression – Code sẽ không dừng lại nhưng khi ta chạy chương trình từng bước, giá trị của biểu thức sẽ hiển thị trong cửa sổ Watch. Break When Value Is True - Visual Basic sẽ dừng việc thực thi khi biểu thức có giá trị True (Giá trị khác 0) Break When Value Changes - Visual Basic sẽ dừng lại khi giá trị của biểu thức thay đổi.

2.9.2 Dùng Comment (chú thích) Lúc viết mã chương trình cần thêm Comment đầy đủ để bất cứ khi nào đọc lại đoạn mã đó ta có thể hiểu ngay mục đích của nó. Ta chỉ nên viết chú thích ở những điểm nào khác thường, khó hiểu nhằm giải thích tại sao lại làm như thế. Bên cạnh đó nếu là một lập trình viên chuyên nghiệp, gần như chắc chắn code bạn viết sẽ được người khác đọc và bảo trì. Do đó code phải đơn giản, dễ hiểu và có những chú thích cụ thể. Trong VB, để viết một dòng chú thích ta sử dụng ký tự “’” ở đầu dòng.

Page 35: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 13

II.10 TỔ CHỨC CHƯƠNG TRÌNH Với những chương trình phức tạp, việc xây dựng chương trình theo cấu trúc để có thể quản lý và bảo trì dễ dàng là hết sức cần thiết. Điều đó được thực hiện bằng cách chia thành các khối chức năng, trong các khối này sẽ có các chương trình con, các biến, hằng liên quan đến chức năng ấy. Trong VB, các khối chức năng đó được tổ chức thành các Module. Ví dụ để xây dựng một chương trình tính toán và kiểm toán một dầm giản đơn, có thể thực hiện theo một cấu trúc thông thường như sau:

- Nhập, lưu trữ và xử lý dữ liệu về hình học - Nhập, lưu trữ và xử lý dữ liệu về vật liệu - Nhập, lưu trữ và xử lý dữ liệu về cáp DƯL - Tính toán tải trọng và tổ hợp tải trọng. - Phân tích kết cấu: tính toán nội lực và biến dạng. - Kiểm toán. - Xuất kết quả.

Tổ chức các khối chức năng thể hiện bằng sơ đồ như sau:

Nhập dữ liệu

Module Hình_học Module Vật_liệu Module Cáp_DƯL

Module Nội_lực Module Kiểm_toán

Kết thúc

Module hiển thị kết quả

Page 36: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 14

CHƯƠNG III FORM VÀ MỘT SỐ ĐIỀU KHIỂN THÔNG DỤNG

Mục tiêu: Chương này giới thiệu về một số điều khiển cơ bản để tạo nên giao diện

cho các ứng dụng cũng như một số khái niệm trong lập trình với VB; Các điều khiển dùng trong việc tạo giao diện cho ứng dụng chạy trên

Windows. Việc nắm bắt được các vấn đề này làm cho công việc tạo giao diện cho ứng dụng được nhanh chóng.

Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau:

- Khái niệm về điều khiển, thuộc tính, phương thức, sự kiện, lập trình sự kiện…

- Quy tắc đặt tên điều khiển trong VB. - Sử dụng Form trong thiết kế giao diện. - Sử dụng các điều khiển thông dụng.

Kiến thức có liên quan: - Cách thức sử dụng môi trường phát triển VB. - Các cấu trúc lập trình trong VB. - Cách thức xử lý sự kiện.

III.1 Các khái niệm liên quan Điều khiển (Controls):

Các thành phần có sẵn để người lập trình tạo giao diện tương tác với người dùng. Mỗi điều khiển thực chất là một đối tượng, do vậy nó sẽ có một số điểm đặc trưng cho đối tượng, chẳng hạn như các thuộc tính, các phương thức & các sự kiện.

Thuộc tính:

Các đặc trưng của một điều khiển tạo nên dáng vẻ của điều khiển đó.

Phương thức:

Các điều khiển có thể thực thi một số tác vụ nào đó, các tác vụ này được định nghĩa sẵn bên trong các phương thức (còn gọi là chương trình con: hàm & thủ tục), người lập trình có thể gọi thực thi các phương thức này nếu cần.

Sự kiện:

Là hành động của người dùng tác động lên ứng dụng đang thực thi. Ví dụ: - Nhấn phím bất kỳ trên bàn phím.

- Nhấp chuột. Các thành phần giao diện có khả năng đáp ứng lại sự kiện. Chẳng hạn khi chúng ta nhấp chuột vào button, lúc đó button nhận biết được sự kiện này; hay như textbox nhận biết được sự kiện bàn phím tác động lên nó. Một ứng dụng trên Windows thường được thực hiện nhờ vào việc đáp ứng lại các sự kiện của người dùng.

Page 37: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 15

Lập trình sự kiện:

Các thành phần giao diện có khả năng nhận biết được các sự kiện từ phía người dùng. Tuy nhiên khả năng đáp ứng lại các sự kiện được thực hiện bởi người lập trình.

Khi một thành phần giao diện được sử dụng, người lập trình phải xác định chính xác hành động của thành phần giao diện đó để đáp ứng lại một sự kiện cụ thể. Lúc đó người lập trình phải viết đoạn mã lệnh mà đoạn mã lệnh này sẽ được thực thi khi sự kiện xảy ra.

Chẳng hạn, trong ứng dụng Paint của Windows; khi người sử dụng nhấp chuột vào nút vẽ hình elip sau đó dùng chuột vẽ nó trên cửa sổ vẽ, một hình elip được vẽ ra.

Trong lập trình sự kiện, một ứng dụng được xây dựng là một chuỗi các đáp ứng lại sự kiện. Tất cả các hành động của ứng dụng là đáp ứng lại các sự kiện. Do vậy người lập trình cần phải xác định các hành động cần thiết của ứng dụng; phân loại chúng; sau đó viết các đoạn mã lệnh tương ứng.

Ví dụ về đáp ứng lại sự kiện:

Mã lệnh - Mã lệnh cho sự kiện Click của Ghi đĩa. -------------------------------------------------- -------------------------------------------------- - Mã lệnh cho sự kiện Click của In giấy -------------------------------------------------- --------------------------------------------------

- Khi người dùng không tác động vào ứng dụng, ứng dụng không làm gì cả.

- Khi người dùng nhập dữ liệu vào các ô nhập Họ và tên, Địa chỉ; sự kiện bàn phím xảy ra trên các ô nhập. Tuy nhiên, ứng dụng vẫn không làm gì cả vì không có đoạn mã lệnh nào đáp ứng các sự kiện này.

- Khi người dùng nhấp nút chọn Ghi đĩa, ứng dụng tìm kiếm trong mã lệnh của mình thấy có đoạn mã lệnh đáp ứng lại sự kiện này; lúc đó đoạn mã lệnh được thực thi.

- Tương tự như vậy đối với nút chọn In giấy.

Cách xác lập các thuộc tính & các phương thức trong chương trình

<Thuộc tính Name của điều khiển>.<Tên thuộc tính>

<Thuộc tính Name của điều khiển>.<Tên phương thức>[(<Các tham số>)]

Tên điều khiển (thuộc tính Name)

Đây là thuộc tính xác định tên của điều khiển trong ứng dụng. Tên này được đặt theo quy tắc:

o Tên có thể dài từ 1 - 40 ký tự. o Tên phải bắt đầu với ký tự chữ, có thể chữ hoa hay thường. o Sau ký tự đầu tiên, tên có thể chứa ký tự, số hay dấu gạch dưới.

Page 38: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 16

III.2 Form

III.2.1 Khái niệm Chương trình ứng dụng giao tiếp với người dùng thông qua các Form; các điều khiển (Controls) được đặt lên bên trên giúp cho Form thực hiện được công việc giao tiếp với người dùng. Form là các cửa số được lập trình nhằm hiển thị dữ liệu và nhận thông tin từ phía người dùng.

III.2.2 Thuộc tính o Name: thuộc tính này như là một định danh nhằm xác định tên của Form là gì? Sử dụng thuộc tính này để truy xuất đến các thuộc tính khác cùng với phương thức có thể thao tác được trên Form. o Caption: chuỗi hiển thị trên thanh tiêu đề của Form. o Icon: Biểu tượng được dùng trong thanh tiêu đề của Form. o WindowState: xác định Form sẽ có kích thước bình thường (Normal=0), hay Minimized (=1), Maximized =(2). o Font: xác lập Font cho Form. Thuộc tính này sẽ được các điều khiển nằm trên nó thừa kế. Tức là khi ta đặt một điều khiển lên Form, thuộc tính Font của điều khiển ấy sẽ tự động trở nên giống y của Form.

III.2.3 Sự kiện O Form_Initialize: Sự kiện này xảy ra trước nhất và chỉ một lần khi Form được tạo ra. O Form_Load: Sự kiện này xảy ra mỗi lần Form được gọi hiển thị. Thường dùng sự kiện Form_Load để khởi tạo các biến, điều khiển. o Form_Activate: Mỗi lần một Form được kích hoạt (active) thì một sự kiện Activate phát sinh. Ta thường dùng sự kiện này để cập nhật lại giá trị các điều khiển trên Form. o Form_QueryUnload: Khi người sử dụng chương trình nhấp chuột vào nút X phía trên bên phải để đóng Form thì một sự kiện QueryUnload được sinh ra. Đoạn chương trình con dưới đây mô tả thủ tục xử lý sự kiện QueryUnload. Ví dụ: Ta có thể hủy hành động đóng Form bằng cách đặt Cancel = 1. o Form_Resize: Sự kiện này xảy ra mỗi khi Form thay đổi kích thước.

III.3 Nhãn (Label)

III.3.1 Khái niệm Nhãn là điều khiển dạng đồ họa cho phép người sử dụng hiển thị chuỗi ký tự trên Form.

III.3.2 Thuộc tính o Caption: Thuộc tính quy định chuỗi ký tự hiển thị khi ta tạo một điều khiển nhãn. o Font, Fore Color: Quy định kiểu chữ, kích thước, màu hiển thị. o BackStyle, BackColor: BackStyle quy định là nhãn trong suốt hay không. BackColor quy định màu nền của nhãn trong trường hợp không trong suốt.

III.3.3 Sự kiện o Change: Xảy ra mỗi khi nhãn thay đổi giá trị. o Click: Mỗi khi nhãn được chuột nhấp lên, sự kiện này xảy ra. o DblClick: Xảy ra khi người sử dụng nhấp đúp chuột lên điều khiển nhãn.

Page 39: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 17

III.4 Khung (Frame) Khung là một điều khiển giúp việc bố trí giao diện của Form rõ ràng hơn. Thông thường các điều khiển cùng phục vụ cho một công việc nào đó sẽ được đặt trong một khung nhằm làm nổi bật vai trò của chúng.

Khung cũng có các thuộc tính và sự kiện thông dụng như của điều khiển nhãn như: Name, Caption, Click, DblClick...

III.3 Nút lệnh (CommandButton)

III.3.1 Khái niệm Nút lệnh là một điều khiển dùng để bắt đầu, ngắt hoặc kết thúc một quá trình. Khi nút lệnh được chọn thì nó trông như được nhấn xuống, do đó nút lệnh còn được gọi là nút nhấn (Push Button). Người sử dụng luôn có thể chọn một nút lệnh nào đó bằng cách nhấn chuột trên nút lệnh đó.

III.3.2 Thuộc tính o Name: sử dụng như một định danh nhằm xác định tên của nút lệnh. o Caption: Nhãn gán trên nút lệnh. o Default: Nếu giá trị của thuộc tính này là True thì ta có thể chọn nút lệnh bằng cách nhấn phím Enter. o Cancel: Nếu giá trị của thuộc tính này là True thì ta có thể chọn nút lệnh nào đó bằng cách nhấn phím ESC. o Enabled: Trong một Form, có thể có nhiều nút lệnh để thực hiện nhiều công việc khác nhau và tại một thời điểm nào đó ta chỉ được phép thực hiện một số công việc. Nếu giá trị thuộc tính Enabled là False thì nút lệnh đó không có tác dụng. Giá trị mặc định của thuộc tính này là True. Ta có thể thay đổi giá trị của thuộc tính tại thời điểm chạy ứng dụng. o ToolTipText: cho phép hiển thị một đoạn văn bản chú thích công dụng của nút lệnh khi người sử dụng dùng chuột dừng chuột trên nút nhấn. o Font, Fore Color: Quy định kiểu chữ, kích thước, màu hiển thị.

III.3.3 Sự kiện

o Click: đây là sự kiện thường xảy ra với nút lệnh. Mỗi khi một nút lệnh được chọn, sự kiện này được kích hoạt. Do đó, người sử dụng sẽ viết mã các lệnh để đáp ứng lại sự kiện này.

III.4 Ô nhập dữ liệu (TextBox)

III.3.1 Khái niệm

Ô nhập liệu là một điều khiển cho phép nhận thông tin do người dùng nhập vào. Đối với ô nhập liệu ta cũng có thể dùng để hiển thị thông tin, thông tin này được đưa vào tại thời điểm thiết kế hay thậm chí ở thời điểm thực thi ứng dụng.

Page 40: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 18

III.3.2 Thuộc tính o MaxLength: Thuộc tính quy định số ký tự tối đa có thể nhập vào ô nhập liệu. Nếu số ký tự nhập vào vượt quá số ký tự tối đa thì chỉ có đúng số ký tự tối đa được ghi nhận vào trong thuộc tính Text. o Text: Dùng để nhập vào thông tin cần hiển thị trong Textbox tại thời điểm thiết kế hoặc nhận giá trị do người dùng nhập vào tại thời điểm chạy ứng dụng.

Ví dụ: MsgBox Text1.Text Đoạn mã này viết trong sự kiện Click của nút lệnh OK. Cho phép hộp thông báo hiển thị nội dung do người dùng nhập vào ô nhập liệu. o Locked: Thuộc tính cho phép người dùng thay đổi nội dung của ô nhập liệu được hay không? Nhận 2 giá trị True hoặc False. Nếu False thì người dùng có thể thay đổi nội dung của ô nhập liệu. Mặc định là False. o PasswordChar: Thuộc tính này quy định cách hiển thị thông tin do người dùng nhập vào. Chẳng hạn, nếu ta nhập vào giá trị thuộc tính này là * thì các ký tự nhập vào điều hiển thị bởi dấu * . Thuộc tính này thường được dùng trong trường hợp thông tin nhập vào cần được che giấu. Ví dụ mật khẩu đăng nhập. o Multiline: Thuộc tính quy định ô nhập liệu có được hiển thị thông tin dưới dạng nhiều hàng hay không, nếu là True thì ô nhập liệu cho phép nhiều hàng. o Font, Fore Color: Quy định kiểu chữ, kích thước, màu hiển thị. o SelLength: Trả về hoặc gán số lượng ký tự được chọn. o SelStart: Trả về hoặc xác định điểm bắt đầu của chuỗi được chọn. Đây là vị trí bắt đầu chèn một chuỗi mới trong trường hợp không có đánh dấu chọn chuỗi. o SelText: Trả về chuỗi được chọn hoặc thay thế chuỗi được chọn bằng chuỗi. Chuỗi trả về sẽ là rỗng nếu như không đánh dấu chọn chuỗi nào. Ba thuộc tính SelLength, SelStart, SelText chỉ có tác dụng tại thời điểm chạy ứng dụng.

III.3.3 Sự kiện o KeyPress: xảy ra khi người sử dụng chương trình nhấn một phím. Đối với điều khiển TextBox, ta thường dùng nó để lọc (filter out) các phím không chấp nhận. Sự kiện KeyPress cho ta một mã Ascii của phím vừa nhấn, dạng số có giá trị từ 0 đến 255. Trong ví dụ dưới đây, TextBox Text1 sẽ chỉ nhận biết các phím là số (0 - 9), không nhận biết các phím khác: Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii < 48 Or KeyAscii > 57 Then ‘ Mã Ascii của 0 là 48, của 9 là 57 KeyAscii = 0 End If End Sub

o KeyDown, KeyUp: mỗi sự kiện KeyPress lại cho ta một cặp sự kiện KeyDown/KeyUp. Sự kiện KeyDown/KeyUp có 2 tham số là KeyCode và Shift. Sự kiện này cho phép ta nhận biết được các phím đặc biệt trên bàn phím. Trong ví dụ dưới đây, ta hiển thị tên các phím chức năng mà người sử dụng chương trình nhấn vào: Private Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer) If (KeyCode >= 112) And (KeyCode <= 123) Then MsgBox "Ban vua nhan phim chuc nang: F" & Trim(Str(KeyCode -

111)) EndIf End Sub

Page 41: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 19

III.5 ListBox

III.3.1 Khái niệm Điều khiển danh sách các lựa chọn hiển thị một danh sách các đề mục mà ở đó người dùng có thể chọn lựa một hoặc nhiều đề mục. Mặc định các lựa chọn hiển thị theo chiều dọc trên một cột. Có thể thiết lập hiển thị theo nhiều cột.

III.3.2 Thuộc tính o MultiSelect: Thuộc tính này xác định ListBox có thể chọn nhiều đề mục không? o Sorted: ListBox có sắp xếp hay không? o ListIndex: Vị trí của phần tử được lựa chọn trong ListBox. o Selected(<Index>): cho biết phần tử thứ <Index> trong List Box có được chọn hay không?

III.3.3 Phương thức o AddItem: Thêm một phần tử vào ListBox. Cú pháp: <Name>.AddIem(Item As String, [Index])

Tham số Diễn giải Name Tên của ListBox. Item Chuỗi (đề mục) cần thêm vào. Index Xác định vị trí đề mục mới được chèn vào, giá trị 0 xác định cho vị trí

đầu tiên. Khi không chỉ định rõ Index thì phần tử thêm vào là mục cuối cùng trong ListBox mới.

Thêm mới đề mục tại thời điểm thiết kế: Sử dụng thuộc tính List của điều khiển ListBox, dùng tổ hợp phím CTRL+ENTER. o RemoveItem: Xóa một phần tử ra khỏi List Box.

Cú pháp: <Name>.RemoveItem Index o Clear: Xóa tất cả các mục trong List Box. Cú pháp <Name>.Clear o Text: Nhận giá trị từ ListBox khi một đề mục được chọn. o List: truy xuất nội dung phần tử bất kỳ trong List Box. Thuộc tính này cho phép truy xuất tất cả các đề mục của điều khiển ListBox. Thuộc tính này chứa một mảng và mỗi đề mục là một phần tử của mảng.

III.6 ComboBox Điều khiển ComboBox có thể được xem là tích hợp giữa hai điều khiển TextBox và ListBox. Người dùng có thể chọn một đề mục bằng cách nhập chuỗi văn bản vào ComboBox hoặc chọn một đề mục trong danh sách. Điểm khác nhau cơ bản giữa ComboBox và ListBox là điều khiển Combo chỉ gợi ý các lựa chọn trong khi đó điều khiển List thì giới hạn các đề mục nhập vào tức là người dùng chỉ có thể chọn những đề mục có trong danh sách. Các dạng của điều khiển Combo Box: Có tất cả 3 dạng của điều khiển Combo Box. Ta có thể chọn dạng của Combo tại thời điểm thiết kế bằng cách dùng giá trị hoặc hằng chuỗi của VB.

Kiểu Giá trị Hằng Drop-down Combo Box 0 VbComboDropDown

Page 42: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 20

Simple Combo Box 1 VbComboSimple Drop-down List Box 2 vbComboDropDownList

- Drop-down Combo Box: Đây là dạng mặc nhiên của Combo. Người dùng có thể nhập vào trực tiếp hoặc chọn từ danh sách các đề mục. - Simple Combo Box: Ta có thể hiển thị nhiều đề mục cùng một lúc. Để hiển thị tất cả đề mục, bạn cần thiết kế Combo đủ lớn. Ở dạng này, người dùng vẫn có thể nhập một chuỗi vào trực tiếp hoặc chọn từ danh sách các đề mục. - Drop down List Box: Dạng này rất giống như một Listbox nhưng chỉ cho người dùng lựa chọn một giá trị. Các thuộc tính cũng như các phương thức áp dụng trên Combo Box giống như trên List Box.

III.7 Check Box

III.7.1 Khái niệm: Điều khiển CheckBox (Đánh dấu) để nhận thông tin từ người dùng theo dạng Yes/No hoặc True/False. Khi Check Box được chọn, nó có giá trị 1 và ngược lại có giá trị 0.

III.7.2 Thuộc tính: o Name: thuộc tính tên. o Value: Giá trị hiện thời trên Check Box. Có thể nhận các giá trị: vbChecked, vbUnchecked, vbGrayed (Checked & Gray).

III.8 Option Button Điều khiển Option button (Lựa chọn) cũng tương tự như điều khiển CheckBox. Điểm khác nhau chủ yếu là: Các Option Button của cùng một nhóm tại mỗi thời điểm chỉ có một điều khiển được chọn. Cách sử dụng Option button cũng tương tự như của CheckBox. Tạo nhóm Option Button Tất cả các Option button đặt trực tiếp trên Form (có nghĩa là không thuộc vào Frame hoặc Picture Box) sẽ được xem như là một nhóm. Nếu người dùng muốn tạo một nhóm các Option button khác thì bắt buộc phải đặt chúng bên trong phạm vi của một Frame hoặc Picture box.

III.9 Điều khiển thanh cuộn ngang (HscrollBar)

III.9.1 Khái niệm Là điều khiển có thanh trượt cho phép cuộn ngang và người dùng có thể sử dụng HScrollBar như một thiết bị nhập hoặc một thiết bị chỉ định cho số lượng hoặc vận tốc. Ví dụ ta thiết kế volume cho một trò chơi trên máy tính hoặc để diễn đạt có bao nhiêu thời gian trôi qua trong một khoảng định thời nhất định. Khi người dùng sử dụng Scroll Bar như một thiết bị chỉ định số lượng thì người dùng cần xác định giá trị cho hai thuộc tính Max và Min để đưa ra khoảng thay đổi thích hợp.

III.9.2 Thuộc tính o Min: Là giá trị nhỏ nhất trên thanh cuộn. o Max:: Giá trị lớn nhất của thanh cuộn.

Page 43: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 21

o Large change: Thuộc tính này dùng để xác định khoảng thay đổi khi người dùng ấn chuột lên Hscrollbar. o Small change: Thuộc tính này dùng để xác định khoảng thay đổi khi người dùng ấn lên mũi tên phía cuối thanh cuộn. o Value: Thuộc tính này trả về giá trị tại một thời điểm của thanh cuộn nằm trong khoảng giá trị [Min, Max] mà người dùng đã xác định.

III.9.3 Sự kiện o Change: Xảy ra mỗi khi HScrollBar thay đổi giá trị. o Scroll: Xảy ra mỗi khi ta di chuyển con trỏ thanh cuộn.

III.10 Điều khiển thanh cuộn đứng (VScrollBar) Các thuộc tính và công dụng của VScrollBar cũng tương tự như HScrollBar.

III.11 Điều khiển thời gian (Timer)

III.11.1 Khái niệm Điều khiển Timer đáp ứng lại sự trôi đi của thời gian. Nó độc lập với người sử dùng và ta có thể lập trình để thực hiện một công việc nào đó cứ sau một khoảng thời gian đều nhau. Việc đưa một điều khiển Timer và trong một Form cũng tương tự như những điều khiển khác. Ở đây, ta chỉ có thể quan sát được vị trí của điều khiển Timer tại giai đoạn thiết kế, khi chạy ứng dụng điều khiển Timer coi như không có thể hiện trên Form.

III.11.2 Thuộc tính: o Interval: Đây là thuộc tính chỉ rõ số ms giữa hai sự kiện kế tiếp nhau. Trừ khi nó bị vô hiệu hóa, mỗi điều khiển Timer sẽ luôn nhận được một sự kiện sau một khoảng thời gian đều nhau. Thuộc tính Interval nhận giá trị trong khoảng 0...64.767 ms có nghĩa là khoảng thời gian dài nhất giữa hai sự kiện chỉ có thể là khoảng một phút (64.8 giây). o Enabled: nếu giá trị là True nghĩa là điều khiển Timer được kích hoạt và ngược lại.

III.11.3 Sự kiện o Timer: xảy ra mỗi khi đến thời gian một sự kiện được thực hiện (xác định trong thuộc tính Interval). Điều khiển Timer hữu ích trong việc tính toán thời gian cho một công việc, Ví dụ ta cần khởi tạo hoặc ngương một công việc tại thời điểm nào đó.

III.12 Danh sách ổ đĩa (DriveListbox), thư mục (DirListbox), tập tin (FileListbox)

o Điều khiển DriveListbox trình bày những ổ đĩa của hệ thống và cho phép người dùng chọn một trong những ổ đĩa đó. o Điều khiển DirListbox cho phép trình bày những thư mục và đường dẫn tại thời điểm chạy ứng dụng. Sử dụng điều khiển này để trình bày một danh sách có thứ bậc của các thư mục, có nghĩa là người dùng có thể mở một tài liệu từ danh sách các tài liệu đã có sẵn.

Page 44: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 22

o Điều khiển FileListbox cho phép trình bày những tài liệu có sẵn trong thư mục hiện hành. Ta có thể dùng thuộc tính Partten để xác định kiểu tập tin nào được hiển thị trong danh sách. Thông thường các ứng dụng sẽ sử dụng kết hợp cả ba loại điều khiển trên là DriveListbox, DirListbox và FileListbox.

Page 45: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 23

CHƯƠNG IV LÀM VIỆC VỚI TẬP TIN (FILE)

Mục tiêu: Chương này giới thiệu về cách thức truy cập hệ thống tập tin của Windows trong VB, thao tác thường gặp trong các ứng dụng chạy trên Windows. Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau:

- Sử dụng mô hình đối tượng hệ thống tập tin để thao tác với ổ đĩa, thư mục, tập tin trong Windows.

- Sử dụng các hàm xuất/nhập tập tin để truy xuất tập tin văn bản. Kiến thức có liên quan: - Các cấu trúc lập trình trong VB. - Cách thức tổ chức hệ thống tập tin của hệ điều hành Windows (9X, 2000, XP…)

IV.4 Mô hình File System Object (FSO) Cung cấp cho ứng dụng các khả năng như tạo mới, thay đổi, xóa, di chuyển các thư mục, hoặc kiểm tra xem một thư mục nào đó có tồn tại hay không… Ngoài ra chúng ta cũng có thể lấy được các thông tin liên quan đến thư mục như tên, ngày tạo, ngày sửa đổi gần nhất… Mô hình FSO chỉ hỗ trợ truy xuất trực tiếp tập tin dạng văn bản thông qua đối tượng TextStream, nó chưa hỗ trợ cho tập tin nhị phân, do đó với tập tin nhị phân ta phải dùng lệnh Open với Binary.

Đối tượng Giải thích Drive Cho phép thu thập thông tin về ổ đĩa, bao gồm cả các ổ đĩa chia

sẻ qua mạng LAN, CD-ROM…

Folder Cho phép tạo, xóa, di chuyển và thu nhận các thông tin hệ thống trên thư mục.

File Đối tượng cho phép thao tác trên tập tin. FileSystemObject Các thuộc tính và phương thức cho phép thao tác trên tập tin,

thư mục và ổ đĩa.

TextStream Cho phép đọc và ghi tập tin dạng văn bản (dạng Text). Nếu chưa có tham chiếu đến đối tượng FSO, ta cần chọn "Microsoft Scripting Runtime" từ menu Project/References... Các phương thức của FSO ta có thể xem trong cửa sổ Object Browser.

IV.4.1 Tạo đối tượng FileSystemObject Có hai cách, khai báo một biến kiểu FileSystemObject hoặc dùng phương thức CreateObject của lập trình hướng đối tượng. Cách 1:

Page 46: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 24

Dim fso As New FileSystemObject Cách 2:

Set fso = CreateObject("Scripting.FileSystemObject") Trong đó Scripting là tên thư viện và FileSystemObject là tên đối tượng.

IV.4.2 Truy cập ổ đĩa, thư mục, tập tin Dùng các phương thức GetDrive, GetFolder, GetFile. Ví dụ để tạo một handle trỏ đến tập tin "d:\tqdinh\text.txt" ta dùng các dòng lệnh sau: Dim fso As New FileSystemObject, f As File Set f = fso.GetFile("d:\text.txt")

Hoặc ta có thể tạo mới thư mục, tập tin thông qua các phương thức CreateFolder, CreateTextFile. Ngoài ra ta có thể xóa một thư mục hoặc một tập tin thông qua DeleteFolder, DeleteFile. Đối tượng FileSystemObject còn có rất nhiều phương thức, có thể xem trong ObjectBrowser.

IV.4.3 Thông tin về ổ đĩa Các thông tin này được truy xuất thông qua các thuộc tính của đối tượng Drive.

- TotalSize: tổng dung lượng của ổ đĩa tính bằng Byte. - AvailableSpace, FreeSpace: dung lượng còn trống của đĩa. - DriveLetter: ký tự ổ đĩa. - DriveType: loại ổ đĩa (ổ tháo lắp hay cố định, ổ mạng, CD-ROM, ổ RAM). - FileSystem: ổ đĩa được quản lý bởi bản FAT nào: FAT16, FAT32, NTFS...

IV.4.4 Làm việc với thư mục Đây là các phương thức có cách sử dụng rất đơn giản, vì thế ta chỉ xét qua phương thức nào ứng với tác vụ gì (công việc gì) chứ không đi sâu phân tích từng phương thức.

Tác vụ Phương thức Tạo thư mục FileSystemObject.CreateFolder Xóa thư mục FileSystemObject.DeleteFolder hay Folder.Delete Di chuyển thư mục FileSystemObject.MoveFolder hay Folder.Move Sao chép thư mục FileSystemObject.CopyFolder hay Folder.Copy Lấy tên thư mục Folder.Name Kiểm tra thư mục có tồn tại trên ổ đĩa hay không

FileSystemObject.FolderExists

Trả về đối tượng Folder FileSystemObject.GetFolder Lấy tên của thư mục cha FileSystemObject.GetParentFolderName Lấy tên của thư mục hệ thống FileSystemObject.GetSpecialFolder

IV.4.5 Làm việc với tập tin Mở tập tin để ghi dữ liệu o Tạo tập tin mới: sử dụng phương thức CreateTextFile. Dim fso As New FileSystemObject fso.CreateTextFile("d:\test.txt")

o Mở tập tin để ghi với chế độ ForWriting Sử dụng phương thức OpenAsTextStream của đối tượng File cùng với đối tượng TextStream để thao tác.

Page 47: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 25

Ví dụ: Dim fso As New FileSystemObject, f As File Dim ts As TextStream fso.CreateTextfile("d:\test.txt") Set f = fso.GetFile("d:\test.txt") Set ts = f.OpenAsTextStream(ForWriting)

o Ghi dữ liệu lên tập tin: Ta có thể ghi dữ liệu vào tập tin đang mở bằng phương thức Write hay WriteLine của đối tượng TextStream. Sự khác biệt giữa hai phương thức này là sẽ có thêm ký tự xuống dòng nếu như sử dụng WriteLine. Nếu muốn ghi một dòng trắng vào tập tin đang mở, sử dụng phương thức WriteBlankLines. Cú pháp: ts là đối tượng TextStream ts.Write(s) ‘ Ghi chuỗi s lên tập tin ts.WriteLine(s) ‘ Ghi chuỗi s lên tập tin ts.WriteBlankLines(N) ‘ Ghi N dòng trắng lên tập tin

Mở tập tin để đọc dữ liệu o Mở tập tin để đọc với chế độ ForReading, sử dụng phương thức OpenAsTextStream của đối tượng File cùng với đối tượng TextStream để thao tác. Ví dụ: Dim fso As New FileSystemObject, f As File Dim ts As TextStream Set f = fso.GetFile(“D:\Test.txt”) Set ts = f.OpenAsTextStream(ForReading)

o Đọc dữ liệu từ tập tin Có ba phương thức để đọc dữ liệu từ một tập tin văn bản, đó là Read, ReadLine và ReadAll. Ba phương thức này cho phép đọc một số ký tự, một dòng của văn bản và toàn bộ văn bản. Trong khi đọc nội dung của tập tin, ta có thể sử dụng phương thức Skip, SkipLine để nhảy đến phần tử dữ liệu mới. Cú pháp: ts là đối tượng TextStream ts.Read(N) As String: Đọc N ký tự từ tập tin ts.ReadLine As String ts.ReadAll As String

Đóng tập tin Sử dụng phương thức Close của đối tượng TextStream. Di chuyển, sao chép và xóa tập tin Sự khác biệt giữa di chuyển và sao chép một tập tin đó là tập tin nguồn có còn tồn tại ở thư mục nguồn hay không. Ứng với một thao tác, ta cũng có hai phương thức để thực hiện, đó là các phương thức thuộc đối tượng FileSystemObject và đối tượng File.

Tác vụ Phương thức Di chuyển một tập tin FileSystemObject.MoveFile hoặc File.Move Sao chép một tập tin FileSystemObject.CopyFile hoặc File.Copy Xóa một tập tin FileSystemObject.DeleteFile hoặc File.Delete

Các phương thức ứng với thao tác di chuyển và sao chép tập tin cần có đối số là đường dẫn đến nơi chứa tập tin đích.

IV.4.6 Ví dụ Thiết kế một ứng dụng như Notepad của Windows, sử dụng FSO để truy xuất tập tin.

Page 48: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 26

o Tham chiếu đến đối tượng Microsoft Scripting Runtime (sử dụng FSO) và Microsoft Common Dialog (sử dụng điều khiển CommonDialog).

o Thêm vào điều khiển CommonDialog vào ứng dụng với Name: dlgFile. o Sự kiện mnuNew_Click được xử lý:

Private Sub mnuNew_Click() txtNoiDung.Text = "" End Sub

o Đoạn mã cho thủ tục xử lý sự kiện mnuOpen_Click: Private Sub mnuOpen_Click() On Error GoTo Xuly dlgFile.Filter = "All Files (*.*)|*.*|” & _

“Text Files (*.txt)|*.txt" dlgFile.FilterIndex = 2 dlgFile.ShowOpen Dim fsoAs New FileSystemObject Dim f As File Dim ts As TextStream Set f = fso.GetFile(dlgFile.FileName) Set ts = f.OpenAsTextStream(ForReading) txtNoiDung.Text = ts.ReadAll() ts.Close Xuly: End Sub

o Đối với mnuSave_Click:

Page 49: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 27

Private Sub mnuSave_Click() On Error GoTo Xuly dlgFile.Filter = "All Files (*.*)|*.*|” & _ “Text Files (*.txt)|*.txt" dlgFile.FilterIndex = 2 dlgFile.ShowSave Dim fso As New FileSystemObject Dim f As File Dim ts As TextStream fso.CreateTextFile (dlgFile.FileName) Set f = fso.GetFile(dlgFile.FileName) Set ts = f.OpenAsTextStream(ForWriting) ts.Write (txtNoiDung.Text) ts.Close Xuly: End Sub

o Sự kiện mnuSaveAs_Click cũng được xử lý tương tự. o Sự kiện mnuFont:

Private Sub mnuFont_Click() On Error GoTo Xuly With dlgFile .Flags = cdlCFBoth + 256 .ShowFont txtNoiDung.Font.Bold = .FontBold txtNoiDung.Font.Italic = .FontItalic txtNoiDung.Font.Name = .FontName txtNoiDung.Font.Size = .FontSize End With Xuly: End Sub

o Sự kiện mnuExit_Click:

Private Sub mnuExit_Click() End

End Sub o Lưu dự án và chạy chương trình.

IV.5 Hàm I/O và lệnh xử lý tập tin Có ba kiểu truy xuất tập tin: Tuần tự, ngẫu nhiên và nhị phân

- Tuần tự (Sequential): Đây là cách thức truy cập đến tập tin cho kiểu đọc và ghi thành theo các khối liên tục nhau. - Ngẫu nhiên (Random): đọc và ghi các tập tin văn bản hoặc nhị phân có cấu trúc theo các mẩu tin có độ dài cố định. - Nhị phân (Binary): đọc và ghi các tập tin có cấu trúc thay đổi.

Do tính thực tiễn nên phần này chỉ xét kiểu truy xuất tập tin tuần tự.

IV.5.1 Mở tập tin Cú pháp:

Open pathname For [Input|Output|Append] _ As filenumber [Len = buffersize]

Nếu ta dùng tham số Input thì tập tin (có đường dẫn là pathname) đó phải tồn tại rồi, nếu không sẽ gây ra lỗi và tham số này được dùng trong trường hợp mở tập tin để đọc. Còn các tham số Output hoặc Append sẽ tạo mới tập tin và sau đó mở nó.

Page 50: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 28

Tham số Len sẽ chỉ ra số ký tự trong vùng đệm khi sao chép dữ liệu giữa tập tin và chương trình xử lý. Filenumber là số hiệu của tập tin được mở, nó mang giá trị kiểu nguyên và nằm trong khoảng từ 1 đến 511. Để lấy số hiệu tập tin mới hợp lệ, ta sử dùng hàm FreeFile(). Ví dụ: Open "d:\test.txt" For Input As #1

IV.5.2 Đọc nội dung tập tin o Hàm Input Cú pháp: Input(number, filenumber) As String Hàm này trả về number ký tự của tập tin có số hiệu được chỉ định bởi filenumber. Ví dụ: MsgBox Input(4, #1) o Lệnh Input # Cú pháp: Input #filenumber, varlist Đọc nội dung của tập tin vào các biến được chỉ bởi varlist. Các chuỗi trong tập tin được đọc phân cách nhau bởi dấu “,”. Ví dụ: Input #1, Val1, Val2 o Lệnh Line Input # Cú pháp: Line Input # filenumber, varname Lệnh này sẽ đọc nội dung của một dòng trong tập tin tuần tự vào biến varname.

IV.5.3 Ghi dữ liệu lên tập tin Ta có 2 câu lệnh để ghi dữ liệu lên tập tin là Write # và Print #. o Câu lệnh Write #: Cú pháp: Write # filenumber, [outputlist] Lệnh này ghi dữ liệu vào tập tin tuần tự, nội dung ghi mới chứa trong danh sách biến outputlist, các phần tử của danh sách cách nhau bởi dấu phẩy. Nếu ta không đặc tả outputlist thì một dòng trắng sẽ được ghi vào tập tin. o Câu lệnh Print#: Cú pháp: Print # filenumber, [outputlist] tương tự như Write# nhưng dữ liệu có thể định dạng khi ghi lên tập tin. Đối số outputlist có thể là:

[{Spc(n) | Tab[(n)]}] [expression] [charpos] Trong đó: - Spc(n): dùng để xen khoảng trắng vào tập tin với n là số khoảng trắng. - Tab(n): dùng để xác định cột bắt đầu ghi dữ liệu trong vùng ghi với n là số thứ tự cột. Dùng Tab không đối số để chỉ vị trí bắt đầu của vùng ghi tiếp theo. - Expression: biểu thức chuỗi hoặc biểu thức số. - Charpos: chỉ định vị trí của ký tự kế tiếp. Trong đó: dấu ; xác định dữ liệu mới sẽ ghi kế tiếp ký tự cuối cùng trước đó. Tab(n) xác định chính xác cột để ghi dữ liệu hay Tab chỉ ra vị trí của dữ liệu cần ghi vào là vùng ghi kế tiếp. Nếu tham số này bị bỏ qua, dữ liệu sẽ được ghi bắt đầu từ dòng kế tiếp.

IV.5.4 Đóng tập tin Cú pháp: Close filenumberlist

Page 51: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 29

đóng lại các tập tin được mở với các số hiệu được mô tả trong filenumberlist, filenumberlist có dạng sau: [[#]filenumber] [, [#]filenumber] . . .

IV.5.5 Ví dụ Open "TESTFILE" For Output As #1 ' Mở tập tin để ghi. Print #1, "This is a test" ' Ghi chuỗi vào tập tin. Print #1, ' Ghi một dòng trắng vào tập tin. Print #1, "Zone 1"; Tab ; "Zone 2" ' Tạo hai vùng ghi. ' Phân cách hai chuỗi bởi khoảng trống. Print #1, "Hello" ; " " ; "World" Print #1, Spc(5) ; "5 leading spaces " ' Tạo 5 khoảng trống Print #1, Tab(10) ; "Hello" ' ghi chuỗi tại cột thứ 10. ' Gán giá trị thuộc kiểu Boolean, Date, Null và Error. Dim MyBool, MyDate, MyNull, MyError MyBool = False : MyDate = #February 12, 1969# : MyNull = Null MyError = CVErr(32767) Print #1, MyBool ; " is a Boolean value" Print #1, MyDate ; " is a date" Print #1, MyNull ; " is a null value" Print #1, MyError ; " is an error value" Close #1 ' Đóng tập tin

Và sau đây là nội dung của tập tin TESTFILE sau khi thực thi chương trình:

This is a test Zone 1 Zone 2 Hello World 5 leading spaces Hello False is a Boolean value 2/12/1969 is a date Null is a null value Error 32767 is an error value

Ứng dụng sau đây cho phép đọc nội dung 1 tập tin được lựa chọn. o Thiết kế chương trình có giao diện: Ở đây ta có sử dụng điều khiển danh sách ổ đĩa, thư mục, tập tin để lựa chọn tập tin cùng với 1 TextBox để hiển thị nội dung.

Page 52: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 30

o Các sự kiện được xử lý như sau: Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub Dir1_Change()

File1.Path = Dir1.Path End Sub

Private Sub Command1_Click() Dim fname As String, str As String fname = Dir1.Path + "\" + File1.FileName Open fname For Input As #1 Do While Not EOF(1) Line Input #1, str txtView.Text = txtView.Text + str + vbCrLf Loop Close #1

End Sub

o Lưu dự án và chạy chương trình, ta được kết quả:

Page 53: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 31

Phần 2 TIN HỌC XÂY DỰNG

Page 54: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 32

CHƯƠNG I THIẾT KẾ GIAO DIỆN

Mục tiêu: Chương này giới thiệu về cách tạo menu cũng như một số hàm xử lý

giao diện đồ họa, những thành phần quan trọng trong các ứng dụng chạy trên Windows. Thiết kế một số giao diện thường gặp trong phần mềm chuyên ngành xây dựng. Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau:

- Sử dụng menu trong thiết kế giao diện. - Sử dụng các hộp thoại trong thiết kế ứng dụng. - Xử lý một số sự kiện để tạo các ứng dụng đồ họa. - Xây dựng ứng dụng đa tài liệu (MDI) - Chức năng wizard

Kiến thức có liên quan: - Các cấu trúc lập trình trong VB. - Cách thức xử lý sự kiện.

I.1 Menu

I.1.1 Khái niệm Menu là một loại điều khiển trong đó người sử dụng có thể lựa chọn các mục từ một danh sách cho trước. Có 2 loại menu:

- Menu thả xuống (Drop-Down Menu). - Menu Pop-Up: thường hiển thị khi ta ấn nút chuột phải.

I.1.2 Các thuộc tính

Các thuộc tính của Menu không chứa trong cửa sổ Properties mà chứa trong Menu Editor.

- Caption: Là chuỗi hiển thị trên menu. - Name: Phải duy nhất và dễ nhớ. Đây là tên để nhận biết thành phần nào của Menu được chọn.

Page 55: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 33

- Shortcut: dùng để thiết lập các phím tắt (Shortcut key). - WindowList: Dùng trong các ứng dụng MDI (Multipe Document Interface). Thuộc tính này hiển thị danh sách các Form con trên menu. - Checked: Nếu chọn thuộc tính này thì sẽ có một dấu hiển thị bên cạnh trái. - Enabled: Nếu thuộc tính này không được chọn thì mục này sẽ bị xám đi và người dùng không thể chọn. - Visible: Nếu thuộc tính này không được chọn thì mục này sẽ không được hiển thị. - NegotiatePosition: quản lý vị trí gắn menu trong trường hợp sử dụng các đối tượng ActiveX.

I.1.3 Cách tạo menu Menu không chứa trong hộp công cụ mà được thiết kế từ trình soạn thảo menu. Trong Visual Basic 6.0 IDE, chọn Tools, rồi Menu Editor để mở chương trình này. Ví dụ: Tạo một Drop-Down Menu.

- Tạo một đề án mới. - Ctrl-E để mở Menu Editor - Tạo một Menu File với Menu con là Open và Save As. - Nhập &File trong ô Caption và nhập một tên bất kỳ vào ô Name (chẳng hạn là mfile). Ký tự & trước chữ F cho biết chữ F sẽ là phím tắt (ấn Ctrl-F) coi như chọn menu File. - Tiếp theo nhập &Open và &Save As. Để Open và Save As là Sub menu của File, chọn Open rồi ấn mũi tên sang trái. Tương tự đối với Save As.

Tách nhóm menu: Trong trường hợp Menu có nhiều mục, ta sẽ tách nhóm Menu để tiện theo dõi. Chẳng hạn ta thêm vào Menu File mục Exit và tách riêng ra với Open và Save As. Ta sẽ xen vào giữa hai mục Save As và Exit một mục mới có Caption là “-“. Ví dụ: Tạo Pop-up menu - Sử dụng lại menu đã dùng ở ví dụ trước, nhưng ta sẽ tắt thuộc tính Visible của menu File. - Mở cửa sổ Code của ứng dụng, dùng sự kiện MousUp: Private Sub Form_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = vbRightButton Then PopupMenu mfile, vbPopupMenuLeftAlign

End If End Sub - Chạy thử ứng dụng, khi ta ấn chuột phải, một menu sẽ mở ra. - Lệnh PopupMenu cho biết tên menu cần bật ra, đó là tên mà ta đã đặt trong trình soạn thảo MenuEditor, ở đây là mfile. - Kế đến, là tham số xác định cách hiển thị menu: vbPopupMenuLeftAlign, vbPopupMenuRightAlign, vbPopupMenuCenterAlign.

I.2 Hộp thoại (Dialog Box)

I.2.1 Khái niệm Hộp thoại (Dialog Box) là một trong những cách VB dùng để giao tiếp với người dùng. Có 4 loại hộp thoại:

- Hộp thông điệp (Message Box). - Hộp nhập (Input Box). - Các hộp thoại thông dụng (Common Dialog) - Hộp thoại hiệu chỉnh (Custom Dialog).

Page 56: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 34

I.2.2 Hộp thoại thông điệp Hộp thông điệp cũng có 2 loại: Loại chỉ xuất thông báo và loại có tương tác với người dùng. I.2.2.1 Loại chỉ xuất thông báo

- Dùng MsgBox như một thủ tục. - Cú pháp: MsgBox Prompt, Button, Title. Trong đó: Prompt: Chuỗi thông báo sẽ hiển thị. Button: Các nút nhấn sẽ được hiển thị trên hộp thông báo. Title: Chuỗi hiển thị trên thanh tiêu đề của hộp thông báo. Sau khi xuất thông báo, VB sẽ đợi ta ấn vào nút OK hoặc Enter rồi mới thực hiện dòng lệnh sau MsgBox. Tùy theo thông số truyền vào MsgBox mà có nhiều loại hộp thoại thông điệp khác nhau.

Hằng số Giá trị Diễn giải vbOKOnly 0 Chỉ hiển thị nút OK .

vbOKCancel 1 Hiển thị 2 nút OK và Cancel. vbAbortRetryIgnore 2 Hiển thị các nút Abort, Retry, và Ignore. vbYesNoCancel 3 Hiển thị các nút Yes, No, và Cancel. vbYesNo 4 Hiển thị 2 nút Yes và No. vbRetryCancel 5 Hiển thị 2 nút Retry và Cancel.

Các loại biểu tượng trên hộp công cụ

Hằng số Diễn giải

vbCritical Dùng cho những thông báo lỗi thất bại khi thi hành công việc nào đó.

vbQuestion Dùng cho những câu hỏi yêu cầu người dùng chọn lựa. vbExclamation Dùng cho các thông báo của chương trình. vbInformation Dùng cho các thông báo cung cấp thêm thông tin.

I.2.2.2 Loại tương tác với người dùng

Lúc này MsgBox được dùng như một hàm, khi một nút nào đó trên hộp thông báo được ấn, VB sẽ trả về giá trị của nút ấn đó. Cú pháp: MsgBox (Prompt, Button, Title) As Integer

Hằng số Giá trị Nút vbOK 1 OK vbCancel 2 Cancel vbAbort 3 Abort vbRetry 4 Retry vbIgnore 5 Ignore vbYes 6 Yes vbNo 7 No

Page 57: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 35

Ví dụ: TraLoi= MsgBox (“Ban co dong y khong?”, vbYesNo, "Thoat chuong trinh") Với những thông điệp quan trọng, ta mong muốn người dùng phải chọn lựa một trong các đề xuất mà ta đưa ra trước khi chuyển qua ứng dụng khác, dùng thông số vbSystemModal.

I.2.3 Hộp thoại nhập Đây là loại hộp thông điệp cho phép nhận thông tin từ phía người sử dụng. Tuy nhiên trong các ứng dụng, hộp nhập rất ít khi được dùng do:

- Ta không có cách nào để kiểm tra thông tin do người dùng nhập vào khi mà Enter chưa được ấn. - Thông tin được nhập là rất ít.

Ví dụ về hộp nhập: Public Sub Main ()

Dim ReturnString As String ReturnString = InputBox(“Nhap vao ten cua ban”)

End Sub Giá trị trả về của hộp nhập là một chuỗi.

I.2.4 Các loại hộp thoại thông dụng (Common Dialog) Có 6 loại hộp thoại thông dụng: Mở tập tin, Lưu tập tin, Chọn màu, Chọn Font, In ấn, Trợ giúp. Tuy có 6 loại, nhưng khi thiết kế Form, chỉ thấy một công cụ duy nhất đó là CommonDialog. Muốn đưa Common Dialog vào dự án, chọn: Project/Components…/Controls/Microsoft Common Dialog Control 6.0. Sau đó, Common Dialog sẽ xuất hiện trong hộp công cụ ToolBox. I.2.4.1 Hộp thoại mở và lưu tập tin

Hai hộp thoại này có chức năng và thể hiện như nhau. Cả hai hộp thoại đều hiển thị danh sách các tập tin, người dùng có thể duyệt qua các ổ đĩa để tìm các tập tin. Chúng chỉ khác nhau phần tiêu đề và nút nhấn. Các thuộc tính quan trọng: o Name: tên của Common Dialog. o Filter: đây là một chuỗi xác định phần mở rộng của tên các tập tin mà hộp thoại có thể mở hay lưu. o FilterIndex: nếu có nhiều phần mở rộng của tên tập tin được mô tả trong thuộc tính Filter thì thuộc tính này xác định mặc định loại tập tin nào được chọn (là một số nguyên). o FileName: trả về tên tập tin sau khi người sử dụng hộp thoại chọn một tập tin nào đó. o CancelError: nếu TRUE thì trả về giá trị lỗi khi người dùng chọn nút Cancel, mặc nhiên giá trị này là False. Phương thức: o ShowOpen: mở ra hộp thoại mở tập tin. o ShowSave: mở ra hộp thoại lưu tập tin. Ví dụ: Private Sub Form_Load() On Error GoTo ErrHandler dlgFile.Filter = "All Files (*.*)|*.*|Text Files “ & _ “(*.txt)|*.txt|Batch Files (*.bat)|*.bat" dlgFile.FilterIndex = 2 dlgFile.ShowOpen

Page 58: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 36

Exit Sub ErrHandler: MsgBox Err.Description End Sub

Ở ví dụ trên, ta thiết kế một hộp thoại mở tập tin, trong đó các tập tin được hiển thị theo 3 nhóm tập tin đó là:

- All Files: (*.*) - Text Files: (*.txt) - Batch Files: (*.bat)

Thuộc tính FilterIndex = 2 tức là khi hộp thoại Open được mở lên, thì loại tập tin hiển thị mặc định là Text Files. Sau khi đã chọn một tập tin và nhấn nút Open, ta sử dụng thuộc tính FileName để nhận về tên tập tin đã chọn. Ta chọn phương thức ShowOpen để hiển thị hộp thoại mở tập tin.

I.2.4.2 Hộp thoại Chọn màu

Đây là hộp thoại cho phép người dùng chọn và hiển thị các màu có sẵn trong bảng màu của Windows cũng như thiết lập thêm nhiều màu mới. Một thuộc tính quan trọng đối với hộp thoại chọn màu đó là thuộc tính Color, thuộc tính này trả về giá trị của màu đã được chọn. Ta sẽ dùng phương thức ShowColor để hiển thị hộp thoại chọn màu. Trong một số ứng dụng, dùng hộp thoại chọn màu để thay đổi giá trị màu của các điều khiển trong một số trường hợp nào đó. Ví dụ thay đổi màu nền của điều khiển TextBox trong ví dụ dưới đây: Ta sẽ thiết kế một nút nhấn nhỏ bên cạnh điều khiển TextBox, nút nhấn này cho phép người sử dụng chọn màu nền của TextBox. Ta có đoạn mã lệnh sau: Private Sub Command2_Click() On Error GoTo ErrHandler CommonDialog1.ShowColor Text1.BackColor = CommonDialog1.Color ErrHandler: CommonDialog1.ShowColor End Sub

I.2.4.3 Hộp thoại chọn Font chữ

Cho phép người dùng chọn Font màn hình, máy in hay cả hai. Khi dùng hộp thoại chọn Font ta phải dùng thuộc tính Flags quy định loại Font nào sẽ được hiển thị.

Page 59: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 37

Thuộc tính Giải thích

Color Lưu giữ giá trị của màu được chọn

FontBold TRUE nếu người dùng chọn chế độ đậm (Bold) và FALSE nếu ngược lại.

FontItalic TRUE nếu người dùng chọn chế độ nghiêng (Italic) và FALSE nếu ngược lại.

FontStrikeThru TRUE nếu chọn chế độ gạch ngang các ký tự.

FontUnderLine TRUE nếu chọn chế độ gạch dưới

FontName Tùy ý Max Kích cỡ lớn nhất của Font được hiển thị

Min Kích cỡ nhỏ nhất của font được hiển thị

FontSize Kích cỡ của Font được chọn Các giá trị của thuộc tính Flags:

Hằng Giá trị Hiệu quả cdlCFPrinterFonts &H2 Chỉ hiển thị font máy in

cdlCFScreenFonts &H1 Chỉ hiển thị font màn hình

cdlCFBoth &H3 Hiển thị cả hai cdlCFScalableOnly &H20000 Hiển thị font tỷ lệ như là fonts TrueType

Nếu muốn chọn màu cho Font, ta thêm 256 (+256) vào giá trị của thuộc tính Flags. Để mở hộp thoại chọn Font, ta sử dụng phương thức ShowFont. I.2.4.4 Hộp thoại In ấn

Đây là hộp thoại cho phép xác lập các thông tin về máy in chẳng hạn như bao nhiêu dữ liệu được in, máy in sẽ hoạt động như thế nào… Hộp thoại in ấn, nó trả về 3 thuộc tính thông dụng: Copies, FromPage và ToPage.

Thuộc tính Giải thích Copies Số bản in

Page 60: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 38

FromPage Số thứ tự của trang bắt đầu Max Số bản in tối đa cho phép

Min Số bản in tối thiểu cho phép

PrinterDefault Nếu gán thành TRUE, mọi thay đổi mà người dùng thực hiện sẽ được ghi lại thành các thay đổi trên hệ thống và có ảnh hưởng đến các ứng dụng khác nếu có sử dụng máy in.

ToPage Số thứ tự của trang in cuối cùng Để mở hộp thoại in ấn, ta sử dụng phương thức ShowPrinter.

I.3 Xử lý các sự kiện chuột và bàn phím

I.3.1 Sự kiện chuột Form hoặc điều khiển có thể nhận biết sự kiện chuột khi có con trỏ chuột đi ngang qua. Có 3 sự kiện chuột chủ yếu, đó là

Sự kiện Giải thích MouseDown Xảy ra khi người sử dụng ấn chuột (chuột trái hoặc phải)

MouseUp Xảy ra khi người sử dụng thả một nút chuột bất kỳ MouseMove Xảy ra khi con trỏ chuột di chuyển đến một điểm mới trên màn hình.

Các tham số Tham số Giải thích Button Cho biết phím chuột nào được ấn

Shift Cho biết SHIFT hay CTRL hay ALT được ấn X, Y Xác định vị trí của con trỏ chuột đối với hệ tọa độ của điều khiển

Ví dụ 1: Sử dụng sự kiện MouseDown để vẽ các đoạn thẳng nối tiếp nhau mỗi khi ta dùng chuột chấm một điểm trên Form. Ta có thể thực hiện điều đó với đoạn mã lệnh xử lý sự kiện Form_MouseDown như sau: Private Sub Form_MouseDown(Button As Integer, & Shift As Integer, X As Single, Y As Single)

Line -(X, Y) End Sub Ví dụ 2: Sử dụng sự kiện MouseUp để hiển thị một thông điệp cho biết nút chuột nào vừa được thả. Sự kiện Form_MouseUp được xử lý: Private Sub Form_MouseUp (Button As Integer, & _

Shift As Integer, X As Single, Y As Single) If Button = 1 Then Print “Ban vua tha phim chuot trai” End If If Button = 2 Then Print “Ban vua tha phim chuot phai” End If If Button = 4 Then Print “Ban vua tha phim chuot giua” End If End Sub

Page 61: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 39

I.3.2 Sự kiện bàn phím Bàn phím cũng có 3 sự kiện, đó là sự kiện KeyPress (khi một phím có mã ASCII bất kỳ được ấn), KeyDown (khi một phím bất kỳ được ấn), KeyUp (khi một phím bất kỳ được thả) Các sự kiện KeyDown, KeyUp có thể phát hiện một số tình huống mà sự kiện KeyPress không phát hiện:

- Khi người dùng bấm một tổ hợp phím SHIFT, CTRL và ALT. - Phím định hướng. - PAGEUP và PAGEDOWN. - Phân biệt được phím số ở bên phải bàn phím và phím số ở bên trái bàn phím. - Đáp ứng khi thả phím. - Phím chức năng không trùng với menu.

Các sự kiện bàn phím là không loại trừ nhau. Tức là một phím được ấn thì có thể là cả hai

sự kiện KeyPress và KeyDown cùng được phát ra. Nhưng nếu là một phím mà KeyPress

không phát hiện được thì chỉ có KeyDown và KeyUp xảy ra.

I.4 Sử dụng Multiple document interface (MDI) Một số ứng dụng lớn bao gồm hàng chục Form trở lên thì việc quản lý, cũng như thao tác trên các Form này là rất khó khăn, sự khó khăn này thường xuất hiện khi quản lý ứng dụng theo kiểu đơn tài liệu (Single Document), chính vì thế để quản lý 1 ứng dụng hiệu quả, ta cần thiết kế ứng dụng theo kiểu giao diện đa tài liệu (Multiple Document Interface).

I.4.1 Khái niệm Ứng dụng đa tài liệu hay là 1 ứng dụng trong đó có 1 Form chứa các Form khác (gọi là Form Parent), các Form được chứa bởi Form Parent gọi là Form Child . Việc sử dụng MDI trong ứng dụng tuỳ thuộc yêu cầu và mục đích của người lập trình, sử dụng MDI nhằm mục đích quản lý các Form dùng chung 1 số Menu, giúp chuyển đổi qua lại dể dàng giửa các Form. Có rất nhiều ứng dụng quản lý theo kiểu MDI, ví dụ: Microsoft Access, AutoCAD, Microsoft Excel… Trong ngành xây dựng, sử dụng MDI trong trường hợp cần trình bày nhiều bảng kết quả, bản vẽ, và các giao diện nhập xuất số liệu cùng một lúc.

Page 62: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 40

I.4.2 Thiết lập ứng dụng MDI Để quản lý ứng dụng theo kiểu MDI, ta phải xác định rỏ Form nào là Form chứa (Form Parent), Form nào là Form được chứa (Form Child). Trong mỗi dự án VB, chỉ có thể tạo được 1 MDI Form. Cách tạo ứng dụng sử dụng MDI. - Tạo 1 dự án MdiApplication trong Visual Basic 6.

- Sau khi tạo 1 dự án thành công VB sẽ tự động kết xuất cho ta Form1, ta đổi tên thành frmChild. Đặt thuộc tính MDIChild = True. - Tạo MDI Form (Project|Add MDI Form) đặt tên là frmMain. Form này có màu nền xám. - Chạy thử chương trình ta thấy frmChild xuất hiện trong của sổ của frmMain.

Việc tạo giao diện trong ứng dụng MDI hoàn toàn tương tự trong ứng dụng thông thường.

I.5 Tạo giao diện Wizard (Thuật sĩ) Một trong những giao diện được Microsoft dùng nhiều nhất cho các sản phẩm của mình là Wizard và đây cũng là loại giao diện chúng ta thường gặp nhất. Wizard được hiểu là cách chia nhỏ những giao diện phức tạp thành một chuỗi các giao diện đơn giản. Việc làm này giúp người sử dụng dễ dàng hơn trong thao tác và tăng tính chuyên nghiệp cho chương trình.

Page 63: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 41

Những lưu ý khi tạo Wizard UI Không có định nghĩa chính xác Wizard UI là gì nhưng nếu xem những ứng dụng của nó như “Create Form by using wizard” của MS Access ta sẽ thấy những đặc điểm sau đây của wizard.

1. Người sử dụng thao tác với một chuỗi các Form nhỏ, gọn gàng, thông suốt. 2. Từng trang có tiêu đề và mô tả giúp người dùng biết mình cần phải làm gì. 3. Từng trang yêu cầu người dùng hoàn thành một hoặc hai thao tác. 4. Ở dưới các trang có nút Tiến và Lùi (Nếu đó không phải là trang đầu hoặc cuối) 5. Tất cả các trang sẽ có nút Cancel để người dùng có thể thoát khỏi wizard 6. Trang cuối cùng có nút Finsh (Kết thúc). Đôi khi các trang khác cũng có. 7. Nếu chọn Lùi hoặc Tiến, wizard vẫn lưu lại những thông số ta đã nhập vào. 8. Các trường dữ liệu trên Form thường có những giá trị mặc định thường dùng.

Khi xây dựng một giao diện Wizard nên tuân thủ những đặc điểm trên. Các trang của wizard không nên thiết kế trên nhiều Form khác nhau, gây lãng phí bộ nhớ và phức tạp trong quá trình xử lý, bên cạnh đó cũng tránh được việc thiết kế lại các điều khiển giống nhau.

Page 64: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 42

CHƯƠNG II XỬ LÝ ĐỒ HỌA

Mục tiêu: Chương này giới thiệu về các đối tượng, điều khiển đồ họa cơ bản trong VB. Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau: - Sử dụng các phương thức đồ họa vẽ thiết lập bản vẽ. - Sử dụng các điều khiển đồ họa xây dựng giao diện. - Xây dựng các phương thức biến đổi tọa độ. Kiến thức có liên quan: - Các cấu trúc lập trình trong VB. - Cách thức xử lý sự kiện. Trong Visual Basic 6.0, các phương thức và thuộc tính được sử dụng để vẽ trên Form hoặc PictureBox. Đồ họa trong Visual Basic 6.0 dựa trên Windows Graphics Device Interface (GDI) APIs - Application Programming Interface.

II.1 Tọa độ màn hình Góc trái trên của màn hình có tọa độ là (0,0) có nghĩa là X = 0 và Y = 0. Như vậy tức là khi di chuyển sang phải màn hình thì X tăng lên cũng như di chuyển xuống dưới thì Y tăng lên. Hình minh họa các kích thước của màn ảnh và Form.

Client Area

Page 65: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 43

Cách định nghĩa hệ tọa độ người dùng Để định nghĩa hệ tọa độ người dùng ta sử dụng phương thức Scale với thông số đầu vào là tọa độ hai góc của vùng. ctl .Scale (x1, y1)-(x2, y2) Visual Basic sẽ thiết lập các thuộc tính sau của đối tượng ctl

Property Value

ctl.ScaleLeft x1

ctl.ScaleWidth x2 - x1

ctl.ScaleTop y1

ctl.ScaleHeight y2 - y1

Thường sử dụng 2 đơn vị tọa độ chủ yếu sau: Twips và Pixel. Twips: Đây là hệ tọa độ mặc định dùng cho Form. Mỗi điểm sẽ bằng 1/567 cm. Đây là hệ tọa độ không bị ảnh hưởng bởi thiết bị, kết quả vẽ sẽ như nhau trên màn hình VGA, trên máy in hay trên màn hình có độ phân giải cao khác. Ví dụ khi vẽ 1 đường dài 567twips nó sẽ hiển thị dài 1cm trên màn ảnh và khi in nó cũng dài 1cm trên giấy. Pixel: Đây là hệ tọa độ phổ biến nhất, mỗi một điểm trên màn hình sẽ bằng chính xác với một Pixel, như vậy khi sử dụng hệ tọa độ này sẽ giúp cho các ứng dụng đồ họa thực hiện được nhanh hơn vì không phải thông qua quá trình đổi hệ tọa độ.

II.2 Màu (Color) VB6 cung cấp 4 cách để chọn màu hiển thị cho đối tượng đồ họa: 1. Chọn trực tiếp một con số hay chọn một màu từ bảng Palette.

2. Chọn một trong các hằng số định nghĩa sẵn trong VB

Page 66: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 44

3. Dùng Function QBColor để chọn một trong 16 màu. Function QBColor xuất phát từ thời Quick Basic (QBasic) của Microsoft. Trong QBasic ta có thể dùng các con số 1,2,3 .. để chỉ định các màu Blue, Green, Cyan ... Ví dụ:

Các màu với Function QBColor.

Trị số Màu Trị số Màu 0 Black 8 Gray 1 Blue 9 Light Blue 2 Green 10 Light Green 3 Cyan 11 Light Cyan 4 Red 12 Light Red 5 Magenta 13 Light Magenta 6 Yellow 14 Light Yellow 7 White 15 Bright White

4. Dùng Function RGB để trộn ba màu Red, Green và Blue. Một màu được biểu diễn bằng sự pha trộn của ba thành phần màu căn bản, mỗi màu bằng một byte có trị số từ 0 đến 255. 0 là không dùng màu ấy, 255 là dùng tối đa màu ấy.

II.3 Các thuộc tính đồ họa của Form và PictureBox • AutoRedraw – Tự động vẽ lại các phần đồ họa • DrawStyle – Kiểu đường hiển thị • DrawWidth – Độ rộng của đường • FillColor – Màu tô cho circles, lines và boxes. • FillStyle – Mẫu tô cho circle, lines và boxes • ScaleHeight – Chiều cao vùng client • ScaleWidth – Chiều rộng của vùng client • ScaleLeft – Giá trị bắt đầu trái của vùng client • ScaleTop – Giá trị bắt đầu trên của vùng client • ScaleMode – Đơn vị của vùng client

II.4 Các phương thức đồ họa Các điều khiển được vẽ lên Form lúc thiết kế nhưng các phương thức đồ họa cho phép vẽ trực tiếp khi ứng dụng thi hành.

II.4.1 Phương thức Print

Phương thức Print cho phép in trực tiếp trên Form, PictureBox hay Printer. Cú pháp [Object.]Print [Spc(n) | Tab(n) | expression charpos] trong đó :

Object tên của đối tượng nhận kết quả vẽ (Printer, Form, PictureBox), default là form hiện hành.

Spc(n) qui định n ký tự trống được in ra. Tab(n) qui định n ký tự Tab được in ra, mỗi Tab đưa pointer in qua phải thêm 1

cột (vị trí các cột được qui định trước).

Page 67: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 45

expression là biểu thức chuỗi hay số cần in. charpos qui định vị trí in dữ liệu kế tiếp. Nếu charpos = ";" thì dữ liệu in kế tiếp sẽ

được in liền ngay. Nếu charpos = "," thì sẽ thêm 1 Tab trước khi in dữ liệu kế. Nếu không có charpos sau cùng thì vị trí in sẽ dời xuống đầu dòng kế tiếp.

Thông tin về font chữ phải được thiết lập trước thủ tục Print thông qua các thuộc tính sau của đối tượng vẽ : FontName, FontSize, FontItalic, FontBold,... Nên thiết lập thuộc tính CurrentX, CurrentY để qui định rõ ràng vị trí in của mỗi lệnh Print. Ví dụ: Private Sub CmdPrintFontSizes_Click() Dim i As Integer For i = 1 To 10 'Định nghĩa cỡ Font Me.Font.Size = Me.Font.Size + i 'Định nghĩa màu sử dụng hàm QBColor Me.ForeColor = QBColor(i) 'In trên một dòng, sử dụng dấu chấm phẩy ";" Me.Print Str(i); Next End Sub

Kết quả:

II.4.2 Phương thức PSet

Phương thức này thao tác trên từng điểm và có công dụng gán một màu nào đó cho một điểm trên đối tượng. Cú pháp : [Object.]PSet [Step] (x, y), [color]

Object tên của đối tượng nhận kết quả vẽ (Printer, Form, PictureBox), default là form hiện hành.

Step Tùy chọn. Nếu từ khóa Step được dùng thì (x,y) là tọa độ tương đối so với vị trí hiện hành được xác định bởi 2 thuộc tính CurrentX, CurrentY của đối tượng vẽ. Nếu từ khóa Step không được dùng thì (x,y) là tọa độ so với điểm gốc (0,0).

(x, y) Tọa độ của điểm. Color giá trị kiểu Long miêu tả màu vẽ theo hệ màu RGB (hoặc dùng hàm

QBColor() hoặc dùng hàm RGB(r,g,b) để xác định màu vẽ). Để xóa một điểm ta vẽ lại điểm đó với màu cùng màu của Form.

Page 68: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 46

II.4.3 Phương thức Line

Phương thức Line dùng để vẽ một đường thẳng trong quá trình thực thi chương trình. Cú pháp: [objName.]Line [Step] (x1, y1) - [Step] (x2, y2), [color], [B][F]

Object tên của đối tượng nhận kết quả vẽ (Printer, Form, PictureBox), default là form hiện hành.

(x1,y1) miêu tả tọa độ điểm đầu của đoạn thẳng cần vẽ trên đối tượng nhận kết quả. Nếu từ khóa Step được dùng trước tọa độ (x1,y1) thì nó là tọa độ tương đối so với vị trí hiện hành được xác định bởi 2 thuộc tính CurrentX, CurrentY của đối tượng nhận kết quả. Nếu từ khóa Step không được dùng thì (x1,y1) là tọa độ so với điểm gốc (0,0).

(x2,y2) miêu tả tọa độ điểm cuối của đoạn thẳng cần vẽ. Ý nghĩa của (x2,y2) cũng giống như (x1,y1).

Color giá trị kiểu Long miêu tả màu vẽ theo hệ màu RGB. B F nếu không có thông số B thì thủ tục Line sẽ vẽ đoạn thẳng qua 2 điểm.

nếu có thông số B, thủ tục Line sẽ vẽ hình chữ nhật mà 2 đỉnh chéo được xác định bởi 2 điểm. Trong trường hợp này nếu có thông số F, hình chữ nhật sẽ được tô cùng màu với màu vẽ, ngược lại thuộc tính FillColor và FillStyle của đối tượng nhận kết quả sẽ qui định màu được tô.

Để đơn giản ta có 3 cách chỉ định tọa độ 2 đầu đoạn thẳng muốn vẽ: 1. Cho biết tọa độ của đầu và cuối đường thẳng: Ví dụ: Line (50, 100)-(3000, 4000) Khi đường này được vẽ xong thì vị trí của con trỏ đồ họa là vị trí cuối của đường này, tức là CurrentX=3000 và CurrentY=4000. 2. Chỉ cho biết tọa độ cuối đường thẳng: Ví dụ: Line -(3600, 4500), vbMagenta Trong trường hợp này vị trí của con trỏ đồ họa (CurrentX, CurrentY) được lấy làm tọa độ của đầu đường thẳng khi vẽ. 3. Dùng chữ Step để nói sự khác biệt từ CurrentX và CurrentY: Ví dụ: Line Step(400, 600)-Step(800, -500), vbGreen Nếu trước khi execute dòng code này CurrentX=3600 và CurrentY=4500 thì dòng code tương đương với: Line (4000,5100)-(4800,4600), vbGreen Các ví dụ sử dụng phương thức Line Vẽ tam giác: Cách 1 Private Sub CmdTrianI_Click() Line (700, 500)-(2800, 2400) Line (2800, 2400)-(1800, 900) Line (1800, 900)-(700, 500) End Sub

Cách 2 Private Sub CmdTrianII_Click() Line (700, 500)-(2800, 2400), vbRed Line -(1800, 900), vbRed Line -(700, 500), vbRed End Sub

Page 69: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 47

Vẽ hình chữ nhật Private Sub Rectangle(ByVal X1 As Integer, ByVal Y1 As Integer,

ByVal X2 As Integer, ByVal Y2 As Integer) ' Draw a rectangle Line (X1, Y1)-(X2, Y1) Line -(X2, Y2) Line -(X1, Y2) Line -(X1, Y1) End Sub

Hình chữ nhật 4 góc tròn: Private Sub RoundCornerRectangle(ByVal X1 As Integer, ByVal Y1 As

Integer, ByVal X2 As Integer, ByVal Y2 As Integer) Const Delta = 50 ' Draw a rectangle with round corner Line (X1 + Delta, Y1)-(X2 - Delta, Y1) Line -Step(Delta, Delta) Line -(X2, Y2 - Delta) Line -Step(-Delta, Delta) Line -(X1 + Delta, Y2) Line -Step(-Delta, -Delta) Line -(X1, Y1 + Delta) Line -Step(Delta, -Delta) End Sub

Tô màu hình chữ nhật sử dụng phương thức Pset: Private Sub Shade(ByVal X1 As Integer, ByVal Y1 As Integer, ByVal

X2 As Integer, ByVal Y2 As Integer) Const Delta = 50 Dim i As Integer Dim j As Integer ' Make sure that X1 is less than X2 ' Swap values of X1, X2 if X1 > X2 If X2 < X1 Then Temp = X1 X1 = X2 X2 = Temp End If ' Make sure that Y1 is less than Y2 ' Swap values of Y1, Y2 if Y1 > Y2 If Y2 < Y1 Then Temp = Y1 Y1 = Y2 Y2 = Temp End If ' Vẽ các điểm cách nhau 50 Pixel For i = X1 + Delta To X2 - Delta Step 50 For j = Y1 + Delta To Y2 - Delta Step 50 PSet (i, j) Next Next End Sub

Muốn tô đậm hơn, ta có thể cho các chấm gần nhau hơn hoặc tăng trị số của DrawWidth.

Page 70: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 48

II.4.4 Phương thức Circle

VB cung cấp phương thức Circle cho phép ta vẽ đường tròn, đường cong, cung tròn, ellipse … Để vẽ một đường tròn ta dùng phương thức Circle do VB cung cấp. Cú pháp: Object.Circle (X, Y), Radius, [color]

Object Đối tượng mà phương thức làm việc. (x, y) Tọa độ tâm đường tròn. Radius Bán kính của đường tròn Color Màu đặt cho đường tròn. .

Để vẽ một cung tròn, ta cũng sử dụng phương thức Circle, tuy nhiên ta cần cung cấp thêm 2 thông số đó là điểm bắt đầu và điểm kết thúc của cung tròn. Thông thường chúng ta quen sử dụng đơn vị đo góc là độ, tuy nhiên đối với VB ta cần phải đưa vào đơn vị là Radians. Ví dụ vẽ một cung tròn tâm (1000, 1500), bán kính 500 bắt đầu từ góc 60

o đến góc 90

o ta

dùng đoạn lệnh như sau: Const pi = 3.1415 Circle (1000, 15000), 500, , pi/3, pi/2

Để vẽ một Ellipse, ta cung cấp thêm thông số cuối cùng (thông số Aspect) đó là sự co giãn của đường tròn theo chiều ngang. Cú pháp tổng quát của phương thức Circle:

object.Circle [Step] (x, y), radius, [color, start, end, aspect]

Object Đối tượng mà phương thức làm việc. (x, y) miêu tả tọa độ tâm điểm của vòng tròn/ellipse/arc cần vẽ trên đối tượng nhận

kết quả. Nếu từ khóa Step được dùng trước tọa độ (x,y) thì (x,y) là tọa độ tương đối so với vị trí hiện hành được xác định bởi 2 thuộc tính CurrentX, CurrentY của đối tượng nhận kết quả. Nếu từ khóa Step không được dùng thì (x,y) là tọa độ so với điểm (0,0).

Radius Bán kính của đường tròn Color giá trị kiểu Long miêu tả màu vẽ theo hệ màu RGB start, end góc xác định điểm đầu và cuối của arc theo đơn vị radian (default điểm đầu là

0 và điểm cuối là 2π). aspect tỉ lệ kích thước dọc/ngang của ellipse (default là 1 để vẽ vòng tròn).

II.4.5 Phương thức PaintPicture

Phương thức PaintPicture cho phép sao chép nhanh các hình ảnh từ Form, hộp hình và máy in. Cú pháp: object.PaintPicture picture, x1, y1, width1, height1, x2, y2, width2, height2, opcode

Object Object là đối tượng mà phương thức sẽ làm việc, nó có thể là Form, hộp hình hay đối tượng máy in.

Page 71: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 49

Picture Hình ảnh nguồn sẽ được vẽ lên đối tượng phải được chỉ rõ bởi thuộc tính Picture của Form hoặc hộp hình.

x1, y1 Giá trị chỉ định vị trí của hình ảnh trên đối tượng. Thuộc tính ScaleMode xác định hệ tọa độ nào được sử dụng.

Width1 Giá trị xác định độ rộng của hình ảnh, nếu bỏ qua thì mặc định là độ rộng của ảnh nguồn.

Height1 Giá trị xác định độ cao của hình ảnh, nếu bỏ qua thì mặc định là độ cao của ảnh nguồn.

x2, y2 Các giá trị xác định hình ảnh sẽ được vẽ lại từ vị trí nào. Nếu bỏ qua thì giá trị mặc định là 0, tức toàn bộ hình ảnh được vẽ lại.

Width2 Tương tự như Width1, nhưng ở đây là tác động đến ảnh nguồn. Height2 Tương tự như Height1, nhưng ở đây là tác động đến ảnh nguồn. Opcode Đây là tùy chọn và chỉ có tác dụng với ảnh Bitmap.

Ví dụ: Thiết kế chương trình sao cho khi người sử dụng vừa di chuyển vừa nắm giữ phím chuột thì một hình ảnh sẽ được vẽ lại ở tọa độ mới. Dim re Private Sub Form_Load() re = False End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X

As Single, Y As Single) re = True End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X

As Single, Y As Single) If re Then Form1.PaintPicture Image1.Picture, X, Y, Image1.Width,

Image1.Height End If End Sub Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X

As Single, Y As Single) re = False End Sub

Qua ví dụ trên ta thấy phương thức PaintPicture cho phép sao chép nhanh một ảnh nguồn trên các đối tượng khác.

Page 72: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 50

II.4.6 Bài toán vẽ đa giác bất kỳ

Định nghĩa đa giác (Polygone): Đa giác là một đường gấp khúc kín có đỉnh đầu và đỉnh cuối trùng nhau. Đây là bài toán thường gặp trong các ứng dụng chuyên ngành. Ví dụ ta cần vẽ một mặt cắt ngang dầm, vẽ các hình chiếu, trụ mố…

Mặt cắt ngang dầm hộp được tạo bởi 2 đa giác.

Ta sẽ tìm hiểu thuật toán để vẽ một đa giác bất kỳ: Xây dựng cấu trúc dữ liệu để vẽ đa giác Private Type DinhDaGiac x as Long y as Long End Type

Với cách xây dựng cấu trúc dữ liệu như thế này thì chúng ta chỉ cần nhập vào tọa độ các đỉnh và sau đó gọi thủ tục vẽ đường thẳng lần lượt qua 2 đỉnh như (0, 1), (1,2), ..., (n-1, n), trong đó đỉnh n trùng với đỉnh 0 thì ta sẽ vẽ được toàn bộ đa giác. Ví dụ vẽ trên Form một đa giác 5 cạnh: Private Type DinhDaGiac x As Long y As Long End Type

Private Sub Command1_Click() Dim DiemVe(4) As DinhDaGiac DiemVe(0).x = 100: DiemVe(0).y = 45 DiemVe(1).x = 95: DiemVe(1).y = 100 DiemVe(2).x = 123: DiemVe(2).y = 80 DiemVe(3).x = 187: DiemVe(3).y = 150 DiemVe(4).x = 174: DiemVe(4).y = 45 Call VeDaGiac(DiemVe)

End Sub Private Sub VeDaGiac(DinhDG() As DinhDaGiac) For i = 0 To UBound(DinhDG) – 1 ‘Nối điểm đầu đến điểm cuối Line (DinhDG(i).x, DinhDG(i).y)-(DinhDG(i + 1).x, DinhDG(i + 1).y) Next Line (DinhDG(UBound(DinhDG)).x, DinhDG(UBound(DinhDG)).y)-_ (DinhDG(0).x, DinhDG(0).y) ‘Nối điểm cuối và điểm đầu

End Sub

Kết quả:

Page 73: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 51

Thuật toán kiểm tra một đa giác là lồi hay lõm Đa giác được gọi là lồi nếu bất kỳ đường thẳng nào đi qua một cạnh của đa giác thì toàn bộ đa giác nằm về một phía của đường thẳng đó. Ngược lại, nếu tồn tại ít nhất một cạnh của đa giác chia đa giác làm 2 phần thì gọi là đa giác lõm.

Thuật toán 1: Lần lượt thiết lập phương trình đường thẳng đi qua các cạnh của đa giác. Ứng với từng phương trình đường thẳng, xét xem các đỉnh còn lại có nằm về một phía đối với đường thẳng đó hay không ? Nếu đúng thì kết luận đa giác lồi, ngược lại là đa giác lõm. Thuật toán 2 : Nhận xét : Trong mặt phẳng Oxy, cho 2 véc tơ a và b , Tích vô hướng của 2 véc tơ là :

yxyxyx

yx abbabbaa

baT ..),( −==rr

Khi đó : ar rẽ trái sang b

r nếu T ≥ 0 ; ar rẽ phải sang b

rnếu T < 0

Một đa giác là lồi khi đi dọc theo biên của nó thì chỉ đi theo một hướng mà thôi. Nghĩa là chỉ rẽ phải hay rẽ trái. Ngược lại là đa giác lõm.

Xét đa giác gồm các đỉnh P0, P1 ,.... Pn , ( P0 = Pn ) , n ≥ 3. Tính Vi = Pi+1 - Pi , ∀i = 0, 1, ..., n-1. Tính Ti = T( Vi , Vi+1 ) Nếu với mọi Ti đều cùng dấu thì kết luận đa giác lồi. Ngược lại, là đa giác lõm.

Page 74: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 52

II.5 Các điều khiển đồ họa PictureBox và Image có thể chứa hình ảnh. Line và Shape dùng để vẽ đường thẳng hay các hình chữ nhật, tròn .v.v.. trên form trong quá trình thiết kế.

II.5.1 Điều khiển hộp hình ảnh (Picture Box)

a. Khái niệm Điều khiển Picture Box cho phép người dùng hiển thị hình ảnh lên một Form. b. Thuộc tính: o Picture: Là thuộc tính cho phép xác định hình ảnh nào sẽ được hiển thị bên trong Picture box. Bao gồm tên tập tin hình ảnh và cả đường dẫn nếu có. Để hiển thị hoặc thay thế một hình ảnh tại thời điểm chạy chương trình thì người dùng có thể dùng phương thức LoadPicture để đặt lại giá trị của thuộc tính Picture với cú pháp như sau: picMain.Picture = LoadPicture("NEW.JPG") o Autosize: Khi giá trị của thuộc tính này là TRUE thì điều khiển Picture box sẽ tự động thay đổi kích thước cho phù hợp với hình ảnh được hiển thị. c. Sự kiện: o Mouse Down: Xảy ra khi người sử dụng chương trình nhấn giữ phím chuột. o Mouse Move: Xảy ra khi người sử dụng chương trình di chuyển chuột. o Mouse Up: Xảy ra khi người sử dụng chương trình thả phím chuột. Lưu ý: - Điều khiển Picture Box có thể được dùng như một vật chứa các điều khiển khác (tương tự như một Frame). - Ngoài ra người dùng cũng có thể sử dụng Picture Box như một khung vẽ hoặc như một khung soạn thảo và có thể in được nội dung trên đó.

II.5.2 Điều khiển hình ảnh (Image)

a. Khái niệm: Điều khiển Image dùng để hiển thị một hình ảnh. Các dạng có thể là Bitmap, Icon, Metafile, Jpeg, Gif. Tuy nhiên khác với điều khiển Picture Box điều khiển Image sử dụng tài nguyên hệ thống ít và cũng nạp ảnh nhanh hơn; hơn nữa số lượng thuộc tính và phương thức áp dụng ít hơn điều khiển Picture box. b. Thuộc tính: o Picture: Đây là thuộc tính cho phép xác định hình ảnh nào sẽ được hiển thị bên trong điều khiển Image. Bao gồm tên tập tin hình ảnh và cả đường dẫn nếu có. o Stretch: Khi giá trị của thuộc tính này là TRUE thì điều khiển Image sẽ tự động thay đổi kích thước cho phù hợp với hình ảnh được hiển thị. c. Sự kiện: o Mouse Down: Xảy ra khi người sử dụng chương trình nhấn giữ phím chuột. o Mouse Move: Xảy ra khi người sử dụng chương trình di chuyển chuột. o Mouse Up: Xảy ra khi người sử dụng chương trình thả phím chuột.

II.5.3 Điều khiển hình dạng (Shape)

Điều khiển Shape dùng để vẽ các hình dạng như: hình chữ nhật, hình vuông, oval, hình tròn, hình chữ nhật góc tròn hoặc hình vuông góc tròn. Thuộc tính Shape cho phép người dùng chọn 1 trong 6 dạng như đã nêu ở trên. Sau đây là bảng giá trị của thuộc tính này

Page 75: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 53

Hình dạng Giá trị Hằng Rectangle 0 vbShapeRectangle Square 1 vbShapeSquare Oval 2 vbShapeOval Circle 3 vbShapeCircle Rounded Rectangle 4 vbShapeRoundedRectangleRounded Square 5 vbShapeRoundedSquare

Người dùng có thể sử dụng các thuộc tính như BorderColor, BorderStyle, BorderWidth để xác định màu, dạng cũng như độ dày của đường biên. BackStyle dùng đễ xác định đặc hay không.

II.5.4 Điều khiển Line

Điều khiển Line dùng để vẽ các đường thẳng trong quá trình thiết kế giao diện.

II.6 Các phép biến đổi trong đồ họa 2 chiều Có hai quan điểm về phép biến đổi hình học, đó là : - Biến đổi đối tượng : thay đổi tọa độ của các điểm mô tả đối tượng theo một qui tắc nào đó. - Biến đổi hệ tọa độ : Tạo ra một hệ tọa độ mới và tất cả các điểm mô tả đối tượng sẽ được chuyển về hệ tọa độ mới. Các phép biến đổi hình học cơ sở là: tịnh tiến, quay, biến đổi tỉ lệ. Phép biến đổi Affine hai chiều (gọi tắt là phép biến đổi) là một ánh xạ T biến đổi điểm P(P

x, P

y) thành điểm Q(Q

x, Q

y) theo hệ phương trình sau:

⎩⎨⎧

++=++=

yyxy

xyxx

trdPbPQtrcPaPQ

Hay trMPQtrtrdcba

PPQQ yxyxyx +=⇒++⎟⎟⎠

⎞⎜⎜⎝

⎛= .),(),(

II.5.1 Phép tịnh tiến

Dùng để dịch chuyển đối tượng từ vị trì này sang vị trí khác.

Nếu gọi tr

x và tr

y lần lượt là độ dời theo trục hoành và trục tung thì tọa độ điểm mới Q(x',

y') sau khi tịnh tiến điểm P(x,y) sẽ là :

⎩⎨⎧

+=+=

y

x

tryytrxx

''

(trx, tr

y) được gọi là vector tịnh tiến hay vector độ dời.

Page 76: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 54

Hay ),(;1001

;. yx trtrtrMtrMPQ =⎟⎟⎠

⎞⎜⎜⎝

⎛=+=

II.5.2 Phép biến đổi tỷ lệ

Phép biến đổi tỉ lệ làm thay đổi kích thước đối tượng. Để co hay giãn tọa độ của một điểm P(x,y) theo trục hoành và trục tung lần lượt là S

x và S

y (gọi là các hệ số tỉ lệ), ta nhân S

x và

Sy lần lượt cho các tọa độ của P.

⎩⎨⎧

==

y

x

SyySxx.'.'

- Khi các giá trị Sx , S

y nhỏ hơn 1, phép biển đổi sẽ thu nhỏ đối tượng. Ngược lại, khi các

giá trị này lớn hơn 1, phép biến đổi sẽ phóng lớn đối tượng. - Khi S

x = S

y , người ta gọi đó là phép đồng dạng (uniform scaling). Đây là phép biến đổi

bảo toàn tính cân xứng của đối tượng. Ta gọi là phép phóng đại nếu |S|>1 và là phép thu nhỏ nếu |S|<1. - Nếu hai hệ số tỉ lệ khác nhau thì ta gọi là phép không đồng dạng. Trong trường hợp hoặc S

x hoặc S

y có giá trị 1, ta gọi đó là phép căng (strain).

II.5.3 Phép quay

Phép quay làm thay đổi hướng của đối tượng. Một phép quay đòi hỏi phải có tâm quay, góc quay. Góc quay dương thường được qui ước là chiếu ngược chiều kim đồng hồ. • Phép quay quanh gốc tọa độ Ta có công thức biến đổi của phép quay điểm P(x,y) quanh gốc tọa độ góc θ:

⎩⎨⎧

+==

y.cos x.sin' y.sin - x.cos'θθθθ

yx

• Phép quay quanh một điểm bất kỳ

Page 77: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 55

Xét điểm P(Px,Py) quay quanh điểm V(Vx, Vy) một góc θ đến điểm Q(Qx,Qy). Ta có thể xem phép quay quanh tâm V được kết hợp từ phép các biến đổi cơ bản sau:

- Phép tịnh tiến (-Vx, -Vy) để dịch chuyển tâm quay về gốc tọa độ. - Quay quanh gốc tọa độ O một góc θ. - Phép tịnh tiến (+Vx, +Vy) để đưa tâm quay về vị trí ban đầu

Ta cần xác định tọa độ của điểm Q. - Từ phép tịnh tiến (-Vx,-Vy) biến đổi điểm P thành P' ta được:

P' = P + V hay ⎩⎨⎧

−=−=

yyy

xxx

VPPVPP

''

- Phép quay quanh gốc tọa độ biến đổi điểm P' thành Q'

Q' = P'.M hay ⎪⎩

⎪⎨⎧

+==

.cosP .sinP' .sinP - .cosP'

'y

'x

'y

'x

θθθθ

y

x

QQ

- Phép tịnh tiến (+Vx, +Vy) biến đổi điểm Q' thành Q ta được

Q = Q' + V hay ⎪⎩

⎪⎨⎧

+=+=

yyy

xxx

VQQVQQ

'

'

⎩⎨⎧

+−+−=+−−−=

yyyxxy

xyyxxx

VVPVPQVVPVPQ

θθθθ

cos)(sin)(sin)(cos)(

⎩⎨⎧

−+−+=+−+−=

)cos1(sincossinsin)cos1(sincosθθθθθθθθ

yxyxy

yxyxx

VVPPQVVPPQ

Vậy

))cos1(sin,sin)cos1((;cossinsincos

;. θθθθθθθθ

−+−+−=⎟⎟⎠

⎞⎜⎜⎝

⎛−

=+= yxyx VVVVtrMtrMPQ

II.5.4 Phép đối xứng trục

Phép đối xứng trục có thể xem là phép quay quanh trục đối xứng một góc 1800.

Phương trình ban đầu :

⎩⎨⎧

++=++=

yyxy

xyxx

trdPbPQtrcPaPQ

hay ),(),(),( yxyxyx trtrdcba

PPQQ +⎟⎟⎠

⎞⎜⎜⎝

⎛=

Trục đối xứng là trục hoành :

⎟⎟⎠

⎞⎜⎜⎝

⎛−

=10

01M Ta có :

⎩⎨⎧

−==

yy

xx

PQPQ

Tương tự trục đối xứng là trục tung :

⎟⎟⎠

⎞⎜⎜⎝

⎛−=

1001

M Ta có : ⎩⎨⎧

=−=

yy

xx

PQPQ

II.5.5 Phép biến dạng

Phép biến đổi biến dạng làm thay đổi, méo mó hình dạng của các đối tượng. - Biến dạng theo phương trục x sẽ làm thay đổi hoành độ còn tung độ giữ nguyên. Ví dụ : biến đổi điểm P(P.x, P.y) thành điểm Q(Q.x, Q.y) theo phương trục x là phép biến đổi được biểu diễn bởi phương trình sau :

Page 78: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 56

⎩⎨⎧

=+=

yy

yxx

PQPhPQ .

⎟⎟⎠

⎞⎜⎜⎝

⎛=

101

hM

- Biến dạng theo phương trục y sẽ làm thay đổi tung độ còn hoành độ giữ nguyên.

⎩⎨⎧

+==

yxy

xx

PPgQPQ

. ⎟⎟

⎞⎜⎜⎝

⎛=

101 g

M

II.5.6 Phép biến đổi ngược

Phép biến đổi ngược dùng để undo một phép biến đổi đã thực hiện. Gọi Q là ảnh của P qua phép biến đổi T có ma trận biến đổi M. Phép biến đổi ngược T-1

sẽ có ma trận biến đổi là M-1 là ma trận nghịch đảo của ma trận M.

Nếu ⎟⎟⎠

⎞⎜⎜⎝

⎛=

dcba

M thì ⎟⎟⎠

⎞⎜⎜⎝

⎛−

−−

=−

acbd

bcadM 11

Ta có:

Phép tịnh tiến ⎟⎟⎠

⎞⎜⎜⎝

⎛=

1001

M thì ⎟⎟⎠

⎞⎜⎜⎝

⎛=−

10011M

Phép quay ⎟⎟⎠

⎞⎜⎜⎝

⎛−

=θθθθ

cossinsincos

M thì ⎟⎟⎠

⎞⎜⎜⎝

⎛ −=−

θθθθ

cossinsincos1M

Phép biến đổi tỷ lệ ⎟⎟⎠

⎞⎜⎜⎝

⎛=

y

x

SS

M0

0thì

⎟⎟⎟⎟

⎜⎜⎜⎜

=−

y

x

S

SM 10

011

Phép biến dạng ⎟⎟⎠

⎞⎜⎜⎝

⎛=

11h

gM thì ⎟⎟

⎞⎜⎜⎝

⎛−

−=−

111

hg

M

II.5.7 Một số tính chất của phép biến đổi

- Bảo toàn đường thẳng : ảnh của đường thẳng qua phép biến đổi là đường thẳng. Ví dụ : Để biến đổi một đoạn thẳng qua hai điểm A và B, chỉ cần thực hiện phép biến đổi cho A và B. Do vậy, để biến đổi một đa giác, chỉ cần thực hiện phép biến đổi đối với các đỉnh của đa giác. - Bảo toàn tính song song : ảnh của hai đường thẳng song song là song song. Ví dụ : ảnh của hình vuông, hình chữ nhật, hình bình hành, hình thoi sau phép biến đổi là hình bình hành. - Bảo toàn tỉ lệ khoảng cách : Nếu điểm M chia đoạn AB theo tỉ số m thì ảnh của M là M' cũng chia đoạn A’B’ theo tỉ số m. Ví dụ : Trong hình vuông, các đường chéo cắt nhau tại trung điểm của mỗi đường nên các đường chéo của bất kỳ hình bình hành nào cũng cắy nhau tại trung điểm của mỗi đường. Trong tam giác đều, giao điểm của 3 đường trung tuyến chia mỗi đường theo tỉ số 1:2. Do ảnh của tam giác đều qua phép biến đổi là một tam giác nên giao điểm của các đường trung tuyến trong một tam giác cũng sẽ chia chúng theo tỉ lệ 1:2.

Page 79: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 57

CHƯƠNG III LÀM VIỆC VỚI AutoCAD/Excel

Mục tiêu: Chương này giới thiệu cơ bản về lập trình cấu kiện. Cách thức làm việc với AutoCAD và Excel trong Visual Basic. Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau:

- Hiểu khái niệm COM, sử dụng các đối tượng COM. - Kết nối VB với AutoCAD, Excel - Thao tác cơ bản với AutoCAD, Excel trong VB

Kiến thức có liên quan: - Các cấu trúc lập trình trong VB.

III.1 Tổng quan về Component Object Model (COM)

III.1.1 Khái niệm cơ bản về COM COM (Mô hình đối tượng thành phần hay mô hình cấu kiện phần mềm) được tạo ra với mục đích định nghĩa một chuẩn độc lập, phân tán và hướng đối tượng nhằm mục đích tạo ra các cấu kiện phần mềm hoàn chỉnh có thể tương tác được với nhau. Các cấu kiện tương tác với nhau thông qua giao diện COM. Trong một hệ thống COM, các cấu kiện phần mềm hay các khối phần mềm gọi là các COM Object (đối tượng COM). Các đối tượng này đóng vai trò như là các thư viện trong lập trình COM. Vì là chuẩn nhị phân nên COM cho phép các COM Ọbject có thể kết nối với nhau mà không phụ thuộc vào ngôn ngữ lập trình. Như vậy, việc tạo ra COM cho phép tạo ra các gói phần mềm hoàn thiện- được lập trình từ các ngôn ngữ khác nhau có thể được tích hợp vào trong cùng một hệ thống. Đồng thời, giao thức kết nối của COM còn cho phép phân tán tức là các cấu kiện phần mềm có thể được đặt ở các nơi khác nhau có thể tương tác, làm việc với nhau. COM là công nghệ nền tảng cho mô hình nhúng-lắp ghép các thành phần (Microsoft OLE – compound documents) và mô hình tương tác các thành phần trên Internet (ActiveX® - Internet enabled components).

Page 80: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 58

III.1.2 Cấu trúc cơ bản của một COM Object

Cấu trúc cơ bản của một COM Object bao gồm các giao diện COM và các lớp thực thi giao diện. Trong cấu trúc COM có sự tách biệt giữa phần giao diện và phần thực thi. Điều này cho phép việc sử dụng các thư viện COM rất dễ dàng: việc sử dụng các thư viện thông qua các giao diện, người sử dụng không cần quan tâm tới sự phức tạp của cơ chế thực thi bên trong.

III.1.3 Các dạng đối tượng COM Trong lập trình COM, các cấu kiện phần mềm được sử dụng như những thư viện. Khi một ứng dụng sử dụng thư viện COM nhằm thực hiện một chức năng nào đó (mà thư viện COM có khả năng đáp ứng, nó kết nối với COM Object thông qua việc gửi thông điệp (yêu cầu thực hiện chức năng) tới giao diện COM. Các yêu cầu thực hiện sẽ được đáp ứng thông qua việc thực thi các phương thức của các lớp bên trong đối tượng COM (lớp thực thi). Như vậy trình ứng dụng làm việc như các ứng dụng khách (Client Application), các COM Object làm việc như các ứng dụng chủ (Server Application) • ActiveX Control Các ActiveX Control được tạo ra và được sử dụng như một thành phần điều khiển của giao diện người dùng. Các ActiveX Control chính là các thành phần điều khiển mở rộng.

• In Process

Client App

ActiveX Container

COM Object (Server.ocx)

Class B

Class A

Class C

COM Object Interface 1

Interface 2

Interface 3 Interface 4

Page 81: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 59

Các đối tượng COM được sử dụng như các thư viện liên kết động (.DLL). Khi một chương trình sử dụng thư viện COM, thư viện đó sẽ được nạp và chạy trong tuyến trình (process) của ứng dụng (Server chạy trong cùng tuyến trình với Client).

• Out of Process Các đối tượng COM hoạt động như các ứng dụng độc lập (.EXE) trong một tuyến trình riêng với tuyến trình của ứng dụng khách. (Server chạy khác tuyến trình với Client). Các thư viện COM có thể hoạt động trong cùng một hệ thống với ứng dụng chủ (khi đó các ứng dụng COM được gọi là Local Server Application) hoặc nằm ở một hệ thống khác (khi đó các ứng dụng COM được gọi là Remote Server Application). Ví dụ: Đối tượng AutoCAD, MS Excel được tham chiếu trong VB là dạng Out of Process.

III.1.4 Quản lý các đối tượng COM trong hệ thống Để một thư viện COM hoạt động trong một hệ thống, nó phải được đăng ký và quản lý trong registry của hệ thống đó bằng CLSID (Class Identifier). Thông qua CLSID, các ứng dụng khách có thể xác định và nạp các mã thực thi trong thư viện COM - ứng dụng chủ. Trong Windows, việc đăng ký các ứng dụng COM có thể được thực hiện bằng chương trình regsvr32.exe (thường nằm trong thư mục “C:\WINDOWS\system32”).

Usage: regsvr32 [/u][/s][/n][/i[:cmdline]] dllname /u – Unregister server /s – Silent display no message boxes /i – Call DllInstall passing it an optional [cmdline]; when used with /u calls dll uninstall /n – do not call DllRegisterServer, this option must be used with /i

COM Object

(Server.EXE)

Client App

Client App

COM Object

(Server.dll)

Page 82: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 60

Với đối tượng COM của AutoCAD và Excel thì trong quá trình cài đặt đã được tự động đăng ký với registry. Vậy nên ta chỉ việc tham chiếu và sử dụng.

III.1.5 Sử dụng các đối tượng COM Sau khi đăng ký với hệ thống, lập trình sử dụng thư viện COM theo các bước sau:

• Tham chiếu tới thư viện COM đã đăng ký • Viết mã lệnh kết nối với thư viện đã tham chiếu.

Có 2 hình thức kết nối: Kết nối sớm (early – binding): chương trình đã biết kiểu đối tượng trước khi kết nối (link). Ưu điểm của kết nối sớm là kiểu dữ liệu được kiểm tra chặt chẽ, tốc độ chạy của chương trình cao.Tuy nhiên khi đối tượng liên kết bị thay đổi (ví dụ một phiên bản khác của thư viện), chương trình có thể không thực thi. Ví dụ: Dim obj as clsBeam ‘kiểu của đối tượng obj là clsBeam obj = New clsBeam ‘hoặc obj = CreateObject (“MyCOMApp.clsBeam”)

Kết nối muộn (late – binding): chương trình chưa biết kiểu đối tượng trước khi kết nối (link). Với kiểu kết nối này, kiểu dữ liệu không không được kiểm tra chặt chẽ, tốc độ chạy thấp nhưng chương trình vẫn có thể thực thi khi đối tượng liên kết bị thay đổi. Dim obj as Object ‘kiểu của đối tượng obj chưa rõ ràng obj = New clsBeam ‘ hoặc obj = CreateObject (“MyCOMApp.clsBeam”) ‘kiểu của đối tượng chỉ được xác định khi liên kết.

III.2 Làm việc với AutoCAD

III.2.1 Hệ thống các đối tượng trong AutoCAD

III.2.2 Kết nối VB với AutoCAD Tham chiếu đối tượng AutoCAD vào dự án VB. Project | References | AutoCAD xxxx Object Library (xxxx là phiên bản của AutoCad được cài trên máy).

Khởi tạo ứng dụng AutoCAD:

Page 83: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 61

Dim AcadApp As AutoCAD.AcadApplication Set AcadApp = CreateObject("AutoCAD.Application") AcadApp.Application.Visible = True

hoặc Dim AcadApp As AutoCAD.AcadApplication Set AcadApp = new AutoCAD.AcadApplication AcadApp.Application.Visible = True

Ứng dụng AutoCAD được tạo có tên là AcadApp Thuộc tính Visible xác định ứng dụng AutoCAD có được ẩn đi hay không. Mở File CAD

Dim acadDoc As AutoCAD.AcadDocument Set acadDoc = AcadApp.Documents.Open(“đường dẫn file bản vẽ”)

Nếu không mở bản vẽ, mặc định sẽ có một bản vẽ trắng trong AutoCAD với tên là Drawing1.dwg Thêm bản vẽ

Dim BanVe1 As AutoCAD.AcadDocument Set BanVe1 = AcadApp.Documents.Add([“Tên bản vẽ mẫu”])

Đóng bản vẽ

acadDoc.Close True 'file cần lưu trước khi đóng acadDoc.Close False 'Đóng không lưu file

Lưu bản vẽ

acadDoc.SaveAs(“Tên file và đường dẫn”, [Định dạng]) Đóng ứng dụng AutoCad

AcadApp.Quit ‘Giải phóng bộ nhớ Set AcadApp = Nothing Set acadDoc = Nothing

III.2.3 Một số phương thức cơ bản

III.2.4 Ví dụ minh họa

III.3 Làm việc với Microsoft Excel

III.3.1 Hệ thống các đối tượng trong Excel Để tạo cái nhìn tổng quan cho người lập trình, Microsoft cung cấp cho người lập trình mô hình đối tượng sử dụng trong Microsfot Excel. Mô hình đối tượng đầy đủ được trình bày

Page 84: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 62

trong vài liệu hướng dẫn của Excel. Ở đây xin được giới thiệu lại mô hình đối tượng sơ lược với một số đối tượng thường được sử dụng trong lập trình mở rộng Excel.

III.3.2 Kết nối VB với MS Excel Tham chiếu đối tượng Excel vào dự án VB. Project | References | Microsoft Excel xx Object Library (xx là phiên bản của Excel được cài trên máy).

Khởi tạo ứng dụng Excel:

Dim ExcelApp As Excel.Application Set ExcelApp = CreateObject("Excel.Application")

Rows

Application

Columns

Workbooks

Worksheets

Workbook

Worksheet

Range

Cells

Chú giải:

Tập đối tượng

Đối tượng

Page 85: Tin hoc xay dung beta

Bài giảng Tin học Xây dựng

Bộ môn Tự động hóa Thiết kế Cầu đường Page 63

ExcelApp.Application.Visible = True hoặc

Dim ExcelApp As Excel.AcadApplication Set ExcelApp = new Excel.AcadApplication ExcelApp.Application.Visible = True

Ứng dụng Excel được tạo có tên là ExcelApp Thuộc tính Visible xác định ứng dụng Excel có được ẩn đi hay không. Mở tài liệu Excel (workbook)

Dim eWorkbook As ExcelApp.Workbook Set eWorkbook = ExcelApp.Workbooks.Open(“đường dẫn file bản vẽ”)

Nếu không mở tài liệu , mặc định sẽ có một workbook trắng với tên là Book1. Thêm tài liệu mới

Dim BangTinh1 As ExcelApp.Workbook Set BangTinh1 = ExcelApp.Workbooks.Add([“Tên bảng tính mẫu”])

Đóng tài liệu

eWorkbook.Close True ' file cần lưu trước khi đóng eWorkbook.Close False 'Đóng không lưu file

Lưu tài liệu

eWorkbook.SaveAs(“Tên file và đường dẫn”) Thêm bảng tính (worksheet)

Dim SheetN As ExcelApp.Worksheet Set SheetN = ExcelApp.Worksheets.Add([“Tên bảng tính mẫu”]) SheetN.Name =”Bang tinh moi”

Đóng ứng dụng Excel

ExcelApp.Quit ‘Giải phóng bộ nhớ Set ExcelApp = Nothing Set eWorkbook = Nothing

III.3.2 Một số phương thức cơ bản

III.3.3 Ví dụ minh họa