Tin học dại cương - Chương 10: Tương tác giữa người dùng và chương trình

pdf 31 trang vanle 2160
Bạn đang xem 20 trang mẫu của tài liệu "Tin học dại cương - Chương 10: Tương tác giữa người dùng và chương trình", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdftin_hoc_dai_cuong_chuong_10_tuong_tac_giua_nguoi_dung_va_chu.pdf

Nội dung text: Tin học dại cương - Chương 10: Tương tác giữa người dùng và chương trình

  1. MÔN TIN HỌC Ch ươ ng 10 TƯƠNG TÁC GI ỮA NGƯỜI DÙNG & CHƯƠNG TRÌNH 10.1 T ổng quát v ề t ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình 10.2 Giao tiêp v ới b2n phím. 10.3 Giao ti ếp v ới chu ột 10.4 V ẽ v ăn b ản và đồ h ọa lên đố i t ượ ng giao di ện 10.5 V ấn đề in ấn trong VB Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 258
  2. 10.1 T ổng quát v ề t ương tác gi ữa ng ười dùng & ch ương trình  Trong 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 bị nh ập/xu ất (thi ết bị I/O - input/output) nh ư bàn phím/chu ột để nh ập dữ li ệu hay lệnh, màn hình/máy in để xu ất kết qu ả hay thông báo  Hi ện 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 nhi ều model máy in phun mực, máy in laser, ). 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 bị. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 259
  3. Ki ến trúc t ương tác gi ữa ng ười dùng & ứng d ụng VB My Visual Basic Application Ứng d ụng giao ti ếp vớI các thi ết b ị tr ừu tượ ng thông qua Windows Windows t ạo & Screen Object Keyboard Mouse Printer Object qu ản lý các thi ết bị tr ừu t ượ ng Windows Windows giao ti ếp vớI ác device driver thi ết b ị Printer Driver Keyboard Mouse Driver Driver Driver Các driver giao ti ếp v ớI các thi ết bị v ật lý ViewSonic AnyKey Logitech HP Laser 5 Monitor Keyboard Mouse Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 260
  4. 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 model).  cấp 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 riêng.  cấp HĐH xử lý các ch ức năng lu ận lý (đệ m dữ li ệu, xử lý sai, ) tr ướ c khi nh ờ device 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, Keyboard).  VB tạo ra nh ững đố i tượ ng giao di ện cao cấp và dễ dùng: mỗi đố i tượ ng giao di ện (form, window, listbox, ) đề u có th ể giao ti ếp tr ực ti ếp với ng ườ i dùng để nh ập/xu ất dữ li ệu, ch ờ nh ận sự ki ện hay ch ủ độ ng thông báo cho user. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 261
  5. 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 Control).  trong 1 số tr ườ ng hợp cần thi ết ta sẽ dùng các đố i tượ ng của Windows nh ư Printer và Screen.  trong 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 của device driver.  và 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 th ời.  Tươ 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 quát. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 262
  6. 10.2 Giao ti ếp v ới keyboard 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 'focus '.  Liên 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:  KeyDown: 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 phím.  KeyUp: sự ki ện xảy ra khi ng ườ i sử dụng th ả phím vừa ấn ra.  KeyPress : 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ự ANSI. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 263
  7. Th ủ t ục x ử lý s ự ki ện KeyDown, KeyUp & KeyPress  Th ủ tục có dạng sau: Private Sub ControlName _KeyDown (KeyCode as Integer, Shift as Integer). và Private Sub ControlName _KeyUp (KeyCode as Integer, Shift as Integer). trong đó:  ControlName là tên của điều khi ển nh ận sự ki ện keydown/keyup.  KeyCode là mã "virtual code" của phím đượ c ấn/th ả.  Shift 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).  Th ủ tục KeyPress có dạng sau: Private Sub ControlName _KeyPress (KeyAscii As Integer) trong đó:  ControlName là tên của điều khi ển nh ận sự ki ện keypress.  KeyAscii là mã ký tự ANSI của phím đượ c ấn/th ả.  Mỗi đố 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 ứng. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 264
  8. Thí dụ thủ t ục x ử lý bi ến c ố KeyDown c ủa 1 textbox Private Sub Text1_KeyDown (KeyCode As Integer, Shift As Integer) Dim ShiftDown, AltDown, CtrlDown, Txt ShiftDown = (Shift And vbShiftMask) > 0 AltDown = (Shift And vbAltMask) > 0 CtrlDown = (Shift And vbCtrlMask) > 0 If KeyCode = vbKeyF2 Then ' Display key combinations. If ShiftDown And CtrlDown And AltDown Then Txt = "SHIFT+CTRL+ALT+F2." ElseIf ShiftDown And AltDown Then Txt = "SHIFT+ALT+F2." ElseIf ShiftDown And CtrlDown Then Txt = "SHIFT+CTRL+F2." ElseIf CtrlDown And AltDown Then Txt = "CTRL+ALT+F2." ElseIf ShiftDown Then Txt = "SHIFT+F2." ElseIf CtrlDown Then Txt = "CTRL+F2." ElseIf AltDown Then Txt = "ALT+F2." ElseIf SHIFT = 0 Then Txt = "F2." End If Text1.Text = "You pressed " & Txt End If End Sub Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 265
  9. Dùng thu ộc tính KeyPreview  Th ườ ng 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 KeyPreview cho form, ta có th ể xem/hi ệu ch ỉnh giá tr ị của nó nh ờ lệnh gán: FormName .KeyPreview [= boolean_expr ] trong đó:  FormName là tên của form liên quan.  boolean_expr là bi ểu th ức lu ận lý có giá tr ị True/False.  Khi 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 khi ển.  tr ị = False thì điều khi ển nh ận và xử lý bi ến cố, còn form thì không. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 266
  10. 10.3 Giao ti ếp v ới chu ột thông qua các đố i t ượng giao di ện  Tươ ng 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:  MouseMove : sự ki ện xảy ra khi ng ườ i sử dụng di chuy ển chu ột.  MouseDown : sự ki ện xảy ra khi ng ườ i sử dụng ấn bất kỳ nút nào trên chu ột (tùy lo ại chu ột mà nó có 1/2/3 nút).  MouseUp : 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 ả chu ột.  DblClick : 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 tr ườ ng Windows). Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 267
  11. Th ủ t ục x ử lý s ự ki ện MouseDown & MouseUp  Th ủ tục có dạng sau: Private Sub ControlName _MouseDown (Button As Integer, Shift As Integer, x As Single, y As Single) và Private Sub ControlName _MouseUp (Button As Integer, Shift As Integer, x As Single, y As Single) trong đó:  ControlName là tên của điều khi ển nh ận sự ki ện MouseDown/MouseUp.  Button 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 gi ữa).  Shift 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 hình. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 268
  12. Th ủ t ục x ử lý s ự ki ện MouseMove  Th ủ tục có dạng sau: Private Sub ControlName _MouseMove (Button As Integer, Shift As Integer, x As Single, y As Single) trong đó:  ControlName là tên của điều khi ển nh ận sự ki ện MouseDown/MouseUp.  Button 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 gi ữa).  Shift 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 hình. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 269
  13. Th ủ t ục x ử lý s ự ki ện Click & DblClick  Th ủ tục có dạng sau: Private Sub ControlName _Click () và Private Sub ControlName _DblClick () trong đó:  ControlName là tên của điều khi ển nh ận sự ki ện Click/DblClick.  Th ủ 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 MouseDown hay MouseUp. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 270
  14. Thí dụ thủ t ục x ử lý các s ự ki ện chuột ' bi ến qui đị nh tr ạng thái v ẽ/không v ẽ Dim PaintNow As Boolean 'Kh ởi độ ng thông s ố v ẽ Private Sub Form_Load () DrawWidth = 10 ' Use wider brush. ForeColor = RGB(0, 0, 255) ' Set drawing color. End Sub Private Sub Form_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single) PaintNow = True ' Enable painting. End Sub Private Sub Form_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single) PaintNow = False ' Disable painting. End Sub Private Sub Form_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single) If PaintNow Then PSet (X, Y) ' Draw a point. End If End Sub Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 271
  15. 10.4 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 phép ch ươ ng trình truy xu ất (đọ c/ghi) các thu ộc tính này. Tuy nhiên nh ững đố i tượ ng giao di ện ph ức hợp nh ư Form, PictureBox, 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 tượ ng.  Print : 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 đị nh.  Point : tr ả về giá tr ị màu của 1 điểm pixel.  Line : vẽ 1 đoạn th ẳng hay 1 hộp hình ch ữ nh ật.  Circle : cẽ 1 hình tròn, ellipse hay cung.  PaintPicture : vẽ 1 ảnh bitmap đã có vào đố i tượ ng.  Các 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 dùng chúng. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 272
  16. Th ủ t ục Print: xu ất chu ỗi ra thi ết b ị xu ất lu ận lý  Th ủ tục có dạng sau: [objName .]Print [Spc( n) | Tab( n) | expression charpos ]* trong đó:  objName là 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).  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. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 273
  17. Thí d ụ v ề vi ệc dùng th ủ t ục Print  Đoạn code sau đây sẽ hi ển th ị 3 hàng văn bản trong hộp tho ại About Box đượ c ch ỉnh gi ữa: Const strAbout1 = "Trinh MiniIE" Const strAbout2 = "Version 1.0" Const strAbout3 = "Written by: Nguyen Van Hiep" Private Sub Form_paint() ScaleMode = vbPixels ' Xác đị nh vị trí để chu ỗi strAbout1 nằm gi ữa hộp tho ại CurrentX = (ScaleWidth - TextWidth(strAbout1)) / 2 CurrentY = 40 Print strAbout1 ' Xác đị nh vị trí để chu ỗi strAbout2 nằm gi ữa hộp tho ại CurrentX = (ScaleWidth - TextWidth(strAbout2)) / 2 CurrentY = 60 Print strAbout2 ' Xác đị nh vị trí để chu ỗi strAbout3 nằm gi ữa hộp tho ại CurrentX = (ScaleWidth - TextWidth(strAbout3)) / 2 CurrentY = 80 Print strAbout3 End Sub Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 274
  18. Function 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 (expression [, format [, firstdayofweek [, firstweekofyear ]]]) trong đó:  expression là bi ểu th ức số hay ngày tháng cần format.  format 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.  firstdayofweek và firstweekofyear 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 tháng.  Một 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 Windows) , miêu tả vị trí dấu ng ăn đơ n vị ngàn (qui đị nh bởi locale). - + % ( ) space miêu tả ch ỉnh xác ký tự tươ ng ứng. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 275
  19. Thí d ụ v ề hàm Format  Thí dụ về ch ỉnh dạng dữ li ệu số: Format syntax Result Format(8315.4, "00000.00") 08315.40 Format(8315.4, "#####.##") 8315.4 Format(8315.4, "##,##0.00") 8,315.40 Format(315.4,"$##0.00") $315.40  Thí dụ về ch ỉnh dạng dữ li ệu ngày tháng : Format(Now, "m/d/yy") 1/27/93 Format(Now, "dddd, mmmm dd, yyyy") Wednesday, January 27, 1993 Format(Now, "d-mmm") 27-Jan Format(Now, "mmmm-yy") January-93 Format(Now, "hh:mm AM/PM") 07:18 AM Format(Now, "h:mm:ss a/p") 7:18:00 a Format(Now, "d-mmmm h:mm") 3-January 7:18 Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 276
  20. Th ủ t ục PSet: v ẽ điểm trên thi ết b ị xu ất lu ận lý  Th ủ tục có dạng sau: [objName .]PSet [Step] (x, y), [color ] trong đó:  objName là tên của đố i tượ ng nh ận kết qu ả vẽ (Printer, Form, PictureBox), 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 (0,0).  color là 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ẽ). Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 277
  21. 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: [objName .]Line [Step] (x1, y1) - [Step] (x2, y2), [color ], [B][F] trong đó:  objName là 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 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à FillStyle của đố i tượ ng nh ận kết qu ả sẽ qui đị nh màu đượ c tô. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 278
  22. Th ủ t ục Circle: v ẽ hình tròn/ellipse trên thi ết b ị xu ất lu ận lý  Th ủ tục có dạng sau: [objName .]Circle [Step] (x, y), radius , [color, start, end, aspect ] trong đó:  objName là tên của đố i tượ ng nh ận kết qu ả vẽ (Printer, Form, PictureBox), default là form hi ện hành.  (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 miêu tả bán kính.  color là giá tr ị ki ểu Long miêu tả màu vẽ theo hệ màu RGB.  start, 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à 2π).  aspect miêu tả tỉ lệ kích th ướ c dọc/ngang của ellipse (default là 1 để vẽ vòng tròn). Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 279
  23. Các thu ộc tính qui đị nh thông s ố v ẽ  Khi ta gọi các method vẽ PSet, Line, Circle, PaintPicture trên 1 đố i tượ ng vẽ nào đó (Printer, Form, PictureBox) 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:  CurrentX, 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ẽ đó.  FillStyle, FillColor xác đị nh mẫu tô và màu tô các ph ần tử có di ện tích (box, circle).  BackColor xác đị nh màu nền của đố i tượ ng.  ForeColor xác đị nh màu để hi ển th ị text hay vẽ biên các ph ần tử (line, box, circle).  DrawMode xác đị nh cách th ức vẽ (vbBlackness, vbWhiteness, vbInvert ).  DrawStyle xác đị nh mẫu vẽ của đườ ng vẽ (line, box, circle).  DrawWidth xác đị nh độ dày của đườ ng vẽ (line, box, circle).  Ta có th ể đọ c/hi ệu ch ỉnh lại giá tr ị các thu ộc tính theo yêu cầu. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 280
  24. Chi ti ết v ề thu ộc tính qui đị nh đơn v ị tính kích th ước  Thu ộc tính ScaleMode miêu tả đơ n vị tính kích th ướ c với qui đị nh sau: Constant Setting Description vbUser 0 Indicates that one or more of the ScaleHeight, ScaleWidth, ScaleLeft, and ScaleTop properties are set to custom values. vbTwips 1 (Default)Twip (1440 twips per logical inch; 567 twips per logical centimeter). vbPoints 2 Point (72 points per logical inch). vbPixels 3 Pixel (smallest unit of monitor or printer resolution). vbCharacters 4 Character (horizontal = 120 twips per unit; vertical = 240 twips per unit). vbInches 5 Inch. vbMillimeters 6 Millimeter. vbCentimeters 7 Centimeter. vbHimetric 8 HiMetric vbContainerPosition 9 Units used by the control's container to determine the control's position. vbContainerSize 10 Units used by the control's container to determine the control's size. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 281
  25. 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 BackColor, ForeColor, 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: Form1.BackColor = RGB(0,0,0) để thi ết lập màu nền của form tên Form1 là màu đen. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 282
  26. 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: Form1.BackColor = QBColor(15) để thi ết lập màu nền của form tên Form1 là màu tr ắng sáng. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 283
  27. Chi ti ết v ề thu ộc tính mẫu tô n ền  Thu ộc tính FillStyle có giá tr ị miêu tả 1 mẫu tô nền với qui đị nh sau: Constant Setting Description VbFSSolid 0 Solid VbFSTransparent 1 (Default) Transparent VbHorizontalLine 2 Horizontal Line VbVerticalLine 3 Vertical Line VbUpwardDiagonal 4 Upward Diagonal VbDownwardDiagonal 5 Downward Diagonal VbCross 6 Cross VbDiagonalCross 7 Diagonal Cross  Thí dụ ta vi ết lệnh gán: Form1.FillStyle = VbVerticalLine để thi ết lập mẫu tô nền của các ph ần tử trong form là các đườ ng th ẳng đứ ng. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 284
  28. Chi ti ết v ề thu ộc tính mẫu v ẽ đường vi ền  Thu ộc tính DrawStyle có giá tr ị miêu tả 1 mẫu vẽ đườ ng vi ền với qui đị nh sau: Constant Setting Description VbSolid 0 (Default) Solid VbDash 1 Dash VbDot 2 Dot VbDashDot 3 Dash-Dot VbDashDotDot 4 Dash-Dot-Dot VbInvisible 5 Transparent VbInsideSolid 6 Inside Solid  Thí dụ ta vi ết lệnh gán: Form1.DrawStyle = VbDash để thi ết lập mẫu vẽ đườ ng vi ền 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 thu ộc tính DrawWidth = 1. Trong tr ườ ng hợp DrawWidth > 1 thì DrawStyle <> 5 đề u tạo ra nét vẽ liên tục. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 285
  29. Function PaintPicture: v ẽ ảnh bitmap b ất k ỳ  Mỗi đố i tượ ng vẽ có method PaintPicture cho phép ta vẽ ảnh bitmap bất kỳ. Cú pháp nh ư sau: [objName .]PaintPicture picture , dx, dy, dw, dh , sx, sy, sw, sh, opcode trong đó:  objName là tên của Form, PictureBox hay Printer, nếu không có thì form hi ện hành đượ c vẽ.  picture 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 gốc.  opcode 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: vbSrcCopy: copy ảnh gốc vào vị trí qui đị nh của đố i tượ ng vẽ. vbSrcPaint: Or từng pixel ảnh gốc với từng bit đố i tượ ng vẽ tươ ng ứng. vbSrcInvert: Xor từng pixel ảnh gốc với từng bit đố i tượ ng vẽ tươ ng ứng. vbSrcAnd: And từng pixel ảnh gốc với từng bit đố i tượ ng vẽ tươ ng ứng Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 286
  30. Thí d ụ v ề vi ệc dùng function PaintPicture Tạo 1 form tr ống, 'add' điều khi ển PictureBox 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 Explicit Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Sub Form_Load() AutoRedraw = False ' để VB gọi hàm xử lý bi ến cố Paint End Sub Private Sub Form_Paint() ' hi ển th ị ảnh ch ạy từ từ sang ph ải Dim x As Integer, y As Integer ScaleMode = vbPixels ' đơ n vị tính của form là pixel Picture1.ScaleMode = 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 True PaintPicture Picture1, x, y, 60, 60, 0, 0, , , vbMergePaint ' vẽ ảnh ở vị trí x,y DoEvents ' cho phép ứng dụng đáp ứng sự ki ện Sleep (10) ' ng ủ ch ờ 10ms Line (x, y)-(x + 60, y + 60), BackColor, 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 > ScaleWidth) Then x = 0 ' nếu ảnh đạ t lề ph ải thì set về trái Wend End Sub Môn: Tin h ọc Khoa Công ngh ệ Thông tin Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 287
  31. 10.5 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 hình).  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 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 hình).  dùng lệnh Set Printer = Printers(n) để 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 ch ọn. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 10: T ươ ng tác gi ữa ng ườ i dùng & ch ươ ng trình Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 288