Bài giảng môn Tin học đối tượng - Chương 10: Tương tác giữa người dùng & chương trình
Bạn đang xem tài liệu "Bài giảng môn Tin học đối tượng - Chương 10: Tương tác giữa người dùng & 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:
- bai_giang_mon_tin_hoc_doi_tuong_chuong_10_tuong_tac_giua_ngu.pdf
Nội dung text: Bài giảng môn Tin học đối tượng - 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ữangười dùng & chương trình Trong lúc chương trình chạy, nó thường tương tác vớingười dùng. Sự tương tác gồm2 hoạt động chính : chờ nhậndữ liệu do người dùng cung cấphay chờ nhậnlệnh củangười dùng để thực thi 1 chứcnăng nào đó. hiểnthị thông báo và/hoặckếtquả tính toán ra màn hình/máy in để người dùng biếtvàsử dụng. Sự tương tác giữangườidùngvàmáytínhđượcthựchiện thông qua các thiếtbị nhập/xuất(thiếtbị I/O - input/output) như bàn phím/chuột để nhậpdữ liệuhay lệnh, màn hình/máy in để xuấtkếtquả hay thông báo Hiệncóhàngtrăm hãng khác nhau chế tạothiếtbị I/O cho máy PC, mỗi hãng chế tạorấtnhiều model củacùng1 thiếtbị (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ếtbị củatừng hãng có những tính chấtvật lý riêng và khác với các model khác. Để giúp ngườilậptrìnhtruyxuấtcácthiếtbị I/O dễ dàng, độclậpvớitínhchất phầncứng củathiếtbị, HĐH Windows và VB đãchedấumọitínhchấtphần cứng củacácthiếtbị và cung cấp cho ngườilập trình 1 giao tiếpsử dụng duy nhất, độclậpvớithiếtbị. Môn : Tin học Khoa Công nghệ Thông tin Chương 10: Tương tác giữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 259 Kiếntrúctương tác giữangườ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ị Driver Keyboard Mouse Printer 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ữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 260 130
- Kiếntrúctương tác giữangườidùng& ứng dụng VB (tt) Xem hình vẽ của slide trước(miêutả kiếntrúctương tác giữangười dùng & ứng dụng VB), ta thấy: cấpthấpnhấtlàcácthiếtbị phầncứng, mỗithiếtbị có tính chất riêng và khác vớicácthiếtbị khác (ngay cả cùng loại, cùng hãng nhưng khác model). cấp device driver điềukhiểnvàgiaotiếptrựctiếpvớiphầncứng nhưng che dấumọi tính chấtchi tiếtcủaphầncứng, nó cung cấpchocấp trên 1 giao tiếp sử dụng phầncứng độclậpvới tính chấtphầncứng đó ⇒ Mỗi model thiếtbị phầncứng của 1 hãng cần có device driver riêng. cấp HĐH xử lý các chứcnăng luậnlý(đệmdữ liệu, xử lý sai, ) trước khi nhờ device driver giao tiếptrựctiếpvớiphầncứng. Windows che dấucácloại phầncứng và tạoranhững thiếtbị trừutượng để ứng dụng truy xuất chúng dễ dàng và độclậpvớiloạithiếtbị (đốitượng Printer, Screen, Mouse, Keyboard). VB tạoranhững đốitượng giao diện cao cấpvàdễ dùng : mỗi đốitượng giao diện (form, window, listbox, ) đềucóthể giao tiếptrựctiếpvớingười dùng để nhập/xuấtdữ liệu, chờ nhậnsự kiệnhay 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ữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 261 Kiếntrúctương tác giữangườidùng& ứng dụng VB (tt) Sau khi đãbiếtkiếntrúcgiaotiếpI/O của ứng dụng VB, khi cầngiaotiếpvới người dùng, ta nên : dùng các đốitượng giao diệncaocấp(định sẵncủa VB hay ActiveX Control). trong 1 số trường hợpcầnthiếttasẽ dùng các đốitượng của Windows như Printer và Screen. trong 1 số trường hợptốicầnthiếttamớigọi các hàm trong giao tiếpcủa device driver. và tuyệt đối không nên truy xuấttrựctiếpphầncứng thiếtbị I/O vì rấtkhó khăn, không an toàn, dễ bị tranh chấpvớicácứng dụng chạy đồng thời. Tương tác vớingười dùng thông qua các đốitượng giao diện đượcthựchiệnnhư sau : nhậpliệu/nhậnlệnh thông qua các thủ tụcxử lý sự kiệncủaphầntử giao diệntương ứng. xuấtkếtquả/thông báo bằng cách gán kếtquả vào thuộc tính tương ứng của đốitượng giao diện hay dùng các method vẽđồhọatổng quát. Môn : Tin học Khoa Công nghệ Thông tin Chương 10: Tương tác giữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 262 131
- 10.2 Giao tiếpvới keyboard qua các đốitượng giao diện Mặcdùcóthể có nhiềuphầntử giao diện cùng đượchiểnthị trênmànhìnhtại từng thởi điểmnhưng chỉ có 1 phầntử giao diện đượcgiaotiếpvớithiếtbị I/O, ta gọiphầntử giao diệnnàylà'active' hay được'focus'. Liên quan đếnviệc ấnthả 1 phím, VB sẽ tạora3 sự kiệnsauđây và gởivề cho phầntửđược 'focus' hiện hành : KeyDown : sự kiệnxảyrakhingườisử dụng bấm(ấnxuống) bấtkỳ một phím nào trên bàn phím. KeyUp : sự kiệnxảy ra khi ngườisử dụng thả phím vừa ấnra. KeyPress: sự kiệnxảy ra khi ngườisử dụng ấn/thả bấtkỳ một phím nào trên bàn phím mà tạorađược1 kýtự ANSI. Môn : Tin học Khoa Công nghệ Thông tin Chương 10: Tương tác giữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 263 Thủ tụcxử lý sự kiện KeyDown, KeyUp & KeyPress Thủ tụccó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ềukhiểnnhậnsự kiện keydown/keyup. KeyCode là mã "virtual code" củaphímđược ấn/thả. Shift là giá trị miêu tả trạng thái ấngiữ các phím điềukhiể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ụcKeyPresscódạng sau : Private Sub ControlName_KeyPress (KeyAscii As Integer) trong đó: ControlName là tên của điềukhiểnnhậnsự kiệnkeypress. KeyAscii là mã ký tự ANSI của phím được ấn/thả. Mỗi đốitượng có thủ tụcxử lý biếncố riêng, thủ tụcnàycũ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ữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 264 132
- Thí dụ thủ tụcxử lý biếncố 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ữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 265 Dùng thuộc tính KeyPreview Thường 1 form giao diện(hộpthoại) chứa nhiều điềukhiển bên trong nó ⇒ Khi thao tác phím trên 1 điềukhiển trong form thì sự kiệnsẽ gởichođiềukhiểnhay form ? Để qui định cụ thểđiều này, VB cung cấpthuộc tính KeyPreview cho form, ta có thể xem/hiệuchỉnh giá trị củanónhờ lệnh gán : FormName.KeyPreview [= boolean_expr] trong đó: FormName là tên của form liên quan. boolean_expr là biểuthứcluậnlýcógiátrị True/False. Khi ta gán trị luậnlývàothuộc tính củaform thìnếu: trị = True thì form sẽ nhậnvàxử lý biếncố trướcrồimớitới điềukhiển. trị = False thì điềukhiểnnhậnvàxử lý biếncố, 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ữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 266 133
- 10.3 Giao tiếpvớichuột thông qua các đốitượ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ạora1 trong5 biếncố sau đây và gởivề cho phầntửđược 'focus' hiện hành : MouseMove : sự kiệnxảy ra khi ngườisử dụng di chuyểnchuột. MouseDown : sự kiệnxảy ra khi ngườisử dụng ấnbấtkỳ nút nào trên chuột (tùy loạichuột mà nó có 1/2/3 nút). MouseUp : sự kiệnxảy ra khi ngườisử dụng thả nút vừa ấnra. Click : sự kiệnxảyrakhingườisử dụng ấnvàthả chuột. DblClick : sự kiệnxảyrakhingườisử dụng 'Click' chuột liên tụchailần trong 1 thờigianđủ 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ữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 267 Thủ tụcxử lý sự kiện MouseDown & MouseUp Thủ tụccó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ềukhiểnnhậnsự kiện MouseDown/MouseUp. Button là giá trị miêu tả trạng thái các nút củachuột được ấn/thả (là mộtdã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 ấngiữ các phím điềukhiể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ủavị 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ữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 268 134
- Thủ tụcxử lý sự kiệnMouseMove Thủ tụccó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ềukhiểnnhậnsự kiện MouseDown/MouseUp. Button là giá trị miêu tả trạng thái các nút củachuột được ấn/thả (là mộtdã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 ấngiữ các phím điềukhiể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ủavị trí chuộthiệnhànhtrênmànhình. Môn : Tin học Khoa Công nghệ Thông tin Chương 10: Tương tác giữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 269 Thủ tụcxử lý sự kiện Click & DblClick Thủ tụccódạng sau : Private Sub ControlName_Click () và Private Sub ControlName_DblClick () trong đó: ControlName là tên của điềukhiểnnhậnsự kiện Click/DblClick. Thủ tụcxử lý sự kiện Click và DblClick không có tham sốđểxác định vị trí ấnchuột hay nút chuột nào đã được ấn. Trong trường hợpcần các thông tin phụ này để xử lý chi li hơn, bạn nên dùng thủ tụcxử 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ữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 270 135
- Thí dụ thủ tụcxử lý các sự kiệnchuộ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ữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 271 10.4 Vẽ vănbảnvàđồ họalênđốitượng giao diện Các điềukhiểnthường chứathuộ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 đốitượng giao diệnphứchợpnhư Form, PictureBox, Printer có thể hiểnthị nhiềunội dung chi tiết ở dạng vănbản, đồ họahay ảnh bitmap bấtkỳ. Để hiểnthị các nộidung này, ta dùng các method sau củacácđốitượng tương ứng : Cls : xóa toàn bộ nội dung hiểnthị trước đócủa đốitượng. Print : hiểnthị 1 hay nhiềuchuỗivănbản. PSet : hiểnthị 1 điểmpixel với1 màuxácđịnh. Point : trả về giá trị màu của1 điểmpixel. Line : vẽ 1 đoạnthẳng hay 1 hộphìnhchữ nhật. Circle : cẽ 1 hình tròn, ellipse hay cung. PaintPicture : vẽ 1 ảnh bitmap đãcóvàođốitượng. Các slide còn lạidiễntả 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ữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 272 136
- Thủ tụcPrint : xuấtchuỗirathiếtbị xuấtluậnlý Thủ tụccódạng sau : [objName.]Print [Spc(n) | Tab(n) | expression charpos]* trong đó: objName là tên của đốitượng nhậnkếtquả vẽ (Printer, Form, PictureBox), default là form hiện hành. Spc(n) qui định n ký tự trống đượcin ra. Tab(n) qui định n ký tự Tab đượcin ra, mỗi Tab đưa pointer in qua phảithêm 1 cột(vị trí các cột đượcqui định trước). expression là biểuthứcchuỗihay số cầnin. charpos qui định vị trí in dữ liệukế tiếp. Nếu charpos = ";" thì dữ liệuin kế tiếpsẽ đượcin liền ngay. Nếu charpos = "," thì sẽ thêm 1 Tab trướckhiin dữ liệukế. Nếu không có charpos saucùngthìvị trí in sẽ dờixuống đầudòng kế tiếp. Thông tin về font chữ phải đượcthiếtlậptrướcthủ tục Print thông qua các thuộc tính sau của đốitượng vẽ : FontName, FontSize, FontItalic, FontBold, Nên thiếtlậpthuộc tính CurrentX, CurrentY để qui định rõ ràng vị trí in củamỗi lệnh Print. Môn : Tin học Khoa Công nghệ Thông tin Chương 10: Tương tác giữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 273 Thí dụ về việc dùng thủ tụcPrint Đoạn code sau đây sẽ hiểnthị 3 hàng vănbản trong hộpthoạ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ằmgiữahộpthoại CurrentX = (ScaleWidth - TextWidth(strAbout1)) / 2 CurrentY = 40 Print strAbout1 ' Xác định vị trí để chuỗi strAbout2 nằmgiữahộpthoại CurrentX = (ScaleWidth - TextWidth(strAbout2)) / 2 CurrentY = 60 Print strAbout2 ' Xác định vị trí để chuỗi strAbout3 nằmgiữahộpthoạ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ữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 274 137
- Function Format : chỉnh dạng dữ liệutrướckhiin Ta thường muốnformat dữ liệusố hay ngày tháng theo yêu cầu riêng trướckhi in nó ra. VB hỗ trợ chứcnăng này thông qua hàm Format có cú pháp sau : Format (expression [,format[,firstdayofweek[,firstweekofyear]]]) trong đó: expression là biểuthứcsố hay ngày tháng cầnformat. format là chuỗikýtựđịnh dạng hay tên gợinhớ miêu tả chuỗi định dạng sẵn có của VB. firstdayofweek và firstweekofyear qui định ngày đầutrongtuầnvàtuần đầu trong nămcầnchođịnh dạng dữ liệu ngày tháng. Mộtsố ký tự thường dùng trong chuỗi định dạng : 0miêutả vị trí ký số, nếusố không hiểnthị hết vùng định đạng thì thêm số 0 trướcvàsaugiátrị số cho đầyvùngđịnh dạng. #miêutả vị trí ký số, không in số 0 đitrước và sau giá trị số. .miêutả vị trí dấungăn đơnvị (qui định bởi locale của Windows) ,miêutả vị trí dấungăn đơnvị ngàn (qui định bởi locale). - + % ( ) space miêu tả chỉnhxáckýtự tương ứng. Môn : Tin học Khoa Công nghệ Thông tin Chương 10: Tương tác giữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 275 Thí dụ về hàm Format Thí dụ về chỉnh dạng dữ liệusố : 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ữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 276 138
- Thủ tụcPSet: vẽđiểmtrênthiếtbị xuấtluậnlý Thủ tụccódạng sau : [objName.]PSet [Step] (x, y), [color] trong đó: objName là tên của đốitượng nhậnkếtquả vẽ (Printer, Form, PictureBox), default là form hiện hành. (x,y) miêu tả tọa độ củavị trí điểmcầnvẽ trên thiếtbị luậnlý. Nếutừ khóa Step được dùng thì (x,y) là tọa độ tương đốiso vớivị trí hiện hành đượcxác định bởi2 thuộc tính CurrentX, CurrentY của đốitượng vẽ. Nếutừ khóa Step không được dùng thì (x,y) là tọa độ so với điểmgố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ữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 277 Thủ tụcLine : vẽđoạnthẳng/box trên thiếtbị xuấtluậnlý Thủ tụccódạng sau : [objName.]Line [Step] (x1, y1) - [Step] (x2, y2), [color], [B][F] trong đó: objName là tên của đốitượng nhậnkếtquả vẽ (Printer, Form, PictureBox), default là form hiện hành. (x1,y1) miêu tả tọa độ điểm đầucủa đoạnthẳng cầnvẽ trên đốitượng nhận kếtquả. Nếutừ khóa Step đượcdùngtrướctọa độ (x1,y1) thì nó là tọa độ tương đốiso vớivị trí hiện hành đượcxácđịnh bởi2 thuộc tính CurrentX, CurrentY của đốitượng nhậnkếtquả. Nếutừ khóa Step không đượcdùng thì (x1,y1) là tọa độ so với điểmgốc(0,0). (x2,y2) miêu tả tọa độ điểmcuốicủa đoạnthẳng cầnvẽ. Ý nghĩacủ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ụcLine sẽ vẽđoạnthẳng qua 2 điểm. nếucóthôngsố B, thủ tục Line sẽ vẽ hình chữ nhậtmà2 đỉnh chéo được xác định bởi2 điểm. Trong trường hợp này nếucóthôngsố F, hình chữ nhật sẽđược tô cùng màu vớimàuvẽ, ngượclạithuộc tính FillColor và FillStyle của đốitượng nhậnkếtquả sẽ qui định màu đượctô. Môn : Tin học Khoa Công nghệ Thông tin Chương 10: Tương tác giữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 278 139
- Thủ tụcCircle : vẽ hình tròn/ellipse trên thiếtbị xuấtluậnlý Thủ tụccódạng sau : [objName.]Circle [Step] (x, y), radius, [color, start, end, aspect] trong đó: objName là tên của đốitượng nhậnkếtquả vẽ (Printer, Form, PictureBox), default là form hiện hành. (x,y) miêu tả tọa độ tâm điểmcủa vòng tròn/ellipse/arc cầnvẽ trên đốitượng nhậnkếtquả. Nếutừ khóa Step được dùng trướctọa độ (x,y) thì (x,y) là tọa độ tương đốiso vớivị trí hiện hành đượcxácđịnh bởi2 thuộc tính CurrentX, CurrentY của đốitượng nhậnkếtquả. Nếutừ khóa Step không đượcdù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 đầuvàcuốicủaarc theođơnvị radian (default điểm đầulà0 vàđiểmcuốilà2π). aspect miêu tả tỉ lệ kích thướcdọ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ữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 279 Các thuộctínhqui định thông số vẽ Khi ta gọi các method vẽ PSet, Line, Circle, PaintPicture trên 1 đốitượng vẽ nào đó (Printer, Form, PictureBox) thì các method này dùng các thuộctínhsau để qui định thông số vẽ của chúng : CurrentX, CurrentY miêu tả tọa độ điểmhiện hành, nó đượcdùnglàmgốc tọa độ cho các điểmvẽ nếucódùngtừ khóa Step kèm theo điểmvẽđó. FillStyle, FillColor xác định mẫutôvàmàutôcácphầntử có diện tích (box, circle). BackColor xác định màu nềncủa đốitượng. ForeColor xác định màu để hiểnthị text hay vẽ biên các phầntử (line, box, circle). DrawMode xác định cách thứcvẽ (vbBlackness, vbWhiteness, vbInvert ). DrawStyle xác định mẫuvẽ 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ệuchỉnh lạigiátrị các thuộctínhtheoyêucầu. Môn : Tin học Khoa Công nghệ Thông tin Chương 10: Tương tác giữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 280 140
- Chi tiếtvề thuộc tính qui định đơnvị tính kích thước Thuộc tính ScaleMode miêu tảđơnvị tính kích thướcvớ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ữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 281 Chi tiếtvề thuộc tính miêu tả màu Mỗimàuở chếđộTrueColor đượctổng hợptừ 3 thành phầnmàucơ bản Red - Green - Blue. Trọng số củamỗi thành phầnmàuđượcmiêutả bởi1 giátrị Byte (từ 0 đến255). Xácđịnh 1 màu là xác định 3 thành phầnmàucủanó. 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ếtlệnh gán : Form1.BackColor = RGB(0,0,0) để thiếtlậpmàunền củaform tênForm1 làmàuđen. Môn : Tin học Khoa Công nghệ Thông tin Chương 10: Tương tác giữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 282 141
- Chi tiếtvề thuộc tính miêu tả màu (tt) Nếuchỉ muốn dùng 1 trong 16 màu cơ bảncủa QBasic (version Basic đầutiên củaMicrosoft chạy trên DOS), ta có thể dùng hàm QBColor. Bảng sau liệtkê 16 màu cơ bảnnà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ếtlệnh gán : Form1.BackColor = QBColor(15) để thiếtlậpmàunền củaform tênForm1 làmàutrắng sáng. Môn : Tin học Khoa Công nghệ Thông tin Chương 10: Tương tác giữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 283 Chi tiếtvề thuộctínhmẫutônền Thuộc tính FillStyle có giá trị miêu tả 1 mẫutônềnvớ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ếtlệnh gán : Form1.FillStyle = VbVerticalLine để thiếtlậpmẫutô nềncủacácphầntử 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ữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 284 142
- Chi tiếtvề thuộctínhmẫuvẽđường viền Thuộc tính DrawStyle có giá trị miêu tả 1 mẫuvẽ đường viềnvớiqui đị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ếtlệnh gán : Form1.DrawStyle = VbDash để thiếtlậpmẫuvẽđường viềncủacácphầntử trong form là các đường gạch-gạch dài. Lưuý thuộc tính DrawStyle chỉ có nghĩatheobảng trên khi ta thiếtlậpthuộc tính DrawWidth = 1. Trong trường hợp DrawWidth > 1 thì DrawStyle <> 5 đều tạoranétvẽ liên tục. Môn : Tin học Khoa Công nghệ Thông tin Chương 10: Tương tác giữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 285 Function PaintPicture : vẽảnh bitmap bấtkỳ Mỗi đốitượng vẽ có method PaintPicture cho phép ta vẽảnh bitmap bấtkỳ. 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 đượcvẽ. picture là ảnh bitmap gốc được dùng để vẽ. dx, dy là toạđộđỉnh trên trái củavùngchứa ảnh vẽ trong đốitượng vẽ. dw, dh là độ rộng, độ cao củavùngchứa ảnh vẽ trong đốitượng vẽ. sx, sy là toạđộđỉnh trên trái củavùngchứa ảnh trong ảnh gốc. sw, sh là độ rộng, độ cao củavùngchứa ảnh trong ảnh gốc. opcode miêu tả hành vi đưa ảnh gốcvàođốitượng vẽ, ta thường dùng các mã sau : vbSrcCopy : copy ảnh gốcvàovị trí qui định của đốitượng vẽ. vbSrcPaint : Or từng pixel ảnh gốcvớitừng bit đốitượng vẽ tương ứng. vbSrcInvert : Xor từng pixel ảnh gốcvớitừng bit đốitượng vẽ tương ứng. vbSrcAnd : And từng pixel ảnh gốcvớitừng bit đốitượ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ữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 286 143
- Thí dụ về việc dùng function PaintPicture Tạo 1 form trống, 'add' điềukhiểnPictureBoxchứa ảnh gốc vào form, set thuộc tính Visible = False, thuộc tính Picture = đườndẫn file ảnh, rồiviế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ếncố Paint End Sub Private Sub Form_Paint() ' hiểnthịảnh chạytừ từ sang phải Dim x As Integer, y As Integer ScaleMode = vbPixels ' đơnvị tính của form là pixel Picture1.ScaleMode = vbPixels ' đơnvị tính ởảnh gốclàpixel x = 0 ' thiếtlậpvị trí đầucủ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ừavẽ x = x + 4 ' di chuyểnvị trí về bên phải 4 pixel If (x - 60 > ScaleWidth) Then x = 0 ' nếu ảnh đạtlề 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 10.5 Vấn đề in ấntrongVB 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ănbản, đồ họavàảnh bitmap lên 1 form theo ý muốn rồigọi method PrintForm để in form kếtquả ra máy in. Đây là cách dễ dàng nhất để kiểmtrakếtquả trước khi in ra giấythựcsự, nhưng kếtquả có độ phân giải không cao (vì trùng với độ phân giảicủa màn hình). dùng các method vẽ vănbản, đồ họavàảnh bitmap theo ý muốntrựctiếp lên đốitượng Printer cùng 2 method điềukhiển NewPage & EndDoc để xuất kếtquả trựctiếp ra máy in default của Windows. Cách này cho kếtquả có độ phân giải đúng vớimáyin (thường rấtcaoso với độ phân giải màn hình). dùng lệnh Set Printer = Printers(n) để chọnmáyin cụ thể trong danh sách các driver máy in hiệncócủaWindows rồi dùng các method vẽ vănbản, đồ họavàảnh bitmap theo ý muốntrựctiếplênđốitượng Printer cùng 2 method điềukhiển NewPage & EndDoc để xuấtkếtquả trựctiếpramáyin vừachọn. Môn : Tin học Khoa Công nghệ Thông tin Chương 10: Tương tác giữangười dùng & chương trình Trường ĐH Bách Khoa Tp.HCM Slide 288 144