Môn tin học đại cương - Phần 5

Môn tin học đại cương - Phần 5

Thể loại: Tin học văn phòng
Lượt xem: 28,590Lượt tải: 3Số trang: 27

Mô tả tài liệu

Một chương trình thường cung cấp nhiều chức năng cho người dùng ⇒ Chương trình thường là 1 hệ thống phức tạp. Để dễ quản lý và xây dựng chương trình, người ta thường chia nó ra nhiều đơn vị nhỏ hơn. Hiện có 2 phương pháp chia nhỏ chương trình : phương pháp có cấu trúc : chương trình được chia nhỏ thành nhiều module chức năng, mỗi module chứa nhiều điểm nhập (entry), mỗi điểm nhập cung cấp 1 dịch vụ (chức năng) rõ ràng, đơn giản nào đó. ...

Tóm tắt nội dung

1 Khoa Công nghệ Thông ĐH Bách Khoa : Tin 218 MÔN TIN 9 ĐỊNH NGHĨA THỦ TỤC & SỬ 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 219 Nhắc lại cấu trúc tổ chức 1 chương trình Một chương trình thường cung cấp nhiều chức năng cho người dùng ⇒ Chương trình thường là 1 hệ thống phức tạp. Để dễ quản lý và xây trình, người ta thường chia nó ra nhiều đơn vị nhỏ hơn. Hiện có 2 phương pháp chia nhỏ chương trình : phương pháp có cấu trúc : chương trình được chia nhỏ thành chức năng, mỗi module chứa nhiều điểm nhập (entry), mỗi điểm nhập cung cấp 1 dịch vụ (chức năng) rõ ràng, đơn giản nào đó. Ta gọi mỗi điểm nhập là thủ tục thực hiện chức năng tương pháp hướng đối tượng : chương trình được chia nhỏ đối tượng, mỗi đối tượng chứa nhiều điểm nhập (entry), mỗi điểm nhập cung cấp 1 dịch vụ (chức năng) rõ ràng, đơn giản nào đó. Ta gọi mỗi điểm nhập là thủ tục thực hiện chức năng tương ứng. Tóm lại, dù dùng phương pháp chia nhỏ chương trình nào thì đơn vị chức năng nhỏ nhất mà người lập trình có thể xây dựng và dùng (gọi) lại nhiều lần trong chương trình là thủ 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 220 Phân loại thủ tục trong VB Nếu ta phân tích chương trình theo cấu trúc thì chương trình VB là tập module, trong mỗi module ta có thể định nghĩa n thủ tục khác 1 trong 2 dạng : thủ tục - Sub : 1 đoạn lệnh thực thi VB để thực hiện 1 chức năng rõ ràng, đơn giản nhưng không trả về giá trị kèm theo tên thủ tục. hàm - Function : 1 đoạn lệnh thực thi VB để thực hiện 1 chức năng rõ ràng, đơn giản và trả về giá trị kèm theo tên hàm. Nếu ta phân tích chương trình theo hướng đối tượng thì chương trình VB là tập các form hay class module, trong mỗi module ta có thể định nghĩa n thủ tục khác nhau thuộc 1 trong 3 dạng : thủ tục - Sub : 1 đoạn lệnh thực thi VB để thực hiện 1 chức năng rõ ràng, đơn giản nhưng không trả về giá trị kèm theo tên thủ tục. hàm - Function : 1 đoạn lệnh thực thi VB để thực hiện 1 chức năng rõ ràng, đơn giản và trả về giá trị kèm theo tên hàm. truy xuất thuộc tính - Property : 1 đoạn lệnh thực thi VB để đọc/ghi 1 tương ứng của đối tượng. Có 3 thủ tục loại này là Get, Set và 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 221 Tầm vực sử dụng thủ tục trong VB Trong mỗi standard module, ta có thể xác định tầm vực sử dụng của từng thủ tục : cục bộ trong module : dùng từ khóa Private trong lệnh định nghĩa thủ tục. toàn cục trong chương trình : dùng từ khóa Public trong lệnh định nghĩa mỗi form hay class module, ta có thể xác định tầm vực sử dụng của từng thủ tục : cục bộ trong module (đối tượng) : dùng từ khóa Private trong lệnh định nghĩa thủ tục. cục bộ trong Project : dùng từ khóa Friend trong lệnh định nghĩa thủ tục. công cộng (ai dùng cũng được) : dùng từ khóa Public trong lệnh định nghĩa thủ tục. Các thủ tục công cộng của đối tượng được gọi là method để phân biệt với nguyên tắc, các thủ tục Property Get, Set và Let đều phải có tầm vực công cộng (dùng từ khóa 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 222 Cú pháp định nghĩa hàm - pháp để định nghĩa 1 hàm : [Public | Private | Friend] [Static] Function name [As = Function] = từ khóa Public để định nghĩa hàm có tầm vực toàn cục, nghĩa là bất kỳ lệnh nào của chương trình đều có thể gọi hàm từ khóa Friend để định nghĩa method thuộc 1 class module nhưng chỉ có tầm vực cục bộ trong Project, nghĩa là chỉ có các lệnh trong mới có thể gởi thông điệp đến hàm Friend của đối tượng đó, còn các lệnh ở ngoài Project thì không thấy hàm Friend của đối tượng 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 223 Cú pháp định nghĩa hàm - Function (tt) Dùng từ khóa Private để định nghĩa hàm có tầm vực cục bộ nghĩa là chỉ có các lệnh trong cùng module mới có thể gọi trong module tương ứng. Dùng từ khóa Static để định nghĩa các biến cục bộ trong hàm đều nghĩa là giá trị của chúng vẫn tồn tại qua các lần gọi khác nhau đến hàm là danh sách các lệnh định nghĩa biến, hằng, kiểu cục bộ trong function và các lệnh thực thi miêu tả chính xác chức năng gán name = cho phép gán giá trị trả về cho lệnh Exit Function cho phép trả ngay điều khiển về lệnh gọi hàm này (thay vì thực thi tiếp các lệnh còn lại của 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 224 Cú pháp định nghĩa hàm - Function là danh sách các tham số hình thức, mỗi tham số được cách nhau bởi dấu ',' và được định nghĩa theo cú pháp như sau [ByVal | ByRef] varname[( )] [As type] từ khóa Optional để khai báo rằng tham số tương ứng là nhiệm ý trong lúc gọi hàm : truyền hay không cũng được. Trong trường hợp này ta nên dùng thêm thành phần [= để xác định giá trị nhiệm ý. Dùng từ khóa ByRef để khai báo việc truyền tham số bằng tham khảo, đây là chế độ truyền tham số nhiệm ý. Ngược lại dùng từ khóa ByVal để khai báo cơ chế truyền tham số bằng giá trị. Chỉ có thể dùng từ khóa cho tham số cuối trong danh sách tham số, tham số này cho phép ta truyền bao nhiêu tham số cụ thể 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 225 Thí dụ định nghĩa hàm Đoạn code sau định nghĩa hàm tính n! giai thừa theo giải thuật đệ qui : Public Function n As Long) As Long If n <= 0 Then ' nếu n <=0 thì trả về = -1 Exit If If n = 1 Then ' nếu n = 1 thì trả về kết quả là = 1 Exit If ' Nếu n > 1 thì tính theo công thức n! = n * = n * - 1) End 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 226 Cú pháp định nghĩa thủ tục - Sub Cú pháp để định nghĩa 1 thủ tục Sub | Public | Friend] [Static] Sub name Sub Ý nghĩa của các từ khóa Public, Private, Friend, Static cũng như các thành phần arglist, Exit Sub, giống y như trong việc hàm mà chúng ta đã giới thiệu ở những slide trước. Sự khác biệt giữa hàm và thủ tục là hàm luôn trả về giá trị kết hợp với tên hàm, còn thủ tục thì không trả về trị kết hợp với tên thủ tục (nhưng nó vẫn có thể trả kết quả về thông qua các tham số truyền bằng quan sát kỹ, ta thấy các hàm xử lý sự kiện cho các đối tượng giao diện đều là Sub, chứ không phải là Function, do đó từ đây ta dùng đoạn câu "thủ tục xử lý sự kiện" thay cho "hàm xử lý sự 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 227 Cú pháp định nghĩa method Get thuộc tính đối tượng Cú pháp để định nghĩa 1 method Get : [Public | Private | Friend] [Static] Property Get name = Property] = nghĩa của các từ khóa Public, Private, Friend, Static cũng như các thành phần arglist, Exit Property, [name = giống y như trong lệnh định nghĩa hàm mà chúng ta đã giới thiệu ở những slide Get cho phép bên ngoài có thể đọc giá trị của 1 thuộc tính bên trong đối tượng nhưng dưới sự kiểm soát của đối tượng 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 228 Cú pháp định nghĩa method Let thuộc tính đối tượng Cú pháp để định nghĩa 1 method Let : [Public | Private | Friend] [Static] Property Let name Property] nghĩa của các từ khóa Public, Private, Friend, Static cũng như các thành phần arglist, Exit Property, giống y như trong lệnh định nghĩa hàm mà chúng ta đã giới thiệu ở những slide Let cho phép bên ngoài có thể gán giá trị mới cho 1 thuộc tính bên trong đối tượng nhưng dưới sự kiểm soát của đối tượng 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 229 Cú pháp định nghĩa method Set thuộc tính đối tượng Cú pháp để định nghĩa 1 method Set : [Public | Private | Friend] [Static] Property Set name Property] nghĩa của các từ khóa Public, Private, Friend, Static cũng như các thành phần arglist, Exit Property, giống y như trong lệnh định nghĩa hàm mà chúng ta đã giới thiệu ở những slide Set cho phép bên ngoài có thể gán tham khảo cho 1 thuộc tính bên trong đối tượng nhưng dưới sự kiểm soát của đối tượng đó. Sự khác biệt giữa method Let và Set là Let gán giá trị thuộc 1 kiểu cổ điển, còn Set gán tham khảo vào 1 thuộc tính có kiểu là class đối 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 230 Gọi thủ tục Sau khi thủ tục đã được định nghĩa, ta có thể sử dụng (gọi) nó nhờ lệnh gọi thủ tục. Cú pháp gọi thủ tục đã được miêu tả trong slide 216 Do Function là dạng thủ tục có trả về kết quả kết hợp với tên hàm nên lệnh gọi hàm thường được dùng trong 1 biểu thức (lệnh gọi hàm là biểu thức cơ bản để cấu thành biểu thức phức tạp hơn). Thí dụ, giả sử ta đã định nghĩa hàm tính n! tên là thì ta có thể gọi nó như sau : n = 8 MsgBox (n & "! = " & dụ, giả sử ta đã định nghĩa thủ tục hoán vị 2 số nguyên tên thì ta có thể gọi nó như sau : n = 8 m = 4 Call Hoanvi (n,m) ' hoặc Hoanvi n,m ' Lúc này n = 8 và m = 4 Chương 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 231 Cơ chế truyền tham số Các tham số trong lệnh định nghĩa thủ tục được gọi là tham số Các tham số (thường là biểu thức) trong lệnh gọi thủ tục được gọi là tham số thực. Nguyên tắc gọi thủ tục là : số lượng các tham số thực phải bằng số lượng các tham số kiểu của từng tham số thực trong lệnh gọi thủ tục phải tương thích) với kiểu của tham số hình thức tương ứng trong lệnh định nghĩa thủ gọi thủ tục sẽ truyền tham số thực trong lệnh gọi cho thủ tục rồi khởi động thủ tục chạy để xử lý tham số thực vừa nhận được. Theo thủ tục sẽ được gọi nhiều lần, mỗi lần với danh sách tham số thực cụ thể. Có 2 cơ chế truyền tham số cho thủ tục tại thời điểm gọi thủ tục : trị (nội dung của tham số) hay truyền tham khảo (địa chỉ - vị trí bộ nhớ của tham số). Mỗi cơ chế truyền tham số có tính chất riêng mà ta sẽ trình bày kỹ trong các slide kế tiếp : Chương 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 232 Cơ chế truyền tham số từ khóa ByVal kết hợp với tham số hình thức để khai báo nó bằng giá trị. Khi gọi thủ tục, giá trị của tham số thực sẽ cho thủ tục cần thực thi. Nhờ cách truyền tham số này mà thủ tục cần thực thi sẽ không thể truy xuất dữ liệu của thủ tục gọi. Tuy truyền bằng giá trị chỉ thích hợp cho các tham số IN (truyền từ phần tử gọi đến thủ tục cần gọi) có kiểu vô hướng truyền hiệu quả tham số có nội dung chiếm nhiều ô nhớ hay để nhận kết quả ta sẽ phải dùng cơ chế truyền bằng tham khảo (địa chỉ). Để tham số hình thức được truyền bằng tham khảo, ta dùng từ kết hợp với tham số hình thức đó. Khi gọi thủ tục, địa chỉ của tham số thực sẽ được truyền cho thủ tục cần thực thi. Với đặc điểm này, tham số thực phải là biến chứ không thể là biểu thức. Lưu ý rằng nếu ta không dùng từ khóa ByRef hay ByVal kết hợp với tham số hình thức thì default nó được truyền bằng tham 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 233 // version truyền bằng giá Sub x As Integer, ByVal y As tmp As = x x = y y = tmp End Sub // version truyền bằng tham Sub x As Integer, ByRef y As tmp As = x x = y y = tmp End Sub // version truyền bằng tham Sub Hoanvi3(x As Integer, y As tmp As = x x = y y = tmp End Sub Cơ chế truyền tham số 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 234 Hãy khảo sát kỹ 3 thủ tục hoán vị dữ liệu trong slide trước. Bây giờ hãy chú ý tới việc sử dụng chúng và kết quả đạt được intN As intM As = 4 intM = 8 Call intM) ' kết quả intN = 4 và intM = 8 (không đổi) Call intM) ' kết quả intN = 8 và intM = 4 (đã hoán vị intM) ' kết quả intN = 4 và intM = 8 (đã hoán vị chế truyền tham số 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 235 Các thủ tục định sẵn của VB Về nguyên tắc, người lập trình phải định nghĩa thủ tục (Sub, Function, trước khi có thể sử dụng lại (gọi) nó. Tuy nhiên, VB đã rất nhiều thủ tục dạng Sub, Function để thực hiện các chức năng rất phổ biến, người lập trình có thể gọi chúng bất cứ khi nào cần thiết. Ta gọi các thủ tục này là các thủ tục định sẵn của VB. Nếu chưa đòi hỏi độ chính xác cao, người ta còn gọi các thủ tục định sẵn của VB là các lệnh thực thi. Sau đây ta chúng ta hãy làm quen với 1 số thủ tục thường 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 236 Hàm hiển thị form thông báo Cú pháp [, buttons] [, title] [, helpfile, đó : prompt là biểu thức chuỗi miêu tả thông báo cần hiển là biểu thức số miêu tả số lượng và loại button được hiển thị trong thông báo, nhiệm ý là 0 nghĩa là chỉ có button Ok được hiển là biểu thức chuỗi miêu tả title bar của form thông là biểu thức chuỗi miêu tả đường dẫn file Help được dùng với form thông báo (theo cơ chế là biểu thức số miêu tả chỉ số của "topic" cần dùng trong file để gọi dễ dàng hàm MsgBox, ta chỉ cần miêu tả tham số prompt bắt 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 237 Hàm hiển thị form nhập liệu (dạng pháp InputBox (prompt [,title] [,xpos] [,ypos] đó title, helpfile, context là các tham số với ý nghĩa y như trong hàm ypos là biểu thức số miêu tả tọa độ (x,y) của điểm trên trái của form thông báo trong màn hình. Nếu không được khai báo, form thông báo sẽ được chỉnh vị trí tự động (giữa màn là biểu thức chuỗi miêu tả giá trị default của chuỗi được để gọi dễ dàng hàm InputBox, ta chỉ cần miêu tả tham số prompt bắt 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 238 Hàm chuyển đổi kiểu VB cung cấp các hàm sau để ta có thể chuyển giá trị từ kiểu nào đó về kiểu xác định : CBool : chuyển trị của biểu thức về kiểu : chuyển trị của biểu thức về kiểu Byte CCur : chuyển trị của biểu thức về kiểu : chuyển trị của biểu thức về kiểu Date CDbl : chuyển trị của biểu thức về kiểu : chuyển trị của biểu thức về kiểu : chuyển trị của biểu thức về kiểu : chuyển trị của biểu thức về kiểu Long CSng : chuyển trị của biểu thức về kiểu : chuyển trị của biểu thức về kiểu : chuyển trị của biểu thức về kiểu 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 239 Các hàm thư viện liên kết code VB, ngoài việc gọi các thủ tục được định nghĩa trong Project và các thủ tục định sẵn, người lập trình còn có thể gọi các hàm trong các thư viện liên kết động. 1 thư viện liên kết động có dạng *.dll thường được xây dựng bằng ngôn ngữ VC++ và chứa 1 danh sách các hàm dịch vụ. Khi chương trình VB gọi 1 hàm trong file thư viện DLL, file được nạp vào bộ nhớ và hàm được liên kết vào vùng nhớ của chương trình để chương trình có thể gọi được hàm cần gọi. Các hàm thư viện DLL được sử dụng chung cho mọi phần mềm đang chạy, nghĩa là chỉ có 1 bản (copy) của hàm thư viện DLL trong bộ nhớ máy tính để phục vụ cho mọi ứng dụng gọi nó. Ta có thể coi Windows như 1 thư viện phần mềm DLL lớn, thư viện này cung cấp rất nhiều hàm dịch vụ khác nhau, người ta gọi các hàm này là các hàm API Chương trình VB có thể gọi bất kỳ hàm nào trong thư viện này theo cơ chế liên kết động như đã trình bày ở khi 1 hàm DLL được dùng trong module VB nào đó, ta cần khai báo đặc tả hàm DLL này nhờ lệnh Declare của VB với cú pháp được trình bày 153 (chương 9 : Định nghĩa thủ tục & sử Công nghệ Thông ĐH Bách Khoa : Tin 240 MÔN TIN 10 TƯƠNG TÁC GIỮA NGƯỜI DÙNG & CHƯƠNG 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 241 Tổng quát về tương tác giữa người dùng & chương lúc chương trình chạy, nó thường tương tác với người dùng. Sự tương tác gồm 2 hoạt động chính : chờ nhận dữ liệu do người dùng cung cấp hay chờ nhận lệnh của người dùng để thực thi 1 chức năng nào đó. hiển thị thông báo và/hoặc kết quả tính toán ra màn hình/máy in để người dùng biết và sử dụng. Sự tương tác giữa người dùng và máy tính được thực hiện thông qua các thiết (thiết bị I/O - như bàn để nhập dữ liệu hay lệnh, màn hình/máy in để xuất kết quả hay thông có hàng trăm hãng khác nhau chế tạo thiết bị I/O cho máy PC, mỗi hãng chế tạo rất nhiều model của cùng 1 thiết bị (thí dụ hãng HP đã chế rất máy in phun mực, máy in Mỗi model thiết bị của từng hãng có những tính chất vật lý riêng và khác với các model khác. Để giúp người lập trình truy xuất các thiết bị I/O dễ dàng, độc lập với tính chất phần cứng của thiết bị, HĐH Windows và VB đã che dấu mọi tính chất phần cứng của các thiết bị và cung cấp cho người lập trình 1 giao tiếp sử dụng duy nhất, độc lập với thiết 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 242 Kiến trúc tương tác giữa người dùng & ứng dụng 10: Tương tác giữa người dùng & chương Laser 5 Screen Object Keyboard Visual Basic dụng giao tiếp vớI các thiết bị trừu tượng thông qua tạo & quản lý các thiết bị trừu giao tiếp vớI ác device driver thiết bị Các driver giao tiếp vớI các thiết bị vật Công nghệ Thông ĐH Bách Khoa : Tin 243 Kiến trúc tương tác giữa người dùng & ứng dụng VB (tt) Xem hình vẽ của slide trước (miêu tả kiến trúc tương tác giữa người dùng & ứng dụng VB), ta thấy : cấp thấp nhất là các thiết bị phần cứng, mỗi thiết bị có tính chất riêng và khác với các thiết bị khác (ngay cả cùng loại, cùng hãng nhưng khác device driver điều khiển và giao tiếp trực tiếp với phần cứng nhưng che dấu mọi tính chất chi tiết của phần cứng, nó cung cấp cho cấp trên 1 giao tiếp sử dụng phần cứng độc lập với tính chất phần cứng đó ⇒ Mỗi model thiết bị phần cứng của 1 hãng cần có device driver HĐH xử lý các chức năng luận lý (đệm dữ liệu, xử lý sai,...) trước khi driver giao tiếp trực tiếp với phần cứng. Windows che dấu các loại phần cứng và tạo ra những thiết bị trừu tượng để ứng dụng truy xuất chúng dễ dàng và độc lập với loại thiết bị (đối tượng Printer, Screen, Mouse, tạo ra những đối tượng giao diện cao cấp và dễ dùng : mỗi đối diện (form, window, đều có thể giao tiếp trực tiếp với để nhập/xuất dữ liệu, chờ nhận sự kiện hay chủ động thông báo 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 244 Kiến trúc tương tác giữa người dùng & ứng dụng VB (tt) Sau khi đã biết kiến trúc giao tiếp I/O của ứng dụng VB, khi cần giao tiếp với người dùng, ta nên : dùng các đối tượng giao diện cao cấp (định sẵn của VB hay ActiveX 1 số trường hợp cần thiết ta sẽ dùng các đối tượng của Windows và 1 số trường hợp tối cần thiết ta mới gọi các hàm trong giao tiếp tuyệt đối không nên truy xuất trực tiếp phần cứng thiết bị I/O vì rất khó khăn, không an toàn, dễ bị tranh chấp với các ứng dụng chạy đồng tác với người dùng thông qua các đối tượng giao diện được thực hiện như sau : nhập liệu/nhận lệnh thông qua các thủ tục xử lý sự kiện của phần tử giao diện tương ứng. xuất kết quả/thông báo bằng cách gán kết quả vào thuộc tính tương ứng của đối tượng giao diện hay dùng các method vẽ đồ họa tổng 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 245 Giao tiếp với keyboard thông qua các đối tượng giao diện Mặc dù có thể có nhiều phần tử giao diện cùng được hiển thị trên màn hình tại từng thởi điểm nhưng chỉ có 1 phần tử giao diện được giao tiếp với thiết bị I/O, ta gọi phần tử giao diện này là 'active' hay được quan đến việc ấn thả 1 phím, VB sẽ tạo ra 3 sự kiện sau đây và gởi về cho phần tử được 'focus' hiện hành : sự kiện xảy ra khi người sử dụng bấm (ấn xuống) bất kỳ một phím nào trên bàn : sự kiện xảy ra khi người sử dụng thả phím vừa ấn sự kiện xảy ra khi người sử dụng ấn/thả bất kỳ một phím nào trên bàn phím mà tạo ra được 1 ký tự 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 246 Thủ tục xử lý sự kiện KeyDown, KeyUp & tục có dạng sau : Private Sub (KeyCode as Integer, Shift as Private Sub (KeyCode as Integer, Shift as đó là tên của điều khiển nhận sự kiện là mã "virtual code" của phím được là giá trị miêu tả trạng thái ấn giữ các phím điều khiển (là một dãy bit với bit 0 cho phím SHIFT, bit 1 cho phím CTRL, bit 2 cho phím tục KeyPress có dạng sau : Private Sub (KeyAscii As đó là tên của điều khiển nhận sự kiện là mã ký tự ANSI của phím được đối tượng có thủ tục xử lý biến cố riêng, thủ tục này cũng là method của đối tượng tương 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin Sub (KeyCode As Integer, Shift As AltDown, CtrlDown, = (Shift And > 0 AltDown = (Shift And > = (Shift And > 0 If KeyCode = vbKeyF2 Then ' Display key ShiftDown And CtrlDown And AltDown Then Txt = ShiftDown And AltDown Then Txt = ShiftDown And CtrlDown Then Txt = CtrlDown And AltDown Then Txt = ShiftDown Then Txt = CtrlDown Then Txt = AltDown Then Txt = SHIFT = 0 Then Txt = "F2." End = "You pressed " & Txt End If End Sub Thí dụ thủ tục xử lý biến cố KeyDown của 1 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 248 Dùng thuộc tính 1 form giao diện (hộp thoại) chứa nhiều điều khiển bên trong nó ⇒ Khi thao tác phím trên 1 điều khiển trong form thì sự kiện sẽ gởi cho điều khiển hay form ? Để qui định cụ thể điều này, VB cung cấp thuộc tính cho form, ta có thể xem/hiệu chỉnh giá trị của nó nhờ lệnh gán [= đó là tên của form liên là biểu thức luận lý có giá trị ta gán trị luận lý vào thuộc tính của form thì nếu : trị = True thì form sẽ nhận và xử lý biến cố trước rồi mới tới điều = False thì điều khiển nhận và xử lý biến cố, còn form thì 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 249 Giao tiếp với chuột thông qua các đối tượng giao tự như bàn phím, khi người dùng thao tác chuột, VB sẽ tạo ra 1 trong 5 biến cố sau đây và gởi về cho phần tử được 'focus' hiện hành : sự kiện xảy ra khi người sử dụng di chuyển : sự kiện xảy ra khi người sử dụng ấn bất kỳ nút nào trên loại chuột mà nó có 1/2/3 : sự kiện xảy ra khi người sử dụng thả nút vừa ấn ra. Click : sự kiện xảy ra khi người sử dụng ấn và thả : sự kiện xảy ra khi người sử dụng 'Click' chuột liên tục hai lần trong 1 thời gian đủ nhỏ (do người dùng qui định chung cho môi 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 250 Thủ tục xử lý sự kiện MouseDown & tục có dạng sau : Private Sub (Button As Integer, Shift As Integer, x As Single, y As Private Sub (Button As Integer, Shift As Integer, x As Single, y As đó là tên của điều khiển nhận sự kiện là giá trị miêu tả trạng thái các nút của chuột được ấn/thả (là một dãy các bit với bit 0 cho nút trái, bit 1 cho nút phải và bit 2 cho nút là giá trị miêu tả trạng thái ấn giữ các phím điều khiển (là một dãy bit với bit 0 cho phím SHIFT, bit 1 cho phím CTRL, bit 2 cho phím ALT). x, y miêu tả tọa độ (x,y) của vị trí chuột được ấn/thả trên màn 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 251 Thủ tục xử lý sự kiện tục có dạng sau : Private Sub (Button As Integer, Shift As Integer, x As Single, y As đó là tên của điều khiển nhận sự kiện là giá trị miêu tả trạng thái các nút của chuột được ấn/thả (là một dãy các bit với bit 0 cho nút trái, bit 1 cho nút phải và bit 2 cho nút là giá trị miêu tả trạng thái ấn giữ các phím điều khiển (là một dãy bit với bit 0 cho phím SHIFT, bit 1 cho phím CTRL, bit 2 cho phím ALT). x, y miêu tả tọa độ (x,y) của vị trí chuột hiện hành trên màn 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 252 Thủ tục xử lý sự kiện Click & tục có dạng sau : Private Sub () và Private Sub () trong đó là tên của điều khiển nhận sự kiện tục xử lý sự kiện Click và DblClick không có tham số để xác định vị trí ấn chuột hay nút chuột nào đã được ấn. Trong trường hợp cần các thông tin phụ này để xử lý chi li hơn, bạn nên dùng thủ tục xử lý sự kiện 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 253 ' biến qui định trạng thái vẽ/không vẽ Dim PaintNow As động thông số Sub Form_Load = 10 ' Use wider = RGB(0, 0, 255) ' Set drawing Sub (Button As Integer, Shift As Integer, X As Single, Y As = True ' Enable Sub (Button As Integer, Shift As Integer, X As Single, Y As = False ' Disable Sub (Button As Integer, Shift As Integer, X As Single, Y As PaintNow Then PSet (X, Y) ' Draw a If End Sub Thí dụ thủ tục xử lý các sự kiện 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 254 Vẽ văn bản và đồ họa lên đối tượng giao diện Các điều khiển thường chứa thuộc tính Text, Caption hay Value để cho trình truy xuất (đọc/ghi) các thuộc tính này. Tuy nhiên những đối diện phức hợp như Form, Printer có thể hiển thị nhiều nội dung chi tiết ở dạng văn bản, đồ họa hay ảnh bitmap bất kỳ. Để hiển thị các nội dung này, ta dùng các method sau của các đối tượng tương ứng : Cls : xóa toàn bộ nội dung hiển thị trước đó của đối : hiển thị 1 hay nhiều chuỗi văn bản. PSet : hiển thị 1 điểm pixel với 1 màu xác : trả về giá trị màu của 1 điểm : vẽ 1 đoạn thẳng hay 1 hộp hình chữ : cẽ 1 hình tròn, ellipse hay : vẽ 1 ảnh bitmap đã có vào đối slide còn lại diễn tả chi tiết các method trên cùng các thí dụ về việc 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 255 Thủ tục Print : xuất chuỗi ra thiết bị xuất luận lý Thủ tục có dạng sau [Spc(n) | Tab(n) | đó là tên của đối tượng nhận kết quả vẽ (Printer, Form, default là form hiện hành. Spc(n) qui định n ký tự trống được in 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 là biểu thức chuỗi hay số cần 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ế tin về font chữ phải được thiết lập trước thủ tục Print thông qua các sau của đối tượng vẽ : FontName, FontSize, thiết lập thuộc tính CurrentX, CurrentY để qui định rõ ràng vị trí in của mỗi lệnh 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 256 Thí dụ về việc dùng thủ tục code sau đây sẽ hiển thị 3 hàng văn bản trong hộp thoại About Box giữa : Const strAbout1 = "Trinh strAbout2 = "Version strAbout3 = "Written by : Nguyen Van Sub = Xác định vị trí để chuỗi strAbout1 nằm giữa hộp = - / = 40 Print Xác định vị trí để chuỗi strAbout2 nằm giữa hộp = - / = 60 Print Xác định vị trí để chuỗi strAbout3 nằm giữa hộp = - / = 80 Print 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin Format : chỉnh dạng dữ liệu trước khi in Ta thường muốn format dữ liệu số hay ngày tháng theo yêu cầu riêng trước khi in nó ra. VB hỗ trợ chức năng này thông qua hàm Format có cú pháp sau : Format đó là biểu thức số hay ngày tháng cần là chuỗi ký tự định dạng hay tên gợi nhớ miêu tả chuỗi định dạng sẵn có của VB. và qui định ngày đầu trong tuần và tuần đầu trong năm cần cho định dạng dữ liệu ngày số ký tự thường dùng trong chuỗi định dạng : 0 miêu tả vị trí ký số, nếu số không hiển thị hết vùng định đạng thì thêm số 0 trước và sau giá trị số cho đầy vùng định dạng. # miêu tả vị trí ký số, không in số 0 đi trước và sau giá trị số. . miêu tả vị trí dấu ngăn đơn vị (qui định bởi locale của miêu tả vị trí dấu ngăn đơn vị ngàn (qui định bởi + % ( ) space miêu tả chỉnh xác ký tự tương 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 258 Thí dụ về chỉnh dạng dữ liệu số : Format syntax Result 08315.40 8315.4 8,315.40 $315.40 Thí dụ về chỉnh dạng dữ liệu ngày tháng "m/d/yy") 1/27/93 "dddd, mmmm dd, yyyy") January 27, 1993 "d-mmm") 27-Jan "hh:mm AM/PM") 07:18 AM "h:mm:ss a/p") 7:18:00 a "d-mmmm h:mm") 3-January 7:18 Thí dụ về hàm 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 259 Thủ tục PSet : vẽ điểm trên thiết bị xuất luận lý Thủ tục có dạng sau [Step] (x, y), đó là tên của đối tượng nhận kết quả vẽ (Printer, Form, default là form hiện hành. (x,y) miêu tả tọa độ của vị trí điểm cần vẽ trên thiết bị luận lý. 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 là giá trị kiểu Long miêu tả màu vẽ theo hệ màu RGB (hoặc dùng hoặc dùng hàm để xác định màu 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 260 Thủ tục Line : vẽ đoạn thẳng/box trên thiết bị xuất luận lý Thủ tục có dạng sau [Step] (x1, y1) - [Step] (x2, y2), [color], đó là tên của đối tượng nhận kết quả vẽ (Printer, Form, 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 miêu tả tọa độ điểm cuối của đoạn thẳng cần vẽ. Ý nghĩa cũng giống như là giá trị kiểu Long miêu tả màu vẽ theo hệ màu RGB. 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à đối tượng nhận kết quả sẽ qui định màu được 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 261 Thủ tục Circle : vẽ hình trên thiết bị xuất luận lý Thủ tục có dạng sau [Step] (x, y), radius, [color, start, end, đó là tên của đối tượng nhận kết quả vẽ (Printer, Form, default là form hiện hành. (x,y) miêu tả tọa độ tâm điểm của vòng cần vẽ trên đối 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 miêu tả bán là giá trị kiểu Long miêu tả màu vẽ theo hệ màu end miêu tả 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à miêu tả tỉ lệ kích thước dọc/ngang của ellipse (default là 1 để vẽ vòng 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 262 Các thuộc tính qui định thông số vẽ Khi ta gọi các method vẽ PSet, Line, Circle, trên 1 đối tượng vẽ nào đó (Printer, Form, thì các method này dùng các thuộc tính sau để qui định thông số vẽ của chúng CurrentY miêu tả tọa độ điểm hiện hành, nó được dùng làm gốc tọa độ cho các điểm vẽ nếu có dùng từ khóa Step kèm theo điểm vẽ đó. FillColor xác định mẫu tô và màu tô các phần tử có diện tích (box, xác định màu nền của đối xác định màu để hiển thị text hay vẽ biên các phần tử (line, box, xác định cách thức vẽ xác định mẫu vẽ của đường vẽ (line, box, xác định độ dày của đường vẽ (line, box, có thể đọc/hiệu chỉnh lại giá trị các thuộc tính theo yêu 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 263 Chi tiết về thuộc tính qui định đơn vị tính kích tính ScaleMode miêu tả đơn vị tính kích thước với qui định sau Setting vbUser 0 Indicates that one or more of the and ScaleTop are set to custom values. vbTwips 1 (1440 twips per logical inch; 567 twips per logical 2 Point (72 points per logical inch). vbPixels 3 Pixel (smallest unit of monitor or printer 4 Character = 120 twips per unit; = 240 twips per unit). vbInches 5 Inch. 6 7 8 9 Units used by the control's container to determine the control's position. 10 Units used by the control's container to determine the control's size. Chương 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 264 Chi tiết về thuộc tính miêu tả màu Mỗi màu ở chế độ TrueColor được tổng hợp từ 3 thành phần màu cơ bản Red - Green - Blue. Trọng số của mỗi thành phần màu được miêu tả bởi 1 giá trị Byte (từ 0 đến 255). Xác định 1 màu là xác định 3 thành phần màu của nó. Các thuộc tính FillColor có giá trị miêu tả màu dạng RGB với qui định sau : Color Red Value Green Value Blue Value Black 0 0 0 Blue 0 0 255 Green 0 255 0 Cyan 0 255 255 Red 255 0 0 Magenta 255 0 255 Yellow 255 255 0 White 255 255 255 Thí dụ ta viết lệnh gán : = để thiết lập màu nền của form tên Form1 là màu 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 265 Chi tiết về thuộc tính miêu tả màu (tt) Nếu chỉ muốn dùng 1 trong 16 màu cơ bản của QBasic (version Basic đầu tiên của Microsoft chạy trên DOS), ta có thể dùng hàm QBColor. Bảng sau liệt kê 16 màu cơ bản này : Number Color Number Color 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 Thí dụ ta viết lệnh gán : = để thiết lập màu nền của form tên Form1 là màu trắng 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 266 Chi tiết về thuộc tính mẫu tô tính FillStyle có giá trị miêu tả 1 mẫu tô nền với qui định sau Setting 0 Solid 1 (Default) 2 Line 3 Vertical Line 4 Upward Diagonal 5 Downward Diagonal VbCross 6 Cross 7 Diagonal Cross Thí dụ ta viết lệnh gán : = để thiết lập mẫu tô nền của các phần tử trong form là các đường thẳng 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 267 Chi tiết về thuộc tính mẫu vẽ đường tính DrawStyle có giá trị miêu tả 1 mẫu vẽ đường viền với qui định sau Setting VbSolid 0 (Default) Solid VbDash 1 Dash VbDot 2 Dot 3 Dash-Dot 4 5 6 Inside Solid Thí dụ ta viết lệnh gán : = VbDash để thiết lập mẫu vẽ của các phần tử trong form là các đường gạch-gạch dài. Lưu ý thuộc tính DrawStyle chỉ có nghĩa theo bảng trên khi ta thiết lập DrawWidth = 1. Trong trường hợp DrawWidth > 1 thì DrawStyle <> 5 đều tạo ra nét vẽ liên 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin : vẽ ảnh bitmap bất kỳ Mỗi đối tượng vẽ có method cho phép ta vẽ ảnh bitmap bất kỳ. Cú pháp như sau picture, dx, dy, dw, dh, sx, sy, sw, sh, đó là tên của Form, hay Printer, nếu không có thì form hiện hành được là ảnh bitmap gốc được dùng để vẽ. dx, dy là toạ độ đỉnh trên trái của vùng chứa ảnh vẽ trong đối tượng vẽ. dw, dh là độ rộng, độ cao của vùng chứa ảnh vẽ trong đối tượng vẽ. sx, sy là toạ độ đỉnh trên trái của vùng chứa ảnh trong ảnh gốc. sw, sh là độ rộng, độ cao của vùng chứa ảnh trong ảnh miêu tả hành vi đưa ảnh gốc vào đối tượng vẽ, ta thường dùng các mã sau : copy ảnh gốc vào vị trí qui định của đối tượng : Or từng pixel ảnh gốc với từng bit đối tượng vẽ tương : Xor từng pixel ảnh gốc với từng bit đối tượng vẽ tương : And từng pixel ảnh gốc với từng bit đối tượng vẽ tương 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 269 Thí dụ về việc dùng function 1 form trống, 'add' điều khiển chứa ảnh gốc vào form, set thuộc tính Visible = False, thuộc tính Picture = đườn dẫn file ảnh, rồi viết đoạn code sau cho form : Option Declare Sub Sleep Lib (ByVal As Sub = False ' để VB gọi hàm xử lý biến cố Paint End Sub ' hiển thị ảnh chạy từ từ sang phải Dim x As Integer, y As = vbPixels ' đơn vị tính của form là = vbPixels ' đơn vị tính ở ảnh gốc là pixel x = 0 ' thiết lập vị trí đầu của ảnh y = 50 While Picture1, x, y, 60, 60, 0, 0, , , ' vẽ ảnh ở vị trí ' cho phép ứng dụng đáp ứng sự (10) ' ngủ chờ 10ms Line (x, y)-(x + 60, y + 60), BF ' xóa ảnh vừa vẽ x = x + 4 ' di chuyển vị trí về bên phải 4 pixel If (x - 60 > Then x = 0 ' nếu ảnh đạt lề phải thì set về 10: Tương tác giữa người dùng & chương Công nghệ Thông ĐH Bách Khoa : Tin 270 Vấn đề in ấn trong VB Trong chương trình VB, ta có thể in thông tin ra máy in bằng cách dùng 1 trong 3 cách sau : dùng các method vẽ văn bản, đồ họa và ảnh bitmap lên 1 form theo ý muốn rồi gọi method PrintForm để in form kết quả ra máy in. Đây là cách dễ dàng nhất để kiểm tra kết quả trước khi in ra giấy thực sự, nhưng kết quả có độ phân giải không cao (vì trùng với độ phân giải của màn các method vẽ văn bản, đồ họa và ảnh bitmap theo ý muốn trực tiếp lên đối tượng Printer cùng 2 method điều khiển NewPage & EndDoc để xuất kết quả trực tiếp ra máy in default của Windows. Cách này cho kết quả có độ phân giải đúng với máy in (thường rất cao so với độ phân giải màn lệnh Set Printer = để chọn máy in cụ thể trong danh sách các driver máy in hiện có của Windows rồi dùng các method vẽ văn bản, đồ họa và ảnh bitmap theo ý muốn trực tiếp lên đối tượng Printer cùng 2 method điều khiển NewPage & EndDoc để xuất kết quả trực tiếp ra máy in vừa 10: Tương tác giữa người dùng & chương trình