BÀI TH C HÀNH S 1 Ố Ự
(Bu i 1)ổ
M c tiêu sinh viên c n đ t đ c: ạ ượ ụ ầ
Hi u và s d ng đ c h đi u hành Win9x m c đ c b n. ử ụ ể ượ ệ ề ở ứ ộ ơ ả
S d ng t t ti n ích Windows Explorer trong các thao tác qu n lý h th ng file ử ụ ố ệ ệ ố ả
(th m c - folder & file). ư ụ
Quy c ký hi u và thu t ng trong tài li u: ướ ữ ệ ệ ậ
ọ Khi nói v menu, ký hi u a.b.c nghĩa là ch n menu a, r i ch n option b, r i ch n ề ệ ồ ọ ồ ọ
option c trong danh sách dropdown c a submenu b. ủ
Dùng d u '/' miêu t ấ ả ự s tùy ch n ph n t ọ ầ ử ặ bên trái hay bên ph i (a/b nghĩa là a ho c ả
b).
đ ng th i nhi u phím. VD: Ctrl + C nghĩa Dùng d u + đ th hi n vi c b m gi ể ể ệ ệ ấ ấ ữ ồ ề ờ
phím Ctrl r i n th phím C r i th phím Ctrl. là n gi ấ ữ ồ ấ ả ả ồ
right click nghĩa là V cách s d ng chu t: ử ụ ộ click nghĩa là b m-th phím chu t trái, ề ấ ả ộ
b m-th phím chu t ph i, ấ ơ ả double-click nghĩa là click nhanh 2 l n liên ti p (nhanh h n ế ầ ả ộ
thông s qui đ nh v Mouse trong Control Panel c a Windows. ủ ề ố ị
N i dung chính ph n th c hành: ự ộ ầ
1. S l t b bàn phím và chu t (đ c nhà) ơ ượ ề c v cách s d ng các thi ử ụ ế ị ọ ở ộ
t 1 phiên làm vi c trên Windows 9x. 2. Kh i đ ng, t ở ộ ắ ệ
3. Gi i thi u màn hình làm vi c Windows ớ ệ ệ
4. M (Load), t t ch ng trình Windows Explorer ở ắ ươ
5. Gi i thi u màn hình làm vi c WE. ớ ệ ệ
6. T o th m c (folder)/file ư ụ ạ
7. Copy, Paste th m c/file ư ụ
8. Move th m c/file ư ụ
9. M (Load) file ở
10. Thay đ i thu c tính th m c/file ộ ư ụ ổ
176
11. Thay đ i tên th m c/file ư ụ ổ
12. Tìm ki m th m c/file ư ụ ế
13. Delete th m c/file ư ụ
14. Format đĩa m mề
15. Qui đ nh n/hi n th các th m c/file có thu c tính Hidden/System ư ụ ị ẩ ể ộ ị
16. n/hi n 1 s ph n t ầ ử Ẩ ệ ố giao di n c a WE. ệ ủ
N i dung chi ti t: ộ ế
1 S l t b bàn phím và chu t (đ c nhà) ơ ượ ề c v cách s d ng các thi ử ụ ế ị ọ ở ộ
Chu t và bàn phím là hai thi t b nh p d li u/l nh đi u khi n th ộ ế ị ậ ữ ệ ệ ề ể ườ ng dùng nh t. Sinh viên ấ
c cách s d ng chúng trong Windows và trong các ch c n n m đ ắ ầ ượ ử ụ ươ ệ ng trình so n th o tài li u ạ ả
(c a s so n code trong Visual Basic, Winword, c a s so n đ h a c a Paint, Corel Draw!…). ử ổ ạ ử ổ ạ ồ ọ ủ
1.1 Bàn phím (keyboard)
Bàn phím là thi t b nh p d li u chu n hi n nay (có th thay đ i trong t ng lai). Bàn ế ị ữ ệ ệ ể ẩ ậ ổ ươ
phím hi n nay thông th ng có t 101 đ n 105 phím, đ c chia làm các nhóm chính: ệ ườ ừ ế ượ
Nhóm các phím ch c năng g m: ứ ồ
ề F1-F12: các phím ch c năng c a ph n m m (ch c năng c a chúng do ph n m m ề ứ ủ ứ ủ ầ ầ
đang ch y qui đ nh). ạ ị
Capslock: qui đ nh vi c nh p ch hoa hay ch th ng. Đèn capslock góc trên ữ ườ ữ ệ ậ ị ở
bên ph i bàn phím hi n th thông tin tr ng thái phím capslock: sáng = đánh ch hoa, ữ ể ạ ả ị
không sáng = đánh ch th ng. ữ ườ
Enter: dùng đ k t thúc vi c nh p li u trong 1 textbox h u kh i đ ng vi c yêu ở ộ ể ế ệ ệ ệ ậ ầ
c u h th ng th c hi n m t ch c năng nào đó ho c đ a con tr xu ng đ u hàng sau ầ ệ ố ự ứ ư ệ ặ ầ ộ ỏ ố
trong các ch ng trình so n th o văn b n. ươ ả ạ ả
Shift: dùng kèm v i phím khác đ nh p ch th ng/hoa hay 1 trong 2 ký t đ ữ ườ ể ậ ớ ự ượ c
kh c trên phím n đó theo qui đ nh sau : ắ ấ ị
Gi shift và b m các phím có hai ký t đ nh p ký t phía trên. ữ ấ ự ể ậ ự ở
Gi
shift và b m ký t ch đ chuy n đ i cách đánh t m th i t hoa sang th ng và ữ ấ ự ữ ể ờ ừ ể ạ ố ườ
ng c l ượ ạ i (ph thu c vào tr ng thái Capslock). ạ ụ ộ
177
Backspace (‹ d i phím F12): xóa ký t ướ ự bên trái con tr . ỏ
Delete: xóa ký t ngay t i v trí con tr hay xóa các file/ folder đã ch n. ự ạ ị ỏ ọ
Print screen: in màn hình hi n t i vào Clipboard. ệ ạ
Nhóm các phím ký t a-z, ký s t 0-9…: t ự ừ ố ừ
Các phím này th ườ ể ạ ng dùng đ nh p d li u hay k t h p v i các phím đi u khi n đ t o ế ợ ữ ệ ể ề ể ậ ớ
phím t trên. ắ t. Đ ý cách k t h p v i phím Shift đã trình bày ớ ế ợ ể ở
Nhóm các phím đi u khi n: ề ể
Các phím mũi tên: ,,, : dùng đ di chuy n con tr trong trình so n th o. ể ể ạ ả ỏ
Các phím Home, End đ d i màn hình v đ u hay cu i tài li u. ề ầ ể ờ ệ ố
Các phím Page Up, Page Down đ cu n lên hay xu ng 1 trang màn hình. ể ộ ố
Ctrl, Alt: th ườ ộ ng dùng k t h p v i các phím khác ho c chu t đ th c hi n m t ộ ể ự ế ợ ệ ặ ớ
công vi c nào đó. ệ
Thanh space: thanh dài phía d i các ký t ướ ự ữ ch , dùng đ nh p ký t ể ậ ự ố ặ tr ng (m c
dù không th y nh ng có đ r ng nh t đ nh). ấ ị ộ ộ ư ấ
Phím c a s Windows (có th có ho c không tùy bàn phím) hai bên thanh space, ử ổ ể ặ ở
có d ng lá c hình c a s đang bay, th ng t ử ổ ạ ờ ườ ươ ứ ế ợ ng ng v i vi c b m Start hay k t h p ệ ấ ớ
v i m t s phím khác đ th c hi n ch c năng gì đó trong Windows. ệ ớ ể ự ộ ố ứ
Nhóm phím s NumPad: ố
n m bên ph i bàn phím, ch có tác d ng khi đèn numlock (đi u khi n b ng phím num lock) ằ ụ ề ể ằ ả ỉ
sáng. Trong tr ng h p đèn numlock t t thì ý nghĩa các phím này đ c kh c phía d i các ườ ợ ắ ượ ắ ướ
s .ố
ouse) 1.2 Chu t (mộ
Có hai đ n 3 nút nh n. M t s thao tác trên chu t : ộ ố ế ấ ộ
Move: d i con tr chu t theo h ờ ỏ ộ ướ ng mong mu n đ đ n đ i t ố ể ế ố ượ ng c n x lý. ầ ử
Click: n và nh nút trái chu t đ ch n m t file, folder hay m t l nh trong menu, ộ ể ọ ộ ệ ấ ả ộ
m t button… ộ
Double click: Click chu t 2 l n đ nhanh, th ng đ m hay đóng m t ch ủ ầ ộ ườ ể ở ộ ươ ng
trình.
178
Right click: n và nh nút ph i đ hi n lên menu ng v i đ i t ả ể ệ ớ ố ượ ứ ả ấ ọ ng đang ch n
(context menu).
2. Kh i đ ng, t ở ộ ắ t m t phiên làm vi c trên Windows 9x. ệ ộ
Kh i đ ng ở ộ = b m nút công t c đi n. ệ ấ ắ
T tắ : ch n menu Start.Shut down, máy có th t ể ự ộ đ ng ng t đi n ho c hi n lên dòng ch ặ ệ ệ ắ ọ ữ
“It’s safe to turn off your computer”, trong tr ườ ắ ng h p sau b n c n b m công t c đi n đ ng t ệ ể ầ ạ ấ ắ ợ
đi n cho máy. Không nên t ệ ắ ằ t b ng cách ch b m nút công t c đi n mà không ch n shutdown ắ ỉ ấ ệ ọ
tr c.ướ
3. Gi i thi u màn hình làm vi c Windows ớ ệ ệ
Màn hình làm vi c Windows (màn hình desktop) có d ng nh hình d i : ư ệ ạ ướ
Nút Start Icon c a các shortcut
n file Thanh taskbar ch a icon các
ủ
đế
ứ
ứ
ng d ng ang ch y ạ đ
ụ
4. M (load), t t ch ng trình Windows Explorer ở ắ ươ
Ngoài 4 cách đã trình bày trong các slide lý thuy t, b n có th ch y WE b ng các cách sau: ể ạ ế ạ ằ
179
Right click vào Start, ch n Explore trong menu m ra. ọ ở
B m đ ng th i phím c a s Windows và ch E. ử ổ ữ ấ ồ ờ
: có th m cùng lúc nhi u c a s WE. L u ý ư ề ử ổ ể ở
Đ t t WE (và các c a s ch ng trình nói chung): click vào d u ể ắ ử ổ ươ ấ ở ả ủ ử góc trên ph i c a c a
ng trình). s (hay ch n menu File.Exit c a ch ổ ủ ọ ươ
5. Gi i thi u màn hình làm vi c WE ớ ệ ệ
Màn hình làm vi c c a WE đã đ c gi i thi u trong slide 41 c a b slide giáo trình. ệ ủ ượ ớ ủ ộ ệ Ở đây
gi i thi u thêm m t s ph n t ớ ộ ố : ầ ử ệ
a m m ề Ổ đĩ (floppy disk)
ổ đĩ ứ a c ng
Các (hard disk)
6. T o th m c (folder), t p tin (file) ư ụ ậ ạ
T o th m c: ư ụ ạ
Đ t o th m c th ng th c hi n các b c sau: ư ụ ể ạ ườ ự ệ ướ
Ch n v trí c n t o th m c. ầ ạ ư ụ ọ ị
Ch n menu File.New.Folder hay right click và ch n New.Folder. ọ ọ
180
H th ng t o ra m t th m c có tên m c đ nh là "New folder" hay "New ư ụ ệ ặ ạ ố ộ ị
folder2,3… B n nên nh p tên m i cho th m c g i nh h n, l u ý tên th m c không ư ụ ợ ư ụ ớ ơ ư ạ ậ ớ
đ c trùng v i tên m t th m c hay file đã có trong cùng m t th m c cha. ượ ư ụ ư ụ ớ ộ ộ
Thí d th c hi n: ụ ự ệ
T o cây th m c sau b t đ u t th m c g c đĩa D : ắ ầ ừ ư ụ ố ư ụ ạ
X:\
Th m c có tên ư ụ là MSSV
Documents
Copied files
Source code
Moved files
Màn hình làm vi c WE sau khi t o cây th m c có d ng sau: ư ụ ệ ạ ạ
181
T o file: ạ
Vi c t o file th ng đ ệ ạ ườ ượ ằ c th c hi n trong các ng d ng. Trong WE có th t o file b ng ể ạ ụ ự ứ ệ
cách:
Ch n v trí th m c c n t o file. ư ụ ầ ạ ọ ị
Ch n menu File.New, ch n option miêu t ki u file mu n t o hay right click vào ọ ọ ả ể ố ạ
ki u file mu n t o. c a s bên ph i và ch n New r i ch n option miêu t ử ổ ả ọ ồ ọ ả ể ố ạ
Nh p tên cho file m i t o, l u ý tên không đ c trùng v i m t tên file đang t n t ớ ạ ư ậ ượ ồ ạ i ộ ớ
trong th m c cha. File m i t o là m t file tr ng. ư ụ ớ ạ ộ ố
Th c hi n: ự ệ
T o file readme.txt (ki u file Text document) và file help.doc (ki u file Microsoft Word) ể ể ạ
trong th m c documents v a t o trên. Sau khi t o xong, n i dung th m c documents nh ừ ạ ở ư ụ ư ụ ạ ộ ư
sau:
182
7. Copy, paste th m c, file ư ụ
Copy /Paste là thao tác r t th ng đ c s d ng. Quy t c chung đ th c hi n Copy/ Paste ấ ườ ượ ử ụ ể ự ệ ắ
c: g m các b ồ ướ
ch n các ph n t c n copy, ầ ử ầ ọ
ch n l nh copy, ọ ệ
xác đ nh v trí th m c đ t các b n copy, ư ụ ặ ả ị ị
ch n l nh paste. ọ ệ
Ch n các ph n t c n copy th ng b ng các cách sau: ầ ử ầ ọ ườ ằ
c n copy trên c a s bên trái ho c bên ph i. Làm hi n th các ph n t ị ầ ử ầ ử ổ ể ặ ả
b ng cách click vào ph n t Ch n m t ph n t ộ ầ ử ằ ầ ử ọ , icon c a ph n t ủ ầ ử chuy n màu ể
đang đ s m nghĩa là ph n t ậ ầ ử ượ c ch n. ọ
Có th ch n nhi u ph n t theo m t trong các sau: ể ọ ầ ử ề ộ
Ctrl + A đ ch n t t c nh ng ph n t ể ọ ấ ả ữ ầ ử trong c a s bên ph i ho c ặ ử ổ ả
Click vào m t ph n t , b m gi phím shift và click vào ph n t khác đ ch n t t c ầ ử ấ ộ ữ ầ ử ể ọ ấ ả
nh ng ph n t ầ ử ằ n m gi a 2 ph n t ữ ầ ử ữ trên ho c ặ
Click vào m t ph n t , b m gi phím Ctrl và click vào các ph n t ầ ử ấ ộ ữ ầ ử ọ khác đ ch n ể
nhi u ph n t r i r c. ầ ử ờ ạ ề
183
đang đ c ch n (màu s m) s lo i b ph n t đó kh i danh sách L u ýư : Click vào ph n t ầ ử ượ ẽ ạ ỏ ầ ử ậ ọ ỏ
đ ượ c ch n. ọ
Ch n l nh copy b ng m t trong các cách sau: ọ ệ ộ ằ
Vào menu Edit, ch n m c Copy ho c ặ ọ ụ
Ctrl + C ho cặ
đã ch n, ch n Copy trong menu hi n ra. Right click vào m t trong các ph n t ộ ầ ử ệ ọ ọ
Xác đ nh v trí đ t các b n copy : ặ ả ị ị
ộ B ng cách click vào th m c n i s ch a b n copy trong c a s bên trái đ hi n lên n i ư ụ ơ ẽ ứ ả ử ổ ể ệ ằ
dung c a th m c đó trong c a s bên ph i. ử ổ ư ụ ủ ả
Ch n l nh paste b ng m t trong các cách sau: ọ ệ ộ ằ
Vào menu Edit, ch n m c Paste ho c ặ ọ ụ
Ctrl + V ho cặ
Right click vào tên th m c hay c a s n i dung th m c ch a ph n t ử ổ ộ ư ụ ư ụ ầ ử ầ ặ c n đ t ứ
b n copy, ch n Paste trong menu hi n ra. ả ệ ọ
Th thu t ậ : đ copy file hay th m c ra đĩa m m, có th th c hi n nhanh h n b ng cách: ư ụ ể ự ủ ề ệ ể ằ ơ
right click vào các ph n t c n copy (mu n copy nhi u ph i ch n tr ầ ử ầ ề ả ố ọ ướ ộ c và right click lên m t
½ Floppy (A).
đã ch n), ch n Send to trong menu xu t hi n, ch n 3 trong nh ng ph n t ữ ầ ử ệ ấ ọ ọ ọ
Th c hi n: ự ệ
Copy th m c C:\windows\fonts vào th m c copied files t o ra trên. ư ụ ư ụ ạ ở
184
Copy các file t ARIAL.TTF đ n ARIBLK.TTF trong th m c copied files\fonts ừ ư ụ ế
vào th m c copied files. ư ụ
ư ụ Copy các file tr file TAHOMA.TTF trong th m c copied files\fonts vào th m c ư ụ ừ
copied files. L u ý xem thông báo sau c a máy: ư ủ
Thông báo d ng trên th ng g p khi ta paste ph n t ạ ườ ầ ử ặ ầ (file hay th m c) vào n i đã có ph n ư ụ ơ
khác trùng tên. Ch n “Yes” n u mu n thay th ph n t đã t n t i b ng ph n t t ử ầ ử ế ế ọ ố ồ ạ ằ ầ ử ớ ọ m i, ch n
t c nh ng ph n t đã t n t “No” n u không mu n thay th , ch n “Yes to All” đ thay th t ế ế ấ ả ữ ầ ử ế ể ọ ố ồ ạ i
m i có cùng tên. b ng ph n t ằ ầ ử ớ
Sau khi th c hi n, cây th m c nh sau: l u ý s l ư ụ ố ượ ự ư ư ệ ng file trong th m c copied files có ư ụ
th khác nhau tùy thu c s l ng font đang dùng trên m i máy. ộ ố ượ ể ỗ
185
8. Move (cut, paste) th m c, file: ư ụ
T ng t ng đ c th c hi n thông qua 4 b c: ươ ự ệ l nh copy, paste l nh move cũng th ệ ườ ượ ự ệ ướ
ch n các ph n t c n move, ầ ử ầ ọ
ch n l nh cut, ọ ệ
xác đ nh v trí đ t các ph n t , ầ ử ặ ị ị
ch n l nh paste. ọ ệ
Các b c 1, 3, 4 hoàn toàn t ng t các b ng ng m c 7. c t ướ ươ ự ướ ươ ứ ở ụ
Th c hi n b c 2 b ng m t trong các cách: ệ ướ ự ằ ộ
Vào menu Edit ch n m c “Cut” ho c Ctrl + X ho c, ụ ặ ặ ọ
Right click vào m t trong nh ng ph n t đ ầ ử ượ ữ ộ ệ c ch n, ch n “Cut” trong menu hi n ọ ọ
ra.
Th c hi n: ự ệ
17. Move th m c documents\copied files\fonts sang th m c moved files t o ra trên. ư ụ ư ụ ạ ở
18. Move toàn b các file trong th m c documents\copied files sang th m c moved files. ư ụ ư ụ ộ
Sau khi th c hi n, cây th m c hi n t i nh sau: l u ý s l ng file trong th m c moved ư ụ ệ ạ ự ệ ố ượ ư ư ư ụ
files có th khác nhau tùy thu c s l ng font đang dùng trên m i máy. ộ ố ượ ể ỗ
186
9. M (load) file ở
Trong ng c nh c a WE, hành đ ng load file s bao g m 2 tác v : n p ng d ng x lý file ạ ứ ữ ả ử ụ ủ ụ ẽ ộ ồ
r i nh nó n p ti p file vào b nh đ s n sàng làm vi c. Có th load file b ng m t trong 2 ồ ớ ể ẵ ệ ế ể ằ ạ ộ ờ ộ
cách sau :
Double click ho c ch n file r i gõ phím Enter ho c ch n file r i ch n menu ặ ặ ọ ọ ồ ọ ồ
File.Open, Windows s load ch ẽ ươ ng trình m c đ nh đ ch ặ ể ươ ị ế ng trình này n p file. N u ạ
windows không xác đ nh đ c ch ng trình m c đ nh, nó s hi n th b ng thông báo ị ượ ươ ẽ ể ị ả ặ ị
yêu c u ch n ch ng trình đ c file nh sau : ầ ọ ươ ư ọ
187
Có th báo cho windows bi t ch ng trình dùng đ m lo i file này trong các l n load sau ể ế ươ ể ở ạ ầ
ọ b ng cách ch n “Always use this program to open these files”. V sau có th thay đ i l a ch n ằ ổ ự ề ể ọ
này b ng cách thay đ i trong ph n thu c tính (m c 10). ụ ằ ầ ổ ộ
N u mu n load file b ng m t ch ng trình t trên, ế ằ ố ộ ươ ự ọ ch n trong c a s Open with ử ổ ở
ch n file c n load, sau đó ch n menu File.Open with… ầ ọ ọ
Th c hi n: ự ệ
Load file readme.txt, sau đó click vào d u X góc ph i trên c a ch ấ ở ủ ả ươ ừ ng trình v a
i (unload). m ra đ đóng l ể ở ạ
10. Thay đ i thu c tính th m c, file ư ụ ộ ổ
Đ xem và thay đ i thu c tính c a file hay th m c, có th th c hi n theo m t trong các ư ụ ể ự ủ ệ ể ổ ộ ộ
cách sau :
Right click vào file hay th m c c n xem thu c tính, ch n “Properties trong menu ư ụ ầ ọ ộ
hi n ra. ệ
Ch n file hay th m c c n xem thu c tính, vào menu File, ch n m c “Properties”. ư ụ ầ ụ ọ ọ ộ
WE hi n th c a s properties nh sau : ị ử ổ ư ể
188
Tên file / th m c ư ụ
Ch ươ để đọ Change…
thay
ng trình m c nh ặ đị c file. Click vào i đổ
để
ướ
c th t ậ đĩ
Kích th Không gian a dành cho file Ngày t o file ạ
ệ
ầ
ỉ
Ngày hi u ch nh g n nh tấ
ấ ầ
ộ
ế
ể
ổ
Ngày truy xu t g n nh t ấ Các thu c tính read-only, hidden, archive. Click vào checkbox k bên đ thay đ i thu c tính.
ộ
11. Đ i tên (rename) file/ folder ổ
Ngoài cách vào properties (m c 10) đ đ i tên file hay th m c, b n có th dùng các cách ư ụ ể ổ ụ ể ạ
sau :
Right click lên file hay th m c c n đ i tên, ch n rename trong menu m i m ra, ư ụ ầ ổ ọ ớ ở
nh p tên m i cho file hay th m c ho c ặ ư ụ ậ ớ
Click vào file hay th m c, ch n menu File, trong đó ch n m c rename, nh p tên ư ụ ụ ậ ọ ọ
m i cho file hay folder. ớ
đang t n t L u ýư : n u tên m i nh p trùng v i tên m t ph n t ầ ử ế ậ ớ ớ ộ ồ ạ i trong th m c, windows ư ụ
không ch p nh n tên m i. ấ ậ ớ
Th c hi n ệ : đ i tên th m c documents thành my_documents, đ i tên file help.doc thành ư ụ ự ổ ổ
document.doc
12. Tìm ki m th m c, file ư ụ ế
N u nh chính xác đ ng d n c a file hay th m c c n truy xu t, b n ch c n duy t cây ế ớ ườ ư ụ ầ ẫ ủ ỉ ầ ệ ấ ạ
th m c và đ n ph n t c n tìm. Tuy nhiên trong 1 s tr ng h p, ta không nh chính xác ư ụ ầ ử ầ ố ườ ế ợ ớ
đ ườ ng d n c a file/th m c c n truy xu t, trong tr ư ụ ầ ẫ ủ ấ ườ ng h p này WE h tr ta tìm ki m thông ỗ ợ ế ợ
ề tin thông qua ch c năng "Search". Ch c năng Search c a WE cho phép ta tìm ki m 1 hay nhi u ứ ứ ủ ế
file/th m c th a mãn 1 s đi u ki n nh sau : ư ụ ố ề ư ệ ỏ
189
pattern c a file/th m c c n tìm ư ụ ầ ủ ư ụ . N u ta nh 1 ph n thông tin v tên file/th m c ế ề ầ ớ
thì ta nên miêu t nó thông qua khái ni m pattern, thí d ta tìm các file *.doc hay các file ả ụ ệ
l*.xls... N u ta không nh gì h t, ta ph i đành miêu t *.*. ế ế ả ớ ả
i trong file c n tìm . N u ta nh file c n tìm ch a 1 chu i ký t 1 chu i ký t ỗ t n t ự ồ ạ ầ ứ ế ầ ỗ ớ ự
nào đó, càng dài càng t t, thì ta miêu t chu i này. N u không ta đành d tr ng tiêu ố ả ễ ố ế ỗ
chu n này. ẩ
c n tìm n m v trí th m c xu t phát vi c tìm ki m ị ư ụ ế . N u ta nh rõ ph n t ầ ử ầ ằ ở ệ ế ấ ớ
nhánh con c a 1 th m c nào đó thì ta miêu t ư ụ ủ ả ư ụ ọ th m c này. N u không ta đành ch n ế
th m c g c c a đĩa. ư ụ ố ủ ổ
Đ tìm ki m m t file hay th m c, có th th c hi n nh sau : ư ụ ể ự ư ể ế ệ ộ
Ch n menu View.Explorer bar.Search (hay icon Search trên Toolbar), WE s có ẽ ọ
trang k (l u ý c a s bên trái đã thay đ i t d ng cây sang d ng khác). d ng ạ ở ử ổ ế ư ổ ừ ạ ạ
Nh p pattern c a file hay th m c c n tìm, có th dùng nh ng ký t ư ụ ầ ủ ữ ể ậ ự ế ớ thay th v i ý
nghĩa sau :
ký t
? thay th cho b t kỳ, ự ế m tộ ký t ự ấ
ký t
* thay th cho b t kỳ. ự ế 0 hay nhi uề ký t ự ấ
t c nh ng t p tin có ki u là vbp (file project c a VB) dùng chu i tên Ví dụ: đ tìm t ể ấ ả ữ ủ ể ậ ỗ
tìm ki m *.vbp ế
Đ tìm t t c nh ng t p tin có ki u vbp có tên b t đ u b ng A, k t thúc b ng B và ể ấ ả ắ ầ ữ ể ế ằ ằ ậ
tên ch có 4 ký t ta dùng chu i tên tìm ki m A??B.vbp. ỉ ự ế ỗ
Có th nh p chu i ký t ậ ể ỗ ự ế trong file c n tìm vào textbox "Containing text :", n u ầ
không đ tr ng. ể ố
Ch n khu v c tìm ki m, n u ch n my computer là tìm ki m trong toàn b máy. ự ế ế ế ọ ọ ộ
Click button “Search Now”.
L u ýư : đ k t qu tìm ki m chính xác h n có th b sung m t s options trong “Search ộ ố ể ổ ể ế ế ả ơ
options”.
ư
ả
V trí ch a file/th ứ m c c n tìm ầ
ị ụ
Pattern c n tìmầ
K t qu tìm ế ki m ế
chu i c n tìm ỗ ầ
Tùy ch n ọ để t ng thông tin ă tìm ki mế
190
Th c hi n: ự ệ
Tìm ki m t t c nh ng t p tin có tên b t đ u b ng A, k t thúc b ng L, ki u là ế ấ ả ắ ầ ữ ế ể ằ ằ ậ
TTF (chu i tên tìm ki m là A*L.TTF). ế ỗ
13. Delete th m c, file ư ụ
Đ delete m t hay nhi u file hay th m c (g i chung là ph n t ) có th th c hi n theo cách ọ ư ụ ầ ử ể ự ệ ề ể ộ
sau:
Ch n các ph n t mu n delete r i, ầ ử ọ ố ồ
Ch n menu File.Delete hay b m phím delete trên bàn phím r i, ấ ọ ồ
Ch n Yes trong h p tho i hi n ra. ộ ệ ạ ọ
b xóa vào m t n i đ c bi t g i là L u ýư : Khi xóa theo cách trên, Windows s đ ph n t ẽ ể ầ ử ị ộ ơ ặ ệ ọ
Recycle bin, sau này có th vào đó đ ph c h i l i đ ể ụ ồ ạ ượ ể ấ c. N u mu n xóa vĩnh vi n thì b n b m ễ ế ạ ố
gi trên. ữ phím Shift khi th c hi n thao tác 2 ự ệ ở
191
Th c hi n: ự ệ
trên. Xóa vĩnh vi n toàn b n i dung th m c có tên là mã s sinh viên đã t o ra ư ụ ộ ộ ễ ạ ố ở
14. Format đĩa m mề
Đĩa m m đang s d ng đôi khi c n format đ “làm s ch” đĩa và góp ph n làm tăng kh ử ụ ể ề ầ ạ ầ ả
L u ý là m t khi đã format thì thông tin trên đĩa s m t h t năng s d ng đĩa. ử ụ ậ ầ ẽ ấ ế , vì v y c n ư ộ
Tuy t đ i không đ c format b t c đĩa c ng nào . h t s c c n th n v i thao tác này. ế ứ ẩ ậ ớ ệ ố ượ ấ ứ ứ
Đ format đĩa m m có th th c hi n nh sau: ể ự ư ệ ề ể
B đĩa m m vào đĩa r i ồ ề ỏ
Right click vào ổ ị ộ đĩa m m, ch n Format… trong menu hi n ra. WE hi n th h p ệ ề ể ọ
tho i sau: ạ
Dung l
ượ
ng a đĩ
Ki u h th ng file ệ ố
ể
Nhãn a (có th ánh nhãn m i) ể đ
đĩ
ớ
Tùy ch n: ọ
ấ đĩ
Quick format : format nhanh, th c ch t ch xóa ỉ ự thông tin trên a, không ch n s là format ch m.
ẽ
ậ
ọ
B m start
format
ấ
để
15. Qui đ nh n/hi n th các th m c/file có thu c tính Hidden/System ư ụ ị ẩ ộ ể ị
B n có th qui đ nh cho WE hi n th /không hi n th các file/th m c có thu c tính hidden ư ụ ể ể ể ạ ộ ị ị ị
b ng cách vào menu View.Folder options (trên Win 9x) hay Tools.Folder options (trên WinMe hay ằ
ng ng. Win2000), ch n tab View, duy t tìm m c "Hidden files" và click vào m c ch n t ụ ọ ươ ứ ụ ệ ọ
192
T ng t ươ ự ể ệ , đ WE hi n th /không hi n th các file/th m c có thu c tính system, b n duy t ư ụ ể ể ạ ộ ị ị
tìm m c "Hide protected operating system files" và ch n checkbox t ng ng. ụ ọ ươ ứ
16. n/hi n 1 s ph n t ố ầ ử Ẩ ệ giao di n c a WE ệ ủ
B n có th qui đ nh cách hi n th các ph n t ầ ử ủ ệ c a màn hình làm vi c WE, thí d n/hi n ệ ụ ẩ ể ể ạ ị ị
các ph n t giao di n c a WE. Đ n/hi n m t ph n t trên giao di n WE, nguyên t c chung là ầ ử ệ ủ ầ ử ể ẩ ệ ộ ệ ắ
vào menu View, sau đó ch n/ b ch n ph n t c n n/hi n. ỏ ọ ầ ử ầ ẩ ệ ọ
Vào Menu View.Toolbars đ n/hi n các thanh tool bar nh : Standard Buttons là ể ẩ ư ệ
thanh công c ch a các button chu n th hi n nh ng ch c năng th ng dùng, Address ụ ứ ể ệ ữ ứ ẩ ườ
đang tích c c c a s bar là thanh đ a ch ch a đ ị ỉ ứ ườ ng d n đ n th m c ch a ph n t ư ụ ầ ử ứ ế ẫ ự ở ử ổ
bên trái…
193
Vào Menu View/Explorer bar đ ch n thông tin hi n th c a s bên trái: Search: ể ọ ể ị ở ử ổ
hi n th ph n tìm ki m, Favorites: hi n th nh ng trang Web a thích, History: hi n th ị ữ ư ể ể ể ế ầ ị ị
l ch s truy xu t th m c, file trên máy, Folders: hi n th thông tin c u trúc hình cây h ị ư ụ ử ể ấ ấ ị ệ
th ng th m c trong máy (th ng s d ng nh t). ư ụ ố ườ ử ụ ấ
Ch n/c m m c Status bar đ hi n th hay không thanh tr ng thái c a WE. ị ọ ấ ể ể ủ ụ ạ
194
BÀI TH C HÀNH S 2 Ố Ự
(Bu i 2)ổ
M c tiêu sinh viên c n đ t đ ạ ượ : c ụ ầ
Làm quen v i môi tr ng l p trình VB. ớ ườ ậ
Thi t k tr c quan đ c các ph n t giao di n c a ch ng trình. ế ế ự ượ ầ ử ệ ủ ươ
T o đ
c các th t c x lý bi n c và vi t code cho các th t c này. ạ ượ ủ ụ ử ế ố ế ủ ụ
Các thao tác thi t k tr c quan và vi t code t p trung trên ch ng trình thí d : trình gi ế ế ự ế ậ ươ ụ ả i
ph ng s th c v i form giao di n nh sau : ươ ng trình b c 2 trong tr ậ ườ ố ự ớ ư ệ
ng 4 đ ch y VB, t o project GiaiPTrinhBac2, thi t k form giao 1. Tham kh o các slide ả ch ở ươ ể ạ ạ ế ế
di n và t o các th t c x lý bi n c cho các ph n t ng có ủ ụ ử ế ố ầ ử ệ ạ giao di n. C a s VB đ u tiên th ử ổ ệ ầ ườ
d ng sau : ạ
195
2. Ch n Tab New (default), ch n icon "Standard EXE" (default), ch n button Open đ t o Project ể ạ ọ ọ ọ
VB d ng đ n gi n (d ng dialog box). C a s VB s có d ng sau: ử ổ ẽ ạ ạ ạ ả ơ
196
3. n chu t vào button c a form "Project1 - Form1 (Form)" đ phóng to nó ra h t vùng làm Ấ ộ ủ ể ế
vi c c a VB, c a s VB s có d ng : ử ổ ệ ủ ẽ ạ
197
i ph i c a form Form1, n gi và drag chu t t i v trí m i đ thay 4. D i chu t v handle d ộ ề ờ ướ ả ủ ấ ữ ộ ớ ị ớ ể
giao di n c a ch đ i kích th ổ ướ c form cho l n h n h u ch a đ các ph n t ầ ớ ơ ứ ủ ầ ử ệ ủ ươ ạ ng trình. T o
frame "Nhap thong so cho chuong trinh ax^2 + bx + c = 0" b ng cách ch n icon trong Toolbox, ằ ọ
d i chu t t ờ ộ ớ ị i v trí thích h p trong Form r i v 1 hình ch nh t ch a ph n t ồ ẽ ữ ậ ầ ừ ứ ợ frame, hi u ch nh ệ ỉ
i thông s Caption c a frame trong c a s thu c tính góc d i ph i màn hình v n i dung l ạ ử ổ ủ ố ộ ở ướ ề ộ ả
m i "Nhap thong so cho chuong trinh ax^2 + bx + c = 0". K t qu form có d ng : ế ạ ả ớ
198
5. T o Label "Nhap thong so a :" b ng cách ch n icon trong Toolbox, d i chu t t i v trí thích ạ ằ ọ ộ ớ ị ờ
h p trong frame r i v 1 hình ch nh t ch a ph n t ợ ữ ậ ồ ẽ ầ ừ ứ label, hi u ch nh l ệ ỉ ạ ủ i thông s Caption c a ố
góc d i ph i màn hình v n i dung m i "Nhap thong so a :". label trong c a s thu c tính ử ổ ộ ở ướ ề ộ ả ớ
Dùng qui trình t ng t ), hi u ch nh thông s Name ươ ự ạ t o 1 Textbox nh p li u (dùng icon ậ ệ ệ ố ỉ
thành txtA, xóa giá tr thông s Text c a nó. K t qu form có d ng : ủ ế ả ạ ố ị
199
6. L p l i b c 5 cho thông s b (hi u ch nh thu c tính Name c a TextBox th 2 thành txtB). ậ ạ ướ ủ ứ ệ ố ộ ỉ
L p l i b c 5 1 l n n a cho thông s c (hi u ch nh thu c tính Name c a TextBox th 3 thành ậ ạ ướ ầ ữ ứ ủ ệ ố ộ ỉ
txtC). K t qu form có d ng : ả ế ạ
7. Đ ch nh th ng l trái 3 label, n gi nút Ctrl r i l n l t dùng chu t ch n 3 label, label làm ể ỉ ẳ ề ấ ữ ồ ầ ượ ộ ọ
c ch n cu i cùng, thí d label "Nhap thong so a:" trong nh d i đây : chu n v trí s đ ị ẽ ượ ẩ ụ ả ọ ố ướ
200
8. Ch n option Format.Align.Left đ ch nh l trái c a 3 label, k t qu form có d ng : ể ỉ ọ ề ủ ế ả ạ
9. Trong khi 3 label v n còn đ c ch n, hãy ch n option Format.Make Same Size.Both đ ch nh ẫ ượ ể ỉ ọ ọ
3 label có cùng kích th c, r i ch n ti p option Format.Vertical Spacing.Make Equal đ ch nh ướ ể ỉ ế ồ ọ
đ u 3 label theo chi u d c, k t qu form có d ng : ề ề ọ ế ạ ả
10. L p l i các thao tác ch nh trái, ch nh kích th ặ ạ ỉ ỉ ướ ậ c và ch nh d c nh trên cho 3 TextBox nh p ư ọ ỉ
li u, k t qu form có d ng : ế ệ ả ạ
201
11. Ti p t c v button "Bat dau giai" (hi u ch nh thu c tính Name thành Start, Caption thành "Bat ế ụ ẽ ệ ộ ỉ
dau giai"). V frame ch a 2 nghi m i button, hi u ch nh các thu c tính cho các ph n t d ệ ở ướ ứ ẽ ầ ử ệ ộ ỉ
trong frame ch a 2 nghi m nh sau : ứ ư ệ
ph n t frame có thu c tính Caption = "Cac nghiem cua phuong trinh" ầ ử ộ
label 1 có thu c tính Caption = "Nghiem x1 =". ộ
label 2 có thu c tính Caption = "Nghiem x2 =". ộ
TextBox ch a nghi m 1 có thu c tính Name = "txtX1" và Text = "". ộ ứ ệ
TextBox ch a nghi m 2 có thu c tính Name = "txtX2" và Text = "". ộ ứ ệ
K t qu frame có d ng : ế ả ạ
202
12. Ch n Form r i thay đ i Caption (title bar) c a nó v "Giai phuong trinh bac 2", form k t qu ủ ề ế ổ ồ ọ ả
có d ng sau : ạ
13. n kép chu t vào button "Bat dau giai" đ t o hàm x lý s ki n Click chu t cho button này, ự ệ ể ạ Ấ ử ộ ộ
n) c a hàm x lý s ki n s hi n th lên màn hình nh sau: k t qu template (khung s ế ả ườ ự ệ ẽ ể ử ủ ư ị
203
14. Nh p đo n code sau cho hàm x lý s ki n : ự ệ ử ạ ậ
'Th t c x lý s ki n click button "Bat dau giai" ủ ụ ử ự ệ
Private Sub Start_Click()
' Khai báo các bi n c n dùng ế ầ
Dim a As Double
Dim b As Double
Dim c As Double
Dim x1 As Double
Dim x2 As Double
Dim delta As Double
' Đ i chu i nh p v d ng s ề ạ ậ ổ ỗ ố
a = CDbl(txtA.Text)
b = CDbl(txtB.Text)
204
c = CDbl(txtC.Text)
' Tính bi t s delta ệ ố
delta = b * b - 4 * a * c
t s delta ' Ki m tra bi ể ệ ố
If (delta < 0) Then
txtX1 = "Vo nghiem"
txtX2 = "Vo nghiem"
Else
' Tính 2 nghi m th c ự ệ
x1 = (-b - Sqr(delta)) / (2 * a)
x2 = (-b + Sqr(delta)) / (2 * a)
' Đ i 2 nghi m th c v d ng chu i và hi n th lên form ự ề ạ ể ệ ỗ ổ ị
txtX1 = CStr(x1)
txtX2 = CStr(x2)
End If
End Sub
15. Ch n menu Run.Start đ ch y th ch ng trình, n u b n làm đúng 14 b c tr c và không ể ạ ử ươ ọ ế ạ ướ ướ
có sai sót, ch ng trình s ch y đ c. Th nh p 3 thông s a,b,c c a 1 ph ng trình b c 2 mà ươ ẽ ạ ượ ử ậ ủ ố ươ ậ
t nghi m r i n button và xem k t qu . B n có quy n gi i bao nhiêu ph ng trình b n đã bi ạ ế ả ạ ồ ấ ệ ế ề ả ươ
cũng đ c. Lúc nào mu n d ng ch ượ ố ừ ươ ng trình b n có th n chu t vào button ể ấ ạ ộ ở ả góc trên ph i
form ch ng trình. ươ
16. Đ l u l i Project VB v a t o đ c đ s d ng l i sau đó, b n ch n menu File.Save Project ể ư ạ ừ ạ ượ ể ử ụ ạ ạ ọ
r i xác đ nh th m c ch a các file c a Project. ồ ư ụ ứ ủ ị
205
BÀI TH C HÀNH S 3 Ố Ự
(Bu i 3,4,5) ổ
M c tiêu sinh viên c n đ t đ ạ ượ : c ụ ầ
Làm quen v i môi tr ng l p trình VB. ớ ườ ậ
Thi t k tr c quan đ c các ph n t giao di n c a ch ng trình. ế ế ự ượ ầ ử ệ ủ ươ
T o đ
c các th t c x lý bi n c và vi t code cho các th t c này. ạ ượ ủ ụ ử ế ố ế ủ ụ
Các thao tác thi t k tr c quan và vi t code t p trung trên ch ng trình thí d : trình ế ế ự ế ậ ươ ụ
MiniCalculator gi ả ậ ủ l p máy tính tay v i giao di n gi ng nh trình Calculator c a ư ệ ớ ố
Windows ch đ Standard. ở ế ộ
ng 4 đ ch y VB, t o project MiniCalculator, thi t k form 1. Tham kh o các slide ả ch ở ươ ể ạ ạ ế ế
giao di n và t o các th t c x lý bi n c cho các ph n t giao di n : ủ ụ ử ế ố ầ ử ệ ạ ệ
S d ng menu Format đ đ nh d ng các command button và text box nh ý. Các ch c năng h ử ụ ể ị ư ứ ạ ỗ
tr trong menu format: ợ
Align – Left: canh trái th ng hàng các đ i t ng giao di n. ố ượ ẳ ệ
ng giao di n. Align – Right: canh ph i th ng hàng các đ i t ả ố ượ ẳ ệ
Align – Top: canh c nh trên th ng hàng các đ i t ng giao di n. ố ượ ạ ẳ ệ
Align – Bottom: canh c nh d i th ng hàng các đ i t ng giao di n. ạ ướ ố ượ ẳ ệ
ng giao di n theo chi u d c. Align – Center: canh gi a th ng hàng các đ i t ữ ố ượ ẳ ề ọ ệ
ng giao di n theo chi u ngang. Align – Middle: canh gi a th ng hàng các đ i t ữ ố ượ ẳ ệ ề
ng. Make Same Size – Width: t o chi u ngang b ng nhau gi a các đ i t ề ố ượ ữ ằ ạ
Make Same Size – Height: t o chi u cao b ng nhau gi a các đ i t ng. ố ượ ữ ề ằ ạ
Make Same Size – Both: t o các đ i t ố ượ ạ ng b ng nhau c chi u ngang và chi u cao. ề ề ằ ả
Horizontal Spacing – Make Equal: các đ i t ng d li u cách đ u nhau theo chi u ngang ố ượ ữ ệ ề ề
Vertical Spacing – Make Equal: các đ i t ng d li u cách đ u nhau theo chi u d c. ố ượ ề ọ ữ ệ ề
206
Thi t l p các thu c tính cho các đ i t ng giao di n trên form l n l t t ế ậ ố ượ ộ ầ ượ ừ ệ ố trên xu ng
d trái sang ph i theo qui c sau : i, t ướ ừ ả ướ
Caption = , Name = cmdMemStatus
Caption = MC, Name = cmdMC
Caption = MR, Name = cmdMR
Caption = MS, Name = cmdMS
Caption = MA, Name = cmdMA
Caption = 0, Name = cmd0
Caption = 1, Name = cmd1
Caption = 2, Name = cmd2
Caption = 3, Name = cmd3
Caption = 4, Name = cmd4
Caption = 5, Name = cmd5
Caption = 6, Name = cmd6
Caption = 7, Name = cmd7
Caption = 8, Name = cmd8
Caption = 9, Name = cmd9
Caption = +, Name = cmdAdd
Caption = -, Name = cmdSub
Caption = *, Name = cmdMul
Caption = /, Name = cmdDiv
Caption = +/-, Name = cmdPosNeg
Caption = ., Name = cmdPoint
Caption = =, Name = cmdEqual
Caption = 1/x, Name = cmd1x
Caption = %, Name = cmdPercent
207
Caption = sqrt, Name = cmdSqrt
Caption = C, Name = cmdC
Caption = CE, Name = cmdCE
Caption = Backspace, Name = cmdBack
Text = 0., Name = txtDisplay, Alignment = 1 – Right Justify, Locked = True
T o th t c x lý bi n c Click cho t ng button t trên xu ng, t trái sang r i vi t code ủ ụ ử ế ố ừ ạ ừ ố ừ ồ ế
cho các th t c x lý bi n c : ủ ụ ử ế ố
a. Đ nh nghĩa các h ng g i nh và các thu c tính d li u c a form MiniCalculator ữ ệ ủ ợ ớ ộ ằ ị
Option Explicit ' Yêu c u m i bi n đ u ph i đ c đ nh nghĩa ả ượ ị ề ế ầ ọ
' Đ nh nghĩa các h ng g i nh c n dùng trong form ớ ầ ằ ợ ị
Const IDC_EQUAL = 0
Const IDC_ADD = 1
Const IDC_SUB = 2
Const IDC_MUL = 3
Const IDC_DIV = 4
Const IDC_POSNEG = 5
Const IDC_PERCENT = 6
' Thu c tính l u gi 2 ngôi ư ộ ữ giá tr toán h ng 1 c a toán t ạ ủ ị ử
Private strOldValue As String
' Thu c tính l u gi mã toán t 2 ngôi ch a đ ư ộ ữ ử ư ượ c th c hi n ệ ự
Private bytOperatorId As Byte
' Thu c tính l u gi giá tr c a b nh c a Calculator ư ộ ữ ị ủ ộ ớ ủ
Private strMemValue As String
' Thu c tính miêu t tr ng thái nh p li u (ký s đ u/ký s sau đó) ộ ả ạ ố ầ ệ ậ ố
Dim blnStartData As Boolean
208
b. L p trình x lý thao tác nh p d li u ậ ữ ệ ử ậ
Khi b m m t nút nh p ký s , có 2 tr ng h p x y ra: ấ ậ ố ộ ườ ả ợ
- D li u b t đ u đ ữ ệ ắ ầ ượ ể c nh p: khi đó ta s thay d li u hi n th m c đ nh c a textbox hi n ị ặ ị ữ ệ ủ ể ẽ ậ
th b ng d li u s t ng ng. ữ ệ ố ươ ứ ị ằ
- D li u đang trong quá trình nh p: khi đó ta s thêm d li u v a đ ậ ữ ệ ừ ượ ữ ệ ẽ ả c nh p vào bên ph i ậ
chu i d li u đang nh p trên textbox hi n th . ị ậ ổ ữ ệ ể
Đ miêu t tr ng thái nh p li u (ký s đ u/ký s sau đó), ta s s d ng bi n blnStartData có ể ả ạ ẽ ử ụ ố ầ ệ ế ậ ố
ki u là Boolean. ể
c n : Đ nh nghĩa th t c c p nh t giá tr hi n th c a Calculator sau khi 1 phím đ ị ể ủ ụ ậ ị ủ ậ ị ượ ấ
'Hieu chinh giá tri Display
Private Sub UpdateDisplay(digit As Byte)
If blnStartData Then
txtDisplay.Text = Str(digit)
blnStartData = False
Else
txtDisplay.Text = txtDisplay.Text & digit
End If
End Sub
' Th t c ph c v phím 0 ụ ụ ủ ụ
Private Sub cmd0_Click()
UpdateDisplay (0)
End Sub
' Th t c ph c v phím 1 ụ ụ ủ ụ
Private Sub cmd1_Click()
209
UpdateDisplay (1)
End Sub
' Th t c ph c v phím 2 ụ ụ ủ ụ
Private Sub cmd2_Click()
UpdateDisplay (2)
End Sub
' Th t c ph c v phím 3 ụ ụ ủ ụ
Private Sub cmd3_Click()
UpdateDisplay (3)
End Sub
' Th t c ph c v phím 4 ụ ụ ủ ụ
Private Sub cmd4_Click()
UpdateDisplay (4)
End Sub
' Th t c ph c v phím 5 ụ ụ ủ ụ
Private Sub cmd5_Click()
UpdateDisplay (5)
End Sub
' Th t c ph c v phím 6 ụ ụ ủ ụ
Private Sub cmd6_Click()
UpdateDisplay (6)
210
End Sub
' Th t c ph c v phím 7 ụ ụ ủ ụ
Private Sub cmd7_Click()
UpdateDisplay (7)
End Sub
' Th t c ph c v phím 8 ụ ụ ủ ụ
Private Sub cmd8_Click()
UpdateDisplay (8)
End Sub
' Th t c ph c v phím 9 ụ ụ ủ ụ
Private Sub cmd9_Click()
UpdateDisplay (9)
End Sub
' Th t c x lý d u . th p phân ủ ụ ử ậ ấ
Private Sub cmdPoint_Click()
If blnStartData Then
txtDisplay.Text = "0."
blnStartData = False
Else
If InStr(1, txtDisplay.Text, ".") = 0 Then
If Not blnStartData Then
txtDisplay.Text = txtDisplay.Text & "."
211
End If
End If
End If
End Sub
1 ngôi c. L p trình x lý các toán t ử ậ ử
G m các toán t nh +/-, sqrt, 1/x. Ta s th c hi n tính toán tr c ti p và tr k t qu l i trên ồ ử ư ự ế ẽ ự ả ế ả ạ ệ
màn hình. Các th t c x lý các toán t ủ ụ ử ử này nh sau : ư
' Th t c đ i s d ng --> âm và ng ủ ụ ổ ố ươ i c l ượ ạ
Private Sub cmdPosNeg_Click()
'Neu la so am thi doi dau thanh so duong, bo dau tru di
'con neu dang la so duong thi them dau tru de thanh so am
If InStr(1, txtDisplay.Text, "-") = 0 Then
'Neu la so 0 thi khong can bo dau
If CDbl(txtDisplay.Text) <> 0 Then
txtDisplay.Text = "-" & txtDisplay.Text
End If
Else
txtDisplay.Text = Right(txtDisplay.Text, Len(txtDisplay.Text) - 1)
End If
End Sub
' Th t c l y căn b c 2 ủ ụ ấ ậ
Private Sub cmdSqrt_Click()
Dim dblDispValue As Double
txtDisplay.Text = Str(Sqr(CDbl(txtDisplay.Text)))
212
End Sub
' Th t c tính 1/x ủ ụ
Private Sub cmd1x_Click()
'Kiem tra neu so bi chia la 0 thi bao loi
If CDbl(txtDisplay.Text) = 0 Then MsgBox ("Khong the chia cho 0")
'Lay nghich dao gia tri cua so dang o tren textbox hien thi
txtDisplay.Text = 1 / CDbl(txtDisplay.Text)
End Sub
2 ngôi d. L p trình x lý các toán t ử ậ ử
G m các toán t nh +, -, *, /. Ta s l u gi toán h ng 1 (trên màn display) r i ch ng i dùng ồ ử ư ẽ ư ữ ờ ườ ạ ồ
nh p thêm toán h ng 2 m i th c hi n phép toán. ự ệ ậ ạ ớ
Private Sub Op_Process(op As Byte)
Dim dblOldValue As Double
Dim dblDispValue As Double
dblDispValue = CDbl(txtDisplay.Text)
dblOldValue = Val(strOldValue)
Select Case bytOperatorId
Case IDC_ADD
dblDispValue = dblOldValue + dblDispValue
Case IDC_SUB
dblDispValue = dblOldValue - dblDispValue
Case IDC_MUL
dblDispValue = dblOldValue * dblDispValue
Case IDC_DIV
213
dblDispValue = dblOldValue / dblDispValue
End Select
txtDisplay.Text = Str(dblDispValue)
strOldValue = txtDisplay.Text
bytOperatorId = op
'Tao lai trang thai nhap lieu tu dau cho viec nhap lieu ke tiep
blnStartData = True
End Sub
' Th t c x lý toán t + ủ ụ ử ử
Private Sub cmdAdd_Click()
Op_Process (IDC_ADD)
End Sub
' Th t c x lý toán t - ủ ụ ử ử
Private Sub cmdSub_Click()
Op_Process (IDC_SUB)
End Sub
' Th t c x lý toán t * ủ ụ ử ử
Private Sub cmdMul_Click()
Op_Process (IDC_MUL)
End Sub
' Th t c x lý toán t / ủ ụ ử ử
Private Sub cmdDiv_Click()
214
Op_Process (IDC_DIV)
End Sub
' Th t c x lý toán t = ủ ụ ử ử
Private Sub cmdEqual_Click()
Op_Process (IDC_EQUAL)
End Sub
e. L p trình x lý các phép toán v b nh MS, M+, MR, MC ề ộ ớ ử ậ
Đây là nh ng toán t ữ ử ử x lý b nh (máy tính gi ớ ộ ả ậ ủ l p c a ta ch có 1 b nh ) : c t tr display ộ ấ ị ớ ỉ
vào b nh , c ng d n tr display vào b nh , đ c l ị ớ ọ ạ ị ộ ớ i tr b nh ra display và xóa b nh . ớ ớ ộ ộ ồ ộ ộ
' Th t c c t n i dung dislay vào b nh ủ ụ ấ ộ ộ ớ
Private Sub cmdMS_Click()
strMemValue = txtDisplay.Text
cmdMemStatus.Caption = "M"
blnStartData = True
End Sub
' Th t c c ng tích lũy n i dung dislay vào b nh ộ ủ ụ ộ ộ ớ
Private Sub cmdMA_Click()
'Cong don du lieu vao trong bo nho
If strMemValue <> "" Then
strMemValue = CStr(CDbl(strMemValue) + CDbl(txtDisplay.Text))
Else
strMemValue = txtDisplay.Text
End If
215
'Tao lai trang thai nhap lieu tu dau cho viec nhap lieu ke tiep
blnStartData = True
End Sub
' Th t c xóa b nh ộ ớ ủ ụ
Private Sub cmdMC_Click()
strMemValue = ""
cmdMemStatus.Caption = ""
End Sub
' Th t c đ c b nh ra display ủ ụ ọ ộ ớ
Private Sub cmdMR_Click()
If strMemValue <> "" Then
txtDisplay.Text = strMemValue
blnStartData = True
End If
End Sub
f. L p trình x lý các thao tác khác ử ậ
' Th t c xóa display ủ ụ
Private Sub cmdCE_Click()
'Xoa man hinh
txtDisplay.Text = "0."
blnStartData = True
End Sub
216
' Th t c kh i đ ng Calculator ở ộ ủ ụ
Private Sub cmdC_Click()
blnStartData = True
strMemValue = ""
txtDisplay.Text = "0."
strOldValue = ""
bytOperatorId = IDC_EQUAL
End Sub
' Th t c ch y 1 l n khi form đ c load ủ ụ ạ ầ ượ
Private Sub Form_Load()
Call cmdC_Click
End Sub
' Th t c xóa ký t c a display ủ ụ ự ủ
Private Sub cmdBack_Click()
If Not blnStartData Then
txtDisplay.Text = Left(txtDisplay.Text, Len(txtDisplay.Text) - 1)
End If
If txtDisplay.Text = "" Then
txtDisplay.Text = "0."
blnStartData = True
End If
End Sub
' Th t c x lý phép % ủ ụ ử
217
Private Sub cmdPercent_Click()
Op_Process (IDC_PERCENT)
End Sub
218
BÀI TH C HÀNH THÊM NHÀ Ự Ở
(S 1)ố
M c tiêu sinh viên c n đ t đ ạ ượ : c ụ ầ
Thi t k tr c quan đ c các ph n t giao di n c a ch ế ế ự ượ ầ ử ệ ủ ươ ng trình d ng MDI. ạ
T o đ
c các th t c x lý bi n c và vi t code cho các th t c này. ạ ượ ủ ụ ử ế ố ế ủ ụ
Code ch i quy t các v n đ l ươ ng trình t p trung gi ậ ả ề ượ ế ấ ng giác và hi n th đ h a. ể ị ồ ọ
Ch ng trình th c hành : trình v các t giác ch y trên nhi u c a s đ ng th i có giao ươ ự ẽ ứ ề ử ổ ồ ạ ờ
di n MDI đ ngh nh sau : ị ư ề ệ
219
Chi ti t các menu nh sau : ế ư
Qui trình th c hi n : ự ệ
1. Ch y VB b ng 1 trong các cách đã bi t. ạ ằ ế
220
2. Khi c a s New Project hi n th , ch n icon "VB Application Wizard" nh trên và n button ử ổ ư ể ấ ọ ị
Open.
221
3. B n có th ch n file "profile" ch a các thông tin c u hình c n dùng (đã thi t l p s n cho các ể ọ ứ ấ ầ ạ ế ậ ẵ
Project tr c) r i n button Next đ th c hi n b c ti p theo c a qui trình Wizard. ướ ể ự ệ ướ ế ồ ấ ủ
4. B n ch n checkbox MDI, nh p tên Project r i n button Next đ th c hi n b c ti p theo ể ự ồ ấ ệ ạ ậ ọ ướ ế
c a qui trình Wizard. ủ
222
5. B n có th xây d ng tr c quan menu (trong thí d này b n không c n làm gì ự ự ụ ể ầ ạ ạ b ở ướ ồ c này) r i
n button Next đ th c hi n b c ti p theo c a qui trình Wizard. ấ ể ự ệ ướ ế ủ
223
6. B n có th xây d ng tr c quan toolbar (trong thí d này b n không c n làm gì c này) ự ự ụ ể ầ ạ ạ b ở ướ
c ti p theo c a qui trình Wizard. r i n button Next đ th c hi n b ồ ấ ể ự ệ ướ ế ủ
7. B n có th gi nguyên thi t l p c a c a s này r i n button Next đ th c hi n b ể ữ ạ ế ậ ủ ử ổ ể ự ồ ấ ệ ướ ế c ti p
theo c a qui trình Wizard. ủ
224
8. B n có th gi nguyên thi ể ữ ạ ế ậ ồ ấ t l p c a c a s này (vì không c n truy xu t Internet) r i n ủ ử ổ ầ ấ
button Next đ th c hi n b c ti p theo c a qui trình Wizard. ể ự ệ ướ ế ủ
9. B n ch n checkbox About Box đ VB t o t ạ ự ộ ồ ấ đ ng form About Box cho ng d ng, r i n ứ ụ ể ạ ọ
button Next đ th c hi n b c ti p theo c a qui trình Wizard. ể ự ệ ướ ế ủ
225
10. B n có th t o 1 hay nhi u data form đ truy xu t database (nh ng ng d ng này không ể ạ ụ ứ ư ề ể ấ ạ
c ti p theo c a qui trình Wizard. c n) r i n button Next đ th c hi n b ầ ể ự ệ ướ ế ồ ấ ủ
226
11. B n có th ch n file profile và c t các thông s v a thi t l p lên đó (đ dùng l i cho các ố ừ ể ạ ấ ọ ế ậ ể ạ
ng d ng khác) r i n button Finish đ hoàn t t qui trình Wizard. ứ ồ ấ ụ ể ấ
227
12. C a s ban đ u c a Project v a t o ra. n kép chu t vào tên frmAbout trong c a s Project ầ ủ ử ổ ừ ạ Ấ ộ ử ổ
i theo ý mu n, thí d theo d ng sau : đ hi n th nó r i hi u ch nh l ồ ể ể ệ ị ỉ ạ ụ ạ ố
228
13. n chu t ph i trong c a s Project, ch n menu Add.Form đ t o ra 1 form m i, đ t tên là ử ổ ể ạ Ấ ặ ả ộ ớ ọ
frmInit r i thi t k nó nh sau. Form này đ c dùng đ yêu c u user nh p các thông s v các ồ ế ế ư ượ ố ề ể ậ ầ
giác ch y cho 1 c a s con hi n t i c a ch ng trình. t ứ ử ổ ệ ạ ủ ạ ươ
txtSoTugiacChay
txtSoLuuAnh
txtMaxStep
txtTocDo
cmdOk
14. n kép chu t vào buton Ok đ t o th t c x lý bi n c cho button này r i vi t code cho nó ủ ụ ử ế ố ể ạ Ấ ộ ồ ế
nh sau : ư
Option Explicit
Private Sub cmdOk_Click()
Hide
End Sub
15. n kép chu t vào tên frmDocument trong c a s Project đ hi n th nó r i hi u ch nh l Ấ ộ ử ổ ể ể ệ ồ ỉ ị ạ i
theo m u đ ngh . Đây là form con c a ch ng trình MDI, nó miêu t c t o ra ủ ề ẫ ị ươ ả 1 c a s con đ ử ổ ượ ạ
m i l n ta th c hi n ch c năng New Window. L u ý nó ch a menu theo đ c t ỗ ầ ặ ả ở ứ ự ư ứ ệ ụ ph n m c ầ
đích yêu c u và 2 control : Timer đ đ nh th i và commonDialog đ hi n th các c a s thi ờ ử ổ ể ể ể ị ầ ị ế ậ t l p
thông s máy in. ố
229
16. T o các th t c x lý bi n c cho các option c a menu r i vi t code cho chúng nh sau : ủ ụ ử ế ố ủ ạ ồ ế ư
'============================================
' Code c a các th t c x lý s ki n trong frmDocument ủ ụ ử ự ệ ủ
'============================================
Option Explicit
Private inforec As FormInfo 'record ch a thông tin hi n th c a frmDocument ể ị ủ ứ
Private frmInitAttr As New frmInit' form thi t l p thông s c a frmDocument ế ậ ố ủ
' Th t c x lý s ki n Load form ủ ụ ử ự ệ
Private Sub Form_Load()
StepTimer.Enabled = False ' c m timer làm vi c ệ ấ
Me.BackColor = QBColor(0) ' n n đen ề
ScaleMode = vbPixels ' đ n v tính kích th c là pixel ơ ị ướ
mnuViewToolbar.Checked = False ' t t Toolbar ắ
fMainForm.tbToolBar.Visible = mnuViewToolbar.Checked
mnuViewStatusBar.Checked = True ' hi n th Status bar ị ể
230
fMainForm.sbStatusBar.Visible = mnuViewStatusBar.Checked
Form_Resize
End Sub
' Th t c x lý s ki n v l i form ủ ụ ử ự ệ ẽ ạ
Private Sub Form_Paint()
Set inforec.objFormRef = Me
Cls
End Sub
c form ' Th t c x lý s ki n thay đ i kích th ự ệ ủ ụ ử ổ ướ
Private Sub Form_Resize()
inforec.Xmax = Me.ScaleWidth
inforec.Ymax = Me.ScaleHeight
End Sub
' Th t c x lý s ki n ch n option "Edit.Setup Attributes..." ủ ụ ử ự ệ ọ
Private Sub mnuEditAttr_Click()
StepTimer.Enabled = False ' c m timer ho t đ ng ạ ộ ấ
frmInitAttr.txtSoLuuAnh = CStr(inforec.intSoLuuAnh) ' dùng l ạ i giá tr hi n hành ị ệ
frmInitAttr.txtSoTugiac = CStr(inforec.intSoTugiac)
frmInitAttr.txtMaxStep = CStr(inforec.intMaxStep)
frmInitAttr.txtTocdo = CStr(inforec.intTocdo)
frmInitAttr.Show vbModal ' hi n th form setup ể ị
If Val(frmInitAttr.txtSoLuuAnh) > 0 Then ' x lý s l u nh ố ư ả ử
inforec.intSoLuuAnh = Val(frmInitAttr.txtSoLuuAnh)
231
Else
inforec.intSoLuuAnh = SOLUUANHMAX
End If
If Val(frmInitAttr.txtMaxStep) > 1 Then ' x lý s b ố ướ ử c ch y max ạ
inforec.intMaxStep = Val(frmInitAttr.txtMaxStep)
Else
inforec.intMaxStep = MAXSTEP
End If
If Val(frmInitAttr.txtSoTugiac) > 0 Then ' x lý s t ố ứ ử giác ch y ạ
inforec.intSoTugiac = Val(frmInitAttr.txtSoTugiac)
Else
inforec.intSoTugiac = SOTUGIACMAX
End If
If Val(frmInitAttr.txtTocdo) > 0 Then ' x lý t c đ ch y ố ộ ạ ử
inforec.intTocdo = Val(frmInitAttr.txtTocdo)
Else
inforec.intTocdo = TOCDOMAX
End If
ReDim inforec.DsTugiac(inforec.intSoTugiac) ' t o s t ạ ố ừ giác ch y ạ
Call KhoidongCacTugiac(inforec) ' kh i đ ng chúng ở ộ
StepTimer.Interval = inforec.intTocdo ' cho timer ch y đ hi n th ị ạ ể ể
End Sub
' Th t c t o 1 c a s con m i ủ ụ ạ ử ổ ớ
Private Sub LoadNewDoc()
Dim frmD As frmDocument
232
lDocumentCount = lDocumentCount + 1 ' bi n public này đ c khai báo Module1 ế ượ ở
Set frmD = New frmDocument
frmD.Caption = "Cua so tu giac thu " & lDocumentCount
frmD.Show
End Sub
' Th t c x lý s ki n ch n option "Edit.Start" ủ ụ ử ự ệ ọ
Private Sub mnuEditStart_Click()
StepTimer.Enabled = True
End Sub
' Th t c x lý s ki n ch n option "File.Exit" ủ ụ ử ự ệ ọ
Private Sub mnuFileExit_Click()
Unload fMainForm
End Sub
' Th t c x lý s ki n ch n option "File.Page Setup" ọ ủ ụ ử ự ệ
Private Sub mnuFilePageSetup_Click()
On Error Resume Next
With dlgCommonDialog
.DialogTitle = "Page Setup"
.CancelError = True
.ShowPrinter
End With
End Sub
' Th t c x lý s ki n ch n option "File.Print" ủ ụ ử ự ệ ọ
233
Private Sub mnuFilePrint_Click()
PrintForm
End Sub
' Th t c x lý s ki n ch n option "View.Status Bar" ọ ủ ụ ử ự ệ
Private Sub mnuViewStatusBar_Click()
mnuViewStatusBar.Checked = Not mnuViewStatusBar.Checked
fMainForm.sbStatusBar.Visible = mnuViewStatusBar.Checked
End Sub
' Th t c x lý s ki n ch n option "View.ToolBar" ọ ủ ụ ử ự ệ
Private Sub mnuViewToolbar_Click()
mnuViewToolbar.Checked = Not mnuViewToolbar.Checked
fMainForm.tbToolBar.Visible = mnuViewToolbar.Checked
End Sub
' Th t c x lý s ki n ch n option "Window.Arrange" ọ ủ ụ ử ự ệ
Private Sub mnuWindowArrange_Click()
fMainForm.Arrange vbArrangeIcons
End Sub
' Th t c x lý s ki n ch n option "Window.Cascade" ọ ủ ụ ử ự ệ
Private Sub mnuWindowCascade_Click()
fMainForm.Arrange vbCascade
End Sub
' Th t c x lý s ki n ch n option "Window.New Window" ủ ụ ử ự ệ ọ
234
Private Sub mnuWindowNew_Click()
LoadNewDoc
End Sub
' Th t c x lý s ki n ch n option "Window.Tile Horizontal" ủ ụ ử ự ệ ọ
Private Sub mnuWindowTileHori_Click()
fMainForm.Arrange vbTileHorizontal
End Sub
' Th t c x lý s ki n ch n option "Window.Tile Vertical" ủ ụ ử ự ệ ọ
Private Sub mnuWindowTileVerti_Click()
fMainForm.Arrange vbTileVertical
End Sub
' Th t c x lý s ki n timer out" ủ ụ ử ự ệ
Private Sub StepTimer_Timer()
Call VeCacTugiac(inforec)
End Sub
' Th t c x lý s ki n Help.About" ự ệ ủ ụ ử
Private Sub mnuHelpAbout_Click()
frmAbout.Show vbModal
End Sub
17. n kép chu t vào tên Module1 c a s Project r i thêm l nh đ nh nghĩa bi n toàn c c nh Ấ ộ ở ử ổ ụ ế ệ ồ ị ư
sau :
Public fMainForm As frmMain
Public lDocumentCount As Long ' nh s c a s con đã t o ra ạ
ớ ố ử ổ 235
Sub Main()
Set fMainForm = New frmMain
fMainForm.Show
End Sub
18. n chu t ph i trong c a s Project, ch n menu Add.Module đ t o ra 1 standard module ử ổ ể ạ Ấ ả ộ ọ
XulyTugiac. Module này s ch a các th t c qu n lý và hi n th các t giác m i, đ t tên là ặ ớ ủ ụ ứ ẽ ể ả ị ứ
ch y cho 1 c a s . Ý t ng chính là m i c a s có 1 danh sách các t giác ử ổ ạ ưở ỗ ử ổ ứ giác ch y, m i t ạ ỗ ứ
ch y đ c xác đ nh b i 4 đ nh và các thông s khác nh màu v , b ạ ượ ẽ ướ ư ở ố ị ỉ c ch y tính b ng pixel, góc ằ ạ
ch y tính b ng đ ... M i c a s có 1 timer t o chu kỳ v l ỗ ử ổ ẽ ạ ạ ạ ằ ộ ậ i (tính b ng ms và do user nh p ằ
vào), chu kỳ càng nh thì t c đ ch y càng nhanh (dĩ nhiên còn ph thu c vào b ụ ạ ỏ ố ộ ộ ướ ạ ủ c ch y c a
giác). n kép chu t vào tên XulyTugiac r i vi t code cho 2 th t c public t ng đ nh t ừ ỉ ứ Ấ ộ ồ ế ủ ụ
KhoidongCacTugiac, VeCacTugiac và các th t c d ch v kèm theo nh sau : ủ ụ ị ụ ư
'=========================================================
' Module ch a các th t c qu n lý t ủ ụ ứ ả ứ giác ch y ạ
'=========================================================
Option Explicit
' Đ nh nghĩa các h ng g i nh c n dùng ớ ầ ằ ợ ị
Public Const PI = 3.1416
Public Const SOTUGIACMAX = 20
Public Const SOLUUANHMAX = 50
Public Const MAXSTEP = 20
Public Const TOCDOMAX = 40
' Đ nh nghĩa ki u t a đ c a t ng đi m ể ọ ộ ủ ừ ể ị
Private Type Toado
x As Integer
y As Integer
236
End Type
giác ch y. ' Đ nh nghĩa ki u ch a các thông tin c a 1 t ứ ủ ể ị ứ ạ
Private Type TuGiacChay
intMau As Integer ' màu hi n t i c a t giác ệ ạ ủ ứ
Dinh(4) As Toado ' 4 đ nh c a t giác ủ ứ ỉ
dblBuocChay(4) As Double ' b c ch y tính theo pixel ướ ạ
dblGocChay(4) As Double ' góc ch y tính theo đ ạ ộ
HangLuuanh(SOLUUANHMAX, 4) As Toado
intDauLuuAnh As Integer ' ch s đ u l u nh ỉ ố ầ ư ả
intDuoiLuuAnh As Integer ' ch s đuôi l u nh ư ả ỉ ố
End Type
' Đ nh nghĩa ki u ch a các thông tin c a 1 c a s con ch a các t ử ổ ứ ủ ứ ể ị ứ giác ch y ạ
Public Type FormInfo
objFormRef As Form ' tham kh o đ n c a s ch a các t ế ử ổ ứ ả ứ giác ch y ạ
intSoTugiac As Integer ' s t giác ch y trong c a s ố ự ử ổ ạ
intSoLuuAnh As Integer ' s l u nh ố ư ả
intMaxStep As Integer ' b giác ướ c ch y max c a các đ nh t ủ ạ ỉ ứ
intTocdo As Integer ' t c đ v l i t giác ố ộ ẽ ạ ứ
DsTugiac() As TuGiacChay ' danh sách các t giác trong c a s ứ ử ổ
Xmax As Integer ' đ r ng c a c a s ủ ử ổ ộ ộ
Ymax As Integer ' đ cao c a c a s ủ ử ổ ộ
intMaxColor As Integer ' s màu đ c dùng đ v các t giác ố ượ ể ẽ ứ
End Type
237
'=========================================================
' Hi u ch nh góc ch y c a các đ nh t giác ạ ủ ệ ỉ ỉ ứ
' đ tránh các tr ể ườ ng h p đ nh ch y th ng đ ng hay ngang ẳ ứ ạ ợ ỉ
'=========================================================
Private Function ChinhGocChay(dblGocChay As Double) As Double
If dblGocChay < 20 Then
dblGocChay = 20
ElseIf dblGocChay > 70 And dblGocChay < 90 Then
dblGocChay = 70
ElseIf (dblGocChay < 110 And dblGocChay >= 90) Then
dblGocChay = 110
ElseIf (dblGocChay < 180 And dblGocChay > 160) Then
dblGocChay = 160
ElseIf (dblGocChay < 200 And dblGocChay >= 180) Then
dblGocChay = 200
ElseIf (dblGocChay < 270 And dblGocChay > 250) Then
dblGocChay = 250
ElseIf (dblGocChay < 290 And dblGocChay >= 270) Then
dblGocChay = 290
ElseIf (dblGocChay < 360 And dblGocChay > 340) Then
dblGocChay = 340
End If
ChinhGocChay = dblGocChay
End Function
'=========================================================
238
' Tính góc ph n x m i khi đ nh đ ng thành đ ng (bên trái hay ph i). ụ ạ ỗ ứ ả ả ỉ
'=========================================================
Private Function DoiGocChayX(dblGocChay As Double) As Double
If (dblGocChay > 0 And dblGocChay < 180) Then
dblGocChay = 180 - dblGocChay
Else
dblGocChay = 180 + 360 - dblGocChay
End If
DoiGocChayX = ChinhGocChay(dblGocChay)
End Function
'=========================================================
' Tính góc ph n x m i khi đ nh đ ng thành ngang (trên hay d i). ạ ỗ ụ ả ỉ ướ
'=========================================================
Private Function DoiGocChayY(dblGocChay As Double) As Double
DoiGocChayY = ChinhGocChay(360 - dblGocChay)
End Function
'=========================================================
' Hi u ch nh đ nh DsTugiac(i).Dinh(j) ệ ỉ ỉ
'=========================================================
Private Sub HieuchinhDinh(pview As FormInfo, i As Integer, j As Integer)
Dim tx As Double, ty As Double
Dim x As Integer, y As Integer
Dim Xmax As Integer, Ymax As Integer
With pview
239
x = .DsTugiac(i).Dinh(j).x
y = .DsTugiac(i).Dinh(j).y
If (x = 0 Or x = .Xmax - 1 Or y = 0 Or y = .Ymax - 1) Then
' đ nh đ ng thành ngang hay d c -> thay đ i góc ch y, b ụ ạ ọ ổ ị ướ c ch y và màu v ẽ ạ
If (x = 0 Or x = .Xmax - 1) Then
.DsTugiac(i).dblGocChay(j) = DoiGocChayX(.DsTugiac(i).dblGocChay(j))
ElseIf (y = 0 Or y = .Ymax - 1) Then
.DsTugiac(i).dblGocChay(j) = DoiGocChayY(.DsTugiac(i).dblGocChay(j))
End If
.DsTugiac(i).dblBuocChay(j) = Int(Rnd() * .intMaxStep)
If (.DsTugiac(i).dblBuocChay(j) < 2) Then .DsTugiac(i).dblBuocChay(j) = 2
.DsTugiac(i).intMau = Int(Rnd() * .intMaxColor)
If (.DsTugiac(i).intMau = 0) Then .DsTugiac(i).intMau = .intMaxColor - 1
End If
' Hi u ch nh t a đ x c a đ nh ọ ộ ủ ỉ ệ ỉ
tx = .DsTugiac(i).dblBuocChay(j) * Cos(.DsTugiac(i).dblGocChay(j) * PI / 180#)
x = x + tx
If (x < 0) Then
x = 0
ElseIf (x >= .Xmax) Then
x = .Xmax - 1
End If
' Hi u ch nh t a đ y c a đ nh ọ ộ ủ ỉ ệ ỉ
ty = .DsTugiac(i).dblBuocChay(j) * Sin(.DsTugiac(i).dblGocChay(j) * PI / 180#)
y = y + ty
If (y < 0) Then
240
y = 0
ElseIf (y >= .Ymax) Then
y = .Ymax - 1
End If
' L u t a đ vào v trí cũ ư ọ ộ ị
.DsTugiac(i).Dinh(j).x = Int(x)
.DsTugiac(i).Dinh(j).y = Int(y)
End With
End Sub
'=========================================================
giác DsTugiac(i).HangLuuanh(idx) ' Hi n th t ể ị ứ
'=========================================================
Private Function VeTugiac(pview As FormInfo, i As Integer, idx As Integer, intMau As Integer) As
Long
Dim j As Integer, j1 As Integer
Dim x1 As Integer, y1 As Integer
Dim x2 As Integer, y2 As Integer
With pview
' thi ế ậ t l p màu v và đ n v tính b ng pixel ơ ẽ ằ ị
.objFormRef.ForeColor = QBColor(intMau)
.objFormRef.ScaleMode = 3
' l p v t ng c nh c a t giác ặ ẽ ừ ủ ứ ạ
For j = 0 To 3
x1 = .DsTugiac(i).HangLuuanh(idx, j).x
y1 = .DsTugiac(i).HangLuuanh(idx, j).y
If (j < 3) Then
241
j1 = j + 1
Else
j1 = 0
End If
x2 = .DsTugiac(i).HangLuuanh(idx, j1).x
y2 = .DsTugiac(i).HangLuuanh(idx, j1).y
.objFormRef.Line (x1, y1)-(x2, y2)
Next j
End With
End Function
'=========================================================
' Thi t l p tr ban đ u ng u nhiên cho các t giác ch y trong c a s ế ậ ẫ ầ ị ứ ử ổ ạ
'=========================================================
Public Sub KhoidongCacTugiac(pview As FormInfo)
Dim i As Integer, j As Integer
With pview
Randomize
.intMaxColor = 15
giác trong danh sách ' L p kh i đ ng t ng t ở ộ ừ ặ ứ
For i = 0 To .intSoTugiac - 1
' kh i đ ng màu ở ộ
.DsTugiac(i).intMau = Int(Rnd() * .intMaxColor)
If .DsTugiac(i).intMau = 0 Then .DsTugiac(i).intMau = .intMaxColor - 1
' kh i đ ng ch s đ u và đuôi c a hàng l u nh ỉ ố ầ ở ộ ư ả ủ
.DsTugiac(i).intDauLuuAnh = 0
.DsTugiac(i).intDuoiLuuAnh = 0
242
giác + b c ch y + góc ch y ' kh i đ ng 4 đ nh t ở ộ ỉ ứ ướ ạ ạ
For j = 0 To 3
.DsTugiac(i).Dinh(j).x = Int(Rnd() * .Xmax)
.DsTugiac(i).Dinh(j).y = Int(Rnd() * .Ymax)
.DsTugiac(i).dblBuocChay(j) = Int(Rnd() * .intMaxStep)
If .DsTugiac(i).dblBuocChay(j) < 2 Then .DsTugiac(i).dblBuocChay(j) = 2
.DsTugiac(i).dblGocChay(j) = Int(Rnd() * 360)
.DsTugiac(i).dblGocChay(j) = ChinhGocChay(.DsTugiac(i).dblGocChay(j))
Next j
Next i
End With
End Sub
'=========================================================
' Xóa t giác giác m i, ch a nó vào đ u l u nh r i v nó ứ ở đuôi l u nh, tính t ư ả ứ ầ ư ả ồ ẽ ứ ớ
'=========================================================
Public Sub VeCacTugiac(pview As FormInfo)
Dim i As Integer, j As Integer
With pview
' L p x lý t ng t giác ch y trong danh sách ặ ử ừ ứ ạ
For i = 0 To .intSoTugiac - 1
' Xóa t giác đuôi hàng l u nh ứ ở ư ả
Call VeTugiac(pview, i, .DsTugiac(i).intDuoiLuuAnh, 0)
If (.DsTugiac(i).intDuoiLuuAnh = .intSoLuuAnh - 1) Then
.DsTugiac(i).intDuoiLuuAnh = 0
Else
.DsTugiac(i).intDuoiLuuAnh = .DsTugiac(i).intDuoiLuuAnh + 1
243
End If
' Tính t ứ giác m i ớ
For j = 0 To 3
Call HieuchinhDinh(pview, i, j)
Next j
' ch a t ứ ứ giác m i vào đ u hàng l u nh ầ ư ả ớ
For j = 0 To 3
.DsTugiac(i).HangLuuanh(.DsTugiac(i).intDauLuuAnh, j).x = .DsTugiac(i).Dinh(j).x
.DsTugiac(i).HangLuuanh(.DsTugiac(i).intDauLuuAnh, j).y = .DsTugiac(i).Dinh(j).y
Next j
' v t giác m i đ u hàng l u nh ẽ ứ ớ ở ầ ư ả
Call VeTugiac(pview, i, .DsTugiac(i).intDauLuuAnh, .DsTugiac(i).intMau)
If .DsTugiac(i).intDauLuuAnh = .intSoLuuAnh - 1 Then
.DsTugiac(i).intDauLuuAnh = 0
Else
.DsTugiac(i).intDauLuuAnh = .DsTugiac(i).intDauLuuAnh + 1
End If
Next i
End With
End Sub
244
BÀI TH C HÀNH THÊM NHÀ Ự Ở
(S 2)ố
M c tiêu sinh viên c n đ t đ c: ạ ượ ụ ầ
Thi t k tr c quan đ c các ph n t giao di n c a ch ế ế ự ượ ầ ử ệ ủ ươ ng trình d ng SDI. ạ
T o đ c các th t c x lý bi n c và vi t code cho các th t c này. ạ ượ ủ ụ ử ế ố ế ủ ụ
t, do công ty khác vi t hay S d ng các linh ki n ph n m m có s n (do mình vi ầ ử ụ ệ ề ẵ ế ế
do Microsoft vi t). ế Ở ọ bài t p này ta s dùng linh ki n tên là WebBrowser đ x lý m i ể ử ệ ẽ ậ
ng tác v i ng i dùng,... v n đ Web : download, hi n th , ch t ấ ờ ươ ể ề ị ớ ườ
Ch ng trình th c hành : trình duy t Web tên là MyIE có giao di n SDI đ ngh ươ ự ệ ề ệ ị
nh sau : ư
245
Chi ti t các menu nh sau : ế ư
Qui trình th c hi n : ự ệ
1. Ch y VB b ng 1 trong các cách đã bi t. ằ ạ ế
246
ấ 2. Khi c a s New Project hi n th , ch n icon "VB Application Wizard" nh hình trên và n ử ổ ư ể ọ ị
button Open.
3. B n có th ch n file "profile" ch a các thông tin c u hình c n dùng (đã thi t l p s n cho các ể ọ ứ ấ ầ ạ ế ậ ẵ
Project tr c) r i n button Next đ th c hi n b c ti p theo c a qui trình Wizard. ướ ể ự ệ ướ ế ồ ấ ủ
247
4. B n ch n checkbox SDI, nh p tên Project "MyIE" r i n button Next đ th c hi n b ể ự ệ ướ ồ ấ ạ ậ ọ ế c ti p
theo c a qui trình Wizard. ủ
248
5. B n có th xây d ng t ể ự ạ r c quan menu (trong thí d này b n không c n làm gì ụ ự ầ ạ b ở ướ ồ c này) r i
n button Next đ th c hi n b c ti p theo c a qui trình Wizard. ấ ể ự ệ ướ ế ủ
6. B n có th xây d ng tr c quan toolbar (trong thí d này b n không c n làm gì c này) ự ự ụ ể ầ ạ ạ b ở ướ
c ti p theo c a qui trình Wizard. r i n button Next đ th c hi n b ồ ấ ể ự ệ ướ ế ủ
249
7. B n có th gi nguyên thi t l p c a c a s này r i n button Next đ th c hi n b ể ữ ạ ế ậ ủ ử ổ ể ự ồ ấ ệ ướ ế c ti p
theo c a qui trình Wizard. ủ
250
8. B n ạ nên ch nọ checkbox Yes đ VB thêm các ActiveX Control truy xu t Web vào Project, ể ấ
nh p đ a ch URL c a trang Web default r i n button Next đ th c hi n b c ti p theo c a qui ể ự ệ ướ ồ ấ ủ ậ ỉ ị ủ ế
trình Wizard.
9. B n ch n checkbox About Box đ VB t đ ng t o form AboutBox dùm b n r i n button ể ạ ọ ự ộ ạ ồ ấ ạ
c ti p theo c a qui trình Wizard. Next đ th c hi n b ể ự ệ ướ ế ủ
251
ầ 10. B n có th t o 1 hay nhi u data form truy xu t database (nh ng ng d ng này không c n) ể ạ ư ứ ụ ề ấ ạ
c ti p theo c a qui trình Wizard. r i n button Next đ th c hi n b ồ ấ ể ự ệ ướ ế ủ
252
11. B n có th ch n file profile và c t các thông s v a thi t l p lên đó (đ dùng l i cho các ố ừ ể ạ ấ ọ ế ậ ể ạ
ng d ng khác) r i n button Finish đ k t thúc qui trình Wizard. ứ ể ế ồ ấ ụ
12. C a s ban đ u c a Project v a t o ra có d ng c a hình trên. N u kh o sát k form hi n th ạ ầ ủ ử ổ ừ ạ ủ ể ế ả ỹ ị
t đó là form truy xu t Web. Bây gi b n có th và tên c a nó trong c a s Project thì b n s bi ử ổ ạ ẽ ế ủ ấ ờ ạ ể
ị ch y ng d ng, khi ch y b n ch n menu View.Web Browser thì form frmBrowser s hi n th , ẽ ể ạ ứ ụ ạ ạ ọ
ố b n có th nh p đ a ch URL vào comboBox Address đ truy xu t Web. Tuy nhiên vì mu n ạ ể ể ấ ậ ỉ ị
ch ng trình chính qui h n v i nhi u ch c năng h n nên ta có th xóa form frmBrowser đi và ươ ứ ể ề ớ ơ ơ
thi i c a s chính theo yêu c u c a ch t k l ng trình đ ngh . Nh ng tr c h t hãy n kép ế ế ạ ử ổ ầ ủ ươ ư ề ị ướ ế ấ
vào tên frmAbout trong c a s Project đ hi n th form AboutBox c a ch ử ổ ể ể ủ ị ươ ệ ng trình r i hi u ồ
i theo ý mu n, thí d theo d ng sau : ch nh l ỉ ạ ụ ạ ố
253
13. n kép chu t vào tên frmMain trong c a s Project đ hi n th c a s chính c a ch Ấ ộ ị ử ổ ử ổ ể ể ủ ươ ng
trình. Ch n menu Tool.Menu Editor đ hi u ch nh l i menu c a ch ng trình theo đ c t đ ể ệ ọ ỉ ạ ủ ươ ặ ả ề
ngh ph n m c đích. Sau khi hi u ch nh menu xong thì c a s chính có d ng sau : ị ở ầ ử ổ ụ ệ ạ ỉ
14. Vì Toolbar c a trình MyIE c a ta khác xa Toolbar có s n nên t ủ ủ ẵ ố ẵ t nh t là xóa Toolbar có s n ấ
r i t o Toolbar m i. Sau khi xóa Toolbar, c a s có d ng sau : ồ ạ ử ổ ạ ớ
254
15. Dùng trình so n th o đ h a (nh Paint, Corel Draw!,...) + trình screen capture đ v /copy 9 ể ẽ ồ ọ ư ả ạ
icon Toolbar c a ch ng trình r i c t t ng nh icon lên file bitmap t ng ng (nên c t vào cùng ủ ươ ồ ấ ừ ả ươ ứ ấ
th m c c a Project), thí d nh sau : ư ụ ủ ụ ư
: GoBack.bmp : Goforward.bmp : Stop.bmp
: Refresh.bmp : Home.bmp : Search.bmp
: Favorites.bmp : Print.bmp : Fonts.bmp
16. n ph i chu t vào đ i t ng ImageList, ch n m c Properties đ hi n th c a s thu c tính ố ượ Ấ ả ộ ị ử ổ ể ể ụ ộ ọ
c a nó h u hi u ch nh l ủ ệ ầ ỉ ạ ử i theo mong mu n. Sau khi ch n tab Images trên c a s thu c tính, c a ử ổ ọ ố ộ
s Properties có d ng nh sau : ổ ư ạ
255
17. Ta ch n t ng images r i n button "Remove Picture" đ xóa nó đ n khi không còn images ọ ừ ồ ấ ế ể
nào trong danh sách, lúc này c a s thu c tính có d ng sau : ử ổ ạ ộ
256
18. n button "Insert Picture" đ thêm t ng images vào danh sách, c a s sau đ ừ ử ổ Ấ ế ượ ị ể c hi n th đ ta ể
duy t file và ch n file image c n thêm vào danh sách : ệ ầ ọ
19. Ch n file goback.bmp miêu t icon "Back" r i ch n button Open đ thêm nó vào danh sách, ọ ả ể ọ ồ
c a s thu c tính s có d ng sau : ử ổ ẽ ạ ộ
257
20. Nh p danh hi u nh n d ng image vào textbox "Key", m i l n Toolbox c n 1 icon trong ỗ ầ ệ ầ ậ ạ ậ
ế ụ ImageList, ta có th dùng ch s (Index) hay danh hi u Key c a nó đ g i nh h n. Ti p t c ớ ơ ể ợ ỉ ố ủ ể ệ
thêm t ng image khác và đ t tên cho nó cho đ n khi đã thêm đ 9 images theo yêu c u. Lúc này ừ ủ ế ầ ặ
c a s thu c tính có d ng sau : ử ổ ạ ộ
258
21. n button OK đ hoàn t t vi c hi u ch nh ImageList và tr v c a s chính c a ch Ấ ể ấ ệ ệ ỉ ở ề ử ổ ủ ươ ng
ng ToolBar, n ph i chu t vào nó và ch n m c Properties đ hi n th c a s trình. T o đ i t ạ ố ượ ị ử ổ ể ể ụ ấ ả ọ ộ
thu c tính c a Toolbar : ủ ộ
259
ng ImageList) đ 22. Duy t comboBox "ImageList", ch n m c imlToolbarcons (tên c a đ i t ọ ủ ố ượ ụ ệ ể
khai báo r ng Toolbar dùng các images trong đ i t ng ImageList này. Duy t danh sách Style và ố ượ ằ ệ
260
ch n m c "1-tbrFlat" đ hi n th các icon toolbar không có đ ể ể ụ ọ ị ườ ệ ng vi n. Hình trên cho th y hi n ề ấ
ử tr ng c a c a s thu c tính Toolbar. Ch n tab "Buttons" đ đ nh nghĩa các button Toolbar, c a ủ ử ổ ể ị ạ ộ ọ
s sau s hi n th : ẽ ể ổ ị
23. n button "Insert Button" đ thêm icon m i r i khai báo các thu c tính c a nó. L u ý các ớ ồ Ấ ư ủ ể ộ
thu c tính Caption (text hi n th d i button), Key (danh hi u nh n d ng button trong code ị ướ ể ộ ệ ậ ạ
ch ng trình), TooltipText (text hi n th trong c a s k icon khi ta d i mouse đ n icon) và ươ ử ổ ế ể ế ờ ị
Image (danh hi u Key hay ch s image trong ImageList). C a s có d ng sau : ử ổ ỉ ố ệ ạ
261
24. L p l i thao tác ặ ạ b ở ướ ộ c 23 chín l n đ t o 9 icon mong mu n trong Toolbar, c a s thu c ử ổ ể ạ ầ ố
tính sau cho th y hi n tr ng đang t o icon th 8 : ạ ứ ệ ấ ạ
262
25. Vì icon Favorites và Fonts có d ng menu Dropdown nên ta s khai báo thu c tính này cho ẽ ạ ộ
ạ chúng (Style = 5-tbrDropdown) cùng các option con c a chúng. Thí d c a s sau là hi n tr ng ụ ử ổ ủ ệ
hi u ch nh thu c tính cho icon Fonts. L p ch n button "Insert Buttonmenu" đ t o t ng option ể ạ ừ ệ ặ ộ ọ ỉ
con cùng các thu c tính c a nó. L u ý nên đ t thu c tính "Key" c a t ng option trong menu ặ ủ ừ ư ủ ộ ộ
Fonts gi ng v i thu c tính "Name" c a option t ủ ộ ố ớ ươ ự ng ng trong menu View.Fonts vì chúng th c ứ
hi n cùng ch c năng. ứ ệ
263
26. T ng t ươ ự , thí d c a s sau là hi n tr ng hi u ch nh thu c tính cho icon Favorites. Do menu ỉ ụ ử ổ ệ ệ ạ ộ
này đ ng trình ch y, nên ta ch c n t o 1 option gi ượ c thay đ i đ ng khi ch ổ ộ ươ ỉ ầ ạ ạ ả ằ ban đ u b ng ầ
cách ch n button "Insert Buttonmenu". ọ
27. Sau khi đã xây d ng xong Toolbar, c a s chính c a ch ng trình s có d ng sau : ử ổ ự ủ ươ ẽ ạ
264
28. Bây gi ta t o thêm 3 đ i t ng khác cho ch ng trình : 1 comboBox ch a danh sách các ờ ố ượ ạ ươ ứ
URL trang Web đã truy xu t, 1 đ i t ố ượ ấ ể ng WebBrowse đ x lý Web, 1 Timer đ đ nh thì ki m ể ử ể ị
tra xem trang web đã đ c download và hi n th xong ch a. L u ý v trí và kích th ượ ư ư ể ị ị ướ ủ ố c c a 2 đ i
ng conboBox và WebBrowser không c n chính xác vì code ch ng trình s t hi u ch nh t ượ ầ ươ ẽ ự ệ ỉ
c. C a s ch ng trình s có d ng sau : chúng m i khi c a s thay đ i kích th ử ổ ổ ỗ ướ ử ổ ươ ẽ ạ
29. T o các th t c x lý bi n c cho các option menu và Toolbar r i vi t code cho chúng nh ủ ụ ử ế ố ạ ồ ế ư
sau :
'======================================================
265
' Code c a form frmMain ủ
'======================================================
Option Explicit
Dim sFile As String c ch n l n cu i cùng ' bi n ch a URL đ ứ ế ượ ọ ầ ố
' Th t c x lý s ki n load Form (do Wizard t o t đ ng) ủ ụ ử ự ệ ạ ự ộ
Private Sub Form_Load()
Me.Left = GetSetting(App.Title, "Settings", "MainLeft", 1000)
Me.Top = GetSetting(App.Title, "Settings", "MainTop", 1000)
Me.Width = GetSetting(App.Title, "Settings", "MainWidth", 6500)
Me.Height = GetSetting(App.Title, "Settings", "MainHeight", 6500)
End Sub
' Th t c x lý s ki n form thay đ i kích th ủ ụ ử ự ệ ổ c ướ
Private Sub Form_Resize()
ScaleMode = vbPixels
' v l i 2 đ i t ng ComboBox và WebBrowser cho phù h p kích th c m i c a c a s ẽ ạ ố ượ ợ ướ ớ ủ ử ổ
cbAddress.Move 60, 45, Me.ScaleWidth - 62
WebBrowser1.Move 5, 70, Me.ScaleWidth - 10, Me.ScaleHeight - 90
End Sub
' Th t c x lý s ki n g b form ự ệ ở ỏ ủ ụ ử
Private Sub Form_Unload(Cancel As Integer)
Dim i As Integer
' đóng t t c các form c a ch ng trình ấ ả ủ ươ
For i = Forms.Count - 1 To 1 Step -1
266
Unload Forms(i)
Next
If Me.WindowState <> vbMinimized Then
SaveSetting App.Title, "Settings", "MainLeft", Me.Left
SaveSetting App.Title, "Settings", "MainTop", Me.Top
SaveSetting App.Title, "Settings", "MainWidth", Me.Width
SaveSetting App.Title, "Settings", "MainHeight", Me.Height
End If
End Sub
'================================================
' Các th t c x lý s ki n ch n/nh p đ a ch URL ủ ụ ử ự ệ ậ ọ ị ỉ
'================================================
' Th t c x lý s ki n ch n 1 URL trong danh sách comboBox Address ủ ụ ử ự ệ ọ
Private Sub cbAddress_Click()
sFile = cbAddress.Text
UpdateAddrCombo (sFile)
End Sub
' Th t c x lý s ki n n Enter sau khi nh p URL ự ệ ấ ủ ụ ử ậ
Private Sub cbAddress_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
sFile = cbAddress.Text
UpdateAddrCombo (sFile)
'cbAddress.Text = sFile
End If
End Sub
267
' Th t c x lý s ki n ch n menu Favorites.Dump option ủ ụ ử ự ệ ọ
Private Sub mnuFavoritesDump_Click()
MsgBox "Xin loi. Chua quan ly danh sach Favorite"
End Sub
' Th t c x lý s ki n ch n menu File.Open đ ch n file Web (hay *.doc, *.xls,...) ủ ụ ử ể ọ ự ệ ọ
Private Sub mnuFileOpen_Click()
' Hi n th c a s duy t file đ user ch n file ệ ị ử ổ ể ể ọ
With dlgCommonDialog
.DialogTitle = "Open"
.CancelError = False
.Filter = "All Files (*.*)|*.*"
.ShowOpen
If Len(.FileName) = 0 Then
Exit Sub
End If
sFile = .FileName
End With
' Thêm pathname file vào danh sách và hi n th nó ể ị
UpdateAddrCombo (sFile)
End Sub
' Th t c thêm URL c a trang Web c n hi n th vào danh sách và hi n th nó ầ ủ ụ ủ ể ể ị ị
Private Sub UpdateAddrCombo(strURL As String)
Dim idx As Integer
268
Dim intItemCount As Integer
StatusTimer.Enabled = True
intItemCount = cbAddress.ListCount
' Tìm m c ch a chu i strURL trong danh sách và xóa nó ụ ứ ỗ
For idx = 0 To intItemCount - 1
If StrComp(strURL, cbAddress.List(idx), vbBinaryCompare) = 0 Then
cbAddress.RemoveItem (idx)
Exit For
End If
Next
' Push strURL vào đ u danh sách ComboBox ầ
cbAddress.AddItem strURL, 0
' nh đ i t ng WebBrowser1 download và hi n th trang Web ờ ố ượ ể ị
WebBrowser1.Navigate2 (strURL)
End Sub
'================================================
' Các th t c x lý s ki n v duy t Web ủ ụ ử ự ệ ệ ề
'================================================
' Th t c x lý s ki n ch n menu Go.Back ủ ụ ử ự ệ ọ
Private Sub mnuGoBack_Click()
WebBrowser1.GoBack
End Sub
' Th t c x lý s ki n ch n menu Go.Forward ủ ụ ử ự ệ ọ
Private Sub mnuGoForward_Click()
269
WebBrowser1.GoForward
End Sub
' Th t c x lý s ki n ch n menu View.Stop ủ ụ ử ự ệ ọ
Private Sub mnuViewStop_Click()
WebBrowser1.Stop
End Sub
' Th t c x lý s ki n ch n menu Go.Search ủ ụ ử ự ệ ọ
Private Sub mnuGoSearch_Click()
WebBrowser1.GoSearch
End Sub
' Th t c x lý s ki n ch n menu Go.Start page ủ ụ ử ự ệ ọ
Private Sub mnuGoStartPage_Click()
WebBrowser1.GoHome
End Sub
' Th t c in trang Web hi n hành ủ ụ ệ
Private Sub WebPrint()
WebBrowser1.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT
End Sub
' Th t c x lý s ki n ch n menu View.Refresh ủ ụ ử ự ệ ọ
Private Sub mnuViewRefresh_Click()
WebBrowser1.Refresh
270
End Sub
' Th t c x lý s ki n ch n menu Help.About MyIE ọ ủ ụ ử ự ệ
Private Sub mnuHelpAbout_Click()
frmAbout.Show vbModal, Me
End Sub
' Th t c x lý s ki n ch n menu File.Print ủ ụ ử ự ệ ọ
Private Sub mnuFilePrint_Click()
WebBrowser1.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT
End Sub
' Th t c x lý s ki n ch n menu File.Page Setup ủ ụ ử ự ệ ọ
Private Sub mnuFilePageSetup_Click()
On Error Resume Next
With dlgCommonDialog
.DialogTitle = "Page Setup"
.CancelError = True
.ShowPrinter
End With
End Sub
'================================================
' Các th t c x lý s ki n thay đ i kích th c font hi n th ủ ụ ử ự ệ ổ ướ ể ị
'================================================
' Th t c x lý s ki n ch n menu View.Fonts.Large ọ ủ ụ ử ự ệ
Private Sub mnuViewFontsLarge_Click()
271
MsgBox "Xin loi. Chua hien thuc chuc nang nay."
End Sub
' Th t c x lý s ki n ch n menu View.Fonts.Medium ọ ủ ụ ử ự ệ
Private Sub mnuViewFontsMedium_Click()
MsgBox "Xin loi. Chua hien thuc chuc nang nay."
End Sub
' Th t c x lý s ki n ch n menu View.Fonts.Small ọ ủ ụ ử ự ệ
Private Sub mnuViewFontsSmall_Click()
MsgBox "Xin loi. Chua hien thuc chuc nang nay."
End Sub
' Th t c x lý s ki n ch n menu View.Fonts.Largest ọ ủ ụ ử ự ệ
Private Sub mnuViewFontsLargest_Click()
MsgBox "Xin loi. Chua hien thuc chuc nang nay."
End Sub
' Th t c x lý s ki n ch n menu View.Fonts.Smallest ọ ủ ụ ử ự ệ
Private Sub mnuViewFontsSmallest_Click()
MsgBox "Xin loi. Chua hien thuc chuc nang nay."
End Sub
' Th t c x lý s ki n timer out ủ ụ ử ự ệ
Private Sub StatusTimer_Timer()
If WebBrowser1.Busy = False Then
272
StatusTimer.Enabled = False
cbAddress.Text = sFile
Else
End If
End Sub
' Th t c x lý s ki n ch n option trong các button Toolbar d ng Dropdown ủ ụ ử ự ệ ạ ọ
Private Sub tbToolbar_ButtonMenuClick(ByVal ButtonMenu As ButtonMenu)
If ButtonMenu.Parent.Key = "Fonts" Then
Select Case ButtonMenu.Key
Case "mnuViewFontsLargest"
Call mnuViewFontsLargest_Click
Case "mnuViewFontsLarge"
Call mnuViewFontsLarge_Click
Case "mnuViewFontsMedium"
Call mnuViewFontsMedium_Click
Case "mnuViewFontsSmall"
Call mnuViewFontsSmall_Click
Case "mnuViewFontsSmallest"
Call mnuViewFontsSmallest_Click
End Select
ElseIf ButtonMenu.Parent.Key = "Favorites" Then
Call mnuFavoritesDump_Click
End If
End Sub
273
' Th t c x lý s ki n ch n button Toolbar ủ ụ ử ự ệ ọ
Private Sub tbToolBar_ButtonClick(ByVal Button As MSComctlLib.Button)
On Error Resume Next
Select Case Button.Key
Case "GoBack"
Call mnuGoBack_Click
Case "GoForward"
WebBrowser1.GoForward
Case "Stop"
WebBrowser1.Stop
Case "Refresh"
WebBrowser1.Refresh
Case "Home"
WebBrowser1.GoHome
Case "Search"
WebBrowser1.GoSearch
Case "Favorites"
Exit Sub
Case "Print"
Call mnuFilePrint_Click
Case "Fonts"
Exit Sub
End Select
End Sub
' Th t c x lý s ki n ch n menu View.StatusBar ủ ụ ử ự ệ ọ
274
Private Sub mnuViewStatusBar_Click()
mnuViewStatusBar.Checked = Not mnuViewStatusBar.Checked
sbStatusBar.Visible = mnuViewStatusBar.Checked
End Sub
' Th t c x lý s ki n ch n menu View.ToolBar ủ ụ ử ự ệ ọ
Private Sub mnuViewToolbar_Click()
mnuViewToolbar.Checked = Not mnuViewToolbar.Checked
tbToolBar.Visible = mnuViewToolbar.Checked
End Sub
' Th t c x lý s ki n ch n menu File.Exit ủ ụ ử ự ệ ọ
Private Sub mnuFileExit_Click()
'unload the form
Unload Me
End Sub
275
BÀI TH C HÀNH THÊM NHÀ Ự Ở
(S 3)ố
M c tiêu sinh viên c n đ t đ c: ạ ượ ụ ầ
Thi t k tr c quan đ c các ph n t giao di n c a ch ế ế ự ượ ầ ử ệ ủ ươ ng trình d ng SDI. ạ
T o đ c các th t c x lý bi n c và vi t code cho các th t c này. ạ ượ ủ ụ ử ế ố ế ủ ụ
Dùng đ c các hàm v nh, thay đ i kích th ng giao di n. ượ ẽ ả ổ c đ i t ướ ố ượ ệ
Dùng đ ượ c các th t c x lý s ki n c b n nh MouseDown, ... ự ệ ơ ả ủ ụ ử ư
Ch ng trình th c hành : trò ch i Caro gi a ng i và máy : ươ ữ ự ơ ườ
276
277
Chi ti t các menu nh sau : ế ư
Qui trình th c hi n : ự ệ
1. Ch y VB b ng 1 trong các cách đã bi t. ằ ạ ế
ấ 2. Khi c a s New Project hi n th , ch n icon "VB Application Wizard" nh hình trên và n ử ổ ư ể ọ ị
button Open.
278
3. B n có th ch n file "profile" ch a các thông tin c u hình c n dùng (đã thi t l p s n cho các ể ọ ứ ầ ấ ạ ế ậ ẵ
Project tr c) r i n button Next đ th c hi n b c ti p theo c a qui trình Wizard. ướ ể ự ệ ướ ế ồ ấ ủ
279
4. B n ch n checkbox SDI, nh p tên Project "Caro" r i n button Next đ th c hi n b ể ự ồ ấ ệ ạ ậ ọ ướ ế c ti p
theo c a qui trình Wizard. ủ
5. B n có th xây d ng t ể ự ạ r c quan menu (trong thí d này b n không c n làm gì ụ ự ầ ạ b ở ướ ồ c này) r i
n button Next đ th c hi n b c ti p theo c a qui trình Wizard. ấ ể ự ệ ướ ế ủ
280
6. B n có th xây d ng tr c quan toolbar (trong thí d này b n không c n làm gì c này) ự ụ ự ể ạ ầ ạ b ở ướ
c ti p theo c a qui trình Wizard. r i n button Next đ th c hi n b ồ ấ ể ự ệ ướ ế ủ
281
7. B n có th gi nguyên thi t l p c a c a s này r i n button Next đ th c hi n b ể ữ ạ ế ậ ủ ử ổ ể ự ồ ấ ệ ướ ế c ti p
theo c a qui trình Wizard. ủ
8. B n có th gi nguyên thi ể ữ ạ ế ậ ồ ấ t l p c a c a s này (vì không c n truy xu t Internet) r i n ủ ử ổ ấ ầ
button Next đ th c hi n b c ti p theo c a qui trình Wizard. ể ự ệ ướ ế ủ
282
9. B n ch n checkbox About Box đ VB t đ ng t o form AboutBox dùm b n r i n button ể ạ ọ ự ộ ạ ồ ấ ạ
c ti p theo c a qui trình Wizard. Next đ th c hi n b ể ự ệ ướ ế ủ
283
ầ 10. B n có th t o 1 hay nhi u data form truy xu t database (nh ng ng d ng này không c n) ể ạ ụ ứ ư ề ấ ạ
c ti p theo c a qui trình Wizard. r i n button Next đ th c hi n b ồ ấ ể ự ệ ướ ế ủ
11. B n có th ch n file profile và c t các thông s v a thi t l p lên đó (đ dùng l i cho các ố ừ ể ạ ấ ọ ế ậ ể ạ
ng d ng khác) r i n button Finish đ k t thúc qui trình Wizard. ứ ể ế ồ ấ ụ
284
12. C a s ban đ u c a Project v a t o ra có d ng c a hình trên. Tr c h t hãy n kép vào tên ầ ủ ử ổ ừ ạ ủ ạ ướ ế ấ
frmAbout trong c a s Project đ hi n th form AboutBox c a ch ng trình r i hi u ch nh l ử ổ ể ể ủ ị ươ ệ ồ ỉ ạ i
theo ý mu n, thí d theo d ng sau : ụ ạ ố
13. n kép chu t vào tên frmMain trong c a s Project đ hi n th c a s chính c a ch Ấ ộ ị ử ổ ử ổ ể ể ủ ươ ng
trình. Ch n menu Tool.Menu Editor đ hi u ch nh l i menu c a ch ng trình theo đ c t đ ể ệ ọ ỉ ạ ủ ươ ặ ả ề
ngh ph n m c đích. Sau đó, xóa Toolbar, comboBox trên frmMain (ch gi l ị ở ỉ ữ ạ ố ượ ng i đ i t ụ ầ
285
ImageList). Cu i cùng c a s chính có d ng sau : ử ổ ạ ố
14. Dùng trình so n th o đ h a (nh Paint, Corel Draw!,...) + trình screen capture đ v /copy 5 ể ẽ ồ ọ ư ả ạ
bitmap miêu t ả ạ ồ ấ ừ tr ng thái các ô c (tr ng, ô X, ô O, ô X nh p nháy, ô O nh p nháy) r i c t t ng ờ ắ ấ ấ
nh icon lên file bitmap t ả ươ ẽ ả ng ng (nên c t vào cùng th m c c a Project), thí d ta v 5 nh ư ụ ủ ứ ụ ấ
bitmap 15*15 nh sau : ư
: blanc.gif : X.gif : O.gif
: FlashX.gif : FlashO.gif
286
15. n ph i chu t vào đ i t ng ImageList, ch n m c Properties đ hi n th c a s thu c tính ố ượ Ấ ả ộ ị ử ổ ể ể ụ ọ ộ
c a nó h u hi u ch nh l ủ ệ ầ ỉ ạ ử i theo mong mu n. Sau khi ch n tab Images trên c a s thu c tính, c a ử ổ ộ ọ ố
s Properties có d ng nh sau : ổ ư ạ
16. Ta ch n t ng images r i n button "Remove Picture" đ xóa nó đ n khi không còn images ọ ừ ồ ấ ể ế
nào trong danh sách, lúc này c a s thu c tính có d ng sau : ử ổ ạ ộ
287
17. n button "Insert Picture" đ thêm t ng images vào danh sách, c a s sau đ ừ ử ổ Ấ ế ượ ị ể c hi n th đ ta ể
duy t file và ch n file image c n thêm vào danh sách : ệ ầ ọ
18. Ch n file blanc.gif miêu t ọ ả ử ô c tr ng r i ch n button Open đ thêm nó vào danh sách, c a ờ ố ể ồ ọ
s thu c tính s có d ng sau : ẽ ổ ạ ộ
288
19. Nh p danh hi u nh n d ng image vào textbox "Key", m i l n code ch ng trình c n truy ỗ ầ ệ ậ ậ ạ ươ ầ
xu t 1 icon trong ImageList, ta có th dùng ch s (Index) hay danh hi u Key c a nó đ g i nh ỉ ố ể ợ ủ ệ ể ấ ớ
h n. Ti p t c thêm t ng image khác và đ t tên cho nó cho đ n khi đã thêm đ 5 images theo yêu ơ ế ụ ừ ủ ế ặ
c u. Lúc này c a s thu c tính có d ng sau : ầ ử ổ ạ ộ
289
20. n button OK đ hoàn t t vi c hi u ch nh ImageList và tr v c a s chính c a ch Ấ ể ấ ệ ệ ỉ ở ề ử ổ ủ ươ ng
trình. Đ t l i tên imageList là ImageList1. ặ ạ
21. T o các th t c x lý bi n c cho 2 option Start và Setup... r i vi t code cho chúng nh sau : ủ ụ ử ế ố ạ ồ ế ư
Option Explicit
'Đ nh nghĩa các h ng g i nh đ c dùng ớ ượ ằ ợ ị
Private Const USERID = 1
Private Const COMPID = 2
Private Const BLANC_IMG = 0
Private Const X_IMG = 1
Private Const O_IMG = 2
Private Const FLASHX_IMG = 3
Private Const FLASHO_IMG = 4
'Đ nh nghĩa các bi n đ c dùng trong module ế ượ ị
Private blnDangchoi As Boolean ' Trang thai choi/chua choi
Private Board() As Integer ' Ma tran trang thai cac o
290
Private Score() As Integer ' Ma tran diem trong so cac o
Private intRowsBoard As Integer ' so hang o
Private intColsBoard As Integer ' so cot o
Private blnThang(2) As Boolean ' Trang thai thang cua tung phan tu choi
Private picImage(0 To 4) As Object ' day cac image can dung
Private intMaxscore(2) As Integer ' day diem trong so cua phan tu choi
Private win_row As Integer, win_rinc As Integer
Private win_col As Integer, win_cinc As Integer
Private intBaseX As Integer, intBaseY As Integer ' t a đ trên trái c a bàn c ọ ộ ủ ờ
Private intPicXWidth As Integer, intPicXHeight As Integer ' kích th c t ng ô ướ ừ
Private intUserD As Integer, intUserC As Integer
Private intCompD As Integer, intCompC As Integer
Private mdong As Integer
Private mcot As Integer
'------------------------------------------------------------------
' Các th t c x lý s ki n c a form Caro ự ệ ủ ủ ụ ử
'------------------------------------------------------------------
' Th t c x lý s ki n Load form ủ ụ ử ự ệ
Private Sub Form_Load()
intRowsBoard = 20
intColsBoard = 20
intPicXWidth = 15
intPicXHeight = 15
intBaseX = 4
intBaseY = 4
Call InitBoard
291
End Sub
' Th t c x lý s ki n n chu t form ự ệ ấ ủ ụ ử ộ
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim row As Integer, col As Integer
If Not blnDangchoi Then Exit Sub
' Ki m tra v trí n chu t n m trong bàn c không ? ộ ằ ể ấ ờ ị
If intBaseX > x Or x > intBaseX + intColsBoard * intPicXWidth Or _
intBaseY > y Or y > intBaseY + intRowsBoard * intPicXHeight Then Exit Sub
' Tính v trí ô c đ ị c n ờ ượ ấ
col = (x - intBaseX) \ intPicXWidth
row = (y - intBaseY) \ intPicXHeight
' N u v trí ô c đ c n đã dùng r i thì thôi ế ị ờ ượ ấ ồ
If Board(row, col) <> 0 Then Exit Sub
' Ghi nh n v trí ô c đ c n cho ng i dùng ờ ượ ấ ậ ị ườ
Board(row, col) = USERID
' Hi n th v trí ô c có d u X ể ấ ờ ị ị
DisplayElem row, col, X_IMG
' Ki m tra xem user th ng ch a ? ư ể ắ
If KiemtraThang(row, col, USERID) Then
blnDangchoi = False
FlashDisplay (USERID)
MsgBox ("Hoan ho! Ban da thang toi.")
Exit Sub
End If
' Tìm n c đi k ti p cho máy ướ ế ế
292
Call Timnuocke
Board(mdong, mcot) = COMPID
DisplayElem mdong, mcot, O_IMG
' Ki m tra xem máy th ng ch a ? ư ể ắ
If KiemtraThang(row, col, COMPID) Then
blnDangchoi = False
FlashDisplay (COMPID)
MsgBox ("Rat tiec! Ban da thua toi.")
Exit Sub
End If
End Sub
' Th t c x lý s ki n v l i form ủ ụ ử ự ệ ẽ ạ
Private Sub Form_Paint()
Dim row As Integer, col As Integer
For row = 0 To intRowsBoard - 1
For col = 0 To intColsBoard - 1
DisplayElem row, col, Board(row, col)
Next col, row
End Sub
' Th t c x lý s ki n ch n Options.Setup ủ ụ ử ự ệ ọ
Private Sub mnuOptionsSetup_Click()
CaroSetup.txtRowsBoard = CStr(intRowsBoard)
CaroSetup.txtColsBoard = CStr(intColsBoard)
CaroSetup.Show vbModal
293
intRowsBoard = Val(CaroSetup.txtRowsBoard)
intColsBoard = Val(CaroSetup.txtColsBoard)
Call InitBoard
End Sub
' Th t c x lý s ki n ch n Options.Start ủ ụ ử ự ệ ọ
Private Sub mnuOptionsStart_Click()
Call InitBoard
Call Form_Paint
End Sub
' Th t c x lý s ki n ch n Help.About ự ệ ủ ụ ử ọ
Private Sub mnuHelpAbout_Click()
frmAbout.Show vbModal, Me
End Sub
' Th t c x lý s ki n ch n Options.Exit ủ ụ ử ự ệ ọ
Private Sub mnuFileExit_Click()
Unload Me
End Sub
294
'-----------------------------------------------------------------------------------------
' Cac thu tuc dich vu cap 1 : duoc goi khi ban an chuot vao form
' Ta dùng tam vuc Public de phan biet voi cac thu tuc dich vu cap 2
'-----------------------------------------------------------------------------------------
'Ham khoi dong trang thai tro choi moi lan choi
Public Sub InitBoard()
Dim row As Integer, col As Integer
ReDim Board(intRowsBoard - 1, intColsBoard - 1)
ReDim Score(intRowsBoard - 1, intColsBoard - 1)
'blnInit = False
blnDangchoi = True
blnThang(USERID) = False
blnThang(COMPID) = False
For row = 0 To intRowsBoard - 1
For col = 0 To intColsBoard - 1
Board(row, col) = 0
Score(row, col) = 0
Next col, row
Me.ScaleMode = vbPixels
Me.Width = Me.ScaleX(intColsBoard * intPicXWidth + intBaseX * 4, vbPixels, vbTwips)
Me.Height = Me.ScaleY(intRowsBoard * intPicXHeight + intBaseY * 2 + 45, vbPixels,
vbTwips)
'Me.Width = (intColsBoard * intPicXWidth + intBaseX * 2)
'Me.Height = (intRowsBoard * intPicXHeight + intBaseY + 20 + intBaseX) * 16
End Sub
295
'Ham kiem tra phan tu choi id thang chua
Public Function KiemtraThang(h As Integer, c As Integer, ByVal id As Integer) As Boolean
If id = COMPID Then
KiemtraThang = blnThang(COMPID)
Exit Function
End If
intMaxscore(USERID) = EvaluatePosition_5(USERID)
intUserD = mdong
intUserC = mcot
KiemtraThang = blnThang(USERID)
End Function
'Ham tim nuoc di ke cho may
Public Sub Timnuocke()
intMaxscore(COMPID) = EvaluatePosition_5(COMPID)
intCompD = mdong
intCompC = mcot
If intMaxscore(USERID) = 0 And intMaxscore(COMPID) = 0 Then
blnDangchoi = False
MsgBox ("Hue!")
Exit Sub
End If
' tim vi tri di cua may
If (intMaxscore(USERID) <= intMaxscore(COMPID)) Then
mdong = intCompD
mcot = intCompC
296
ElseIf priority(intMaxscore(USERID), intMaxscore(COMPID)) Then
mdong = intUserD
mcot = intUserC
Else
mdong = intCompD
mcot = intCompC
End If
End Sub
'Ham hien thi 5 o thang (chi moi to dam)
Public Sub FlashDisplay(ByVal id As Integer)
Dim i As Integer
For i = 0 To 4
If id = USERID Then
DisplayElem win_row + win_rinc * i, win_col + win_cinc * i, FLASHX_IMG
Else
DisplayElem win_row + win_rinc * i, win_col + win_cinc * i, FLASHO_IMG
End If
Next i
End Sub
'-----------------------------------------------------------------------------------------------------
' Cac thu tuc dich vu cap 2 :
' chi duoc dung boi cac thu tuc dich vu cap 1
' Ta dùng tam vuc Private de phan biet voi cac thu tuc dich vu cap 1
'-----------------------------------------------------------------------------------------------------
297
Private Function priority(ByVal m1 As Integer, ByVal m2 As Integer) As Boolean
Dim tam As Integer, n1 As Integer, n2 As Integer
Dim diem As Integer
diem = 100
n1 = m1 \ diem
n2 = m2 \ diem
If n1 <> 0 Or n2 <> 0 Then
priority = n1 > n2
Exit Function
End If
diem = diem \ 10
n1 = m1 \ diem
n2 = m2 \ diem
If n1 <> 0 Or n2 <> 0 Then
priority = n1 > n2
Exit Function
End If
diem = diem \ 10
n1 = m1 \ diem
n2 = m2 \ diem
If n1 <> 0 Or n2 <> 0 Then
priority = n1 > n2
Exit Function
End If
priority = True
End Function
298
'------------------------------------------------
'Xoa ma tran tinh diem Score
Private Sub ZeroScores()
Dim row As Integer, col As Integer
For row = 0 To intRowsBoard - 1
For col = 0 To intColsBoard - 1
Score(row, col) = 0
Next col
Next row
End Sub
'------------------------------------------------
' Tim diem lon nhat
Private Function FindMaxScore()
Dim MaxScore As Integer
Dim row As Integer, col As Integer
MaxScore = -1
For row = 0 To intRowsBoard - 1
For col = 0 To intColsBoard - 1
If Score(row, col) > MaxScore Then
mdong = row
mcot = col
MaxScore = Score(row, col)
End If
Next col
299
Next row
FindMaxScore = MaxScore
End Function
'----------------------------------------------------
Private Function SixInLine(ByVal row As Integer, ByVal col As Integer, ByVal rinc As Integer,
ByVal cinc As Integer, ByVal player As Integer) As Boolean
Dim d_row As Integer, d_col As Integer, c_row As Integer, c_col As Integer
d_row = row - rinc
d_col = col - cinc
c_row = row + 5 * rinc
c_col = col + 5 * cinc
SixInLine = False
If d_row < 0 Or d_col < 0 Or d_row >= intRowsBoard Or d_col >= intColsBoard Then
If c_row >= intRowsBoard Or c_col >= intColsBoard Or c_row < 0 Or c_col < 0 Then
Exit Function
End If
If Board(c_row, c_col) = player Then SixInLine = True
Exit Function
End If
If c_row >= intRowsBoard Or c_col >= intColsBoard Or c_row < 0 Or c_col < 0 Then
If Board(d_row, d_col) = player Then SixInLine = True
Exit Function
End If
If Board(d_row, d_col) = player Or Board(c_row, c_col) = player Then
SixInLine = 1
Else
SixInLine = 0
300
End If
End Function
'------------------------------------------------
'ham evaluateline cho luat choi "5 an"
'Tính so diem cua nguoi va may trong hang
Private Function EvaluateLine_5(ByVal row As Integer, ByVal rinc As Integer, ByVal col As
Integer, cinc As Integer, player As Integer) As Integer
Dim tot1 As Integer
Dim tot2 As Integer
Dim select1 As Integer
Dim intScore As Integer
Dim i As Integer
tot1 = 0
tot2 = 0
EvaluateLine_5 = 0
For i = 0 To 4
Select Case Board(row, col)
Case 1
tot1 = tot1 + 1
Case 2
tot2 = tot2 + 1
End Select
row = row + rinc
col = col + cinc
Next i
'If the line has markers from both players then it has score 0
301
If tot1 > 0 And tot2 > 0 Then Exit Function
'Score according to how many markers player 1 or player 2 has in the line
intScore = 0
If (player = 1) Then
select1 = tot1
Else
select1 = tot2
End If
Select Case select1
Case 1
intScore = 1
Case 2
intScore = 10
Case 3
intScore = 100
Case 4
If Not SixInLine(row - 5 * rinc, col - 5 * cinc, rinc, cinc, player) Then
If player = COMPID Then
If Not blnThang(COMPID) Then
blnThang(COMPID) = True
win_row = row - 5 * rinc
win_rinc = rinc
win_col = col - 5 * cinc
win_cinc = cinc
EvaluateLine_5 = 2000
Exit Function
302
End If
Else
intScore = 1000
End If
Else
intScore = -100
End If
Case 5
If Not SixInLine(row - 5 * rinc, col - 5 * cinc, rinc, cinc, player) Then
blnThang(player) = True
win_row = row - 5 * rinc
win_rinc = rinc
win_col = col - 5 * cinc
win_cinc = cinc
End If
End Select
EvaluateLine_5 = intScore
End Function
'------------------------------------------------
'ham AddToLine_5 cho luat choi "5 an"
'Them diem vao moi o trong trong day.
Private Sub AddToLine_5(ByVal sinc As Integer, ByVal row As Integer, ByVal rinc As Integer,
ByVal col As Integer, ByVal cinc As Integer)
Dim i As Integer
For i = 0 To 4
If Board(row, col) = 0 Then Score(row, col) = Score(row, col) + sinc
303
row = row + rinc
col = col + cinc
Next i
End Sub
'----------------------------------------------------------
'ham EvaluatePosition_5 cho luat choi "5 an"
'Khao sat vi tri bang cach tim day 5 o duoc danh lien tiep
Private Function EvaluatePosition_5(ByVal player As Integer) As Integer
Dim row As Integer, col As Integer
Dim rinc As Integer, cinc As Integer
Dim intScore As Integer
Dim intDir As Integer
Call ZeroScores
' Khao sat tung o tren board
For row = 0 To intRowsBoard - 1
For col = 0 To intColsBoard - 1
'For each square look at the three five-in-a-rows that start from it
'One along the row, one along the column, and along the diagonal
'Whoops -- along BOTH diagonals!
For intDir = 0 To 3
'check for the cases where we are too close to the board edges
'intDir==0 checks the five in a row along this row
If intDir = 0 And col > intColsBoard - 5 Then GoTo Continue
'intDir==0 checks the five in a row along this column
If intDir = 1 And row > intRowsBoard - 5 Then GoTo Continue
304
'intDir==2 checks the five in a row along the right diagonal
If intDir = 2 And (col > intColsBoard - 5 Or row > intRowsBoard - 5) Then GoTo
Continue
'intDir==3 checks the five in a row along the left diagonal
If intDir = 3 And (col < 4 Or row > intRowsBoard - 5) Then GoTo Continue
Select Case intDir
Case 0
rinc = 0
cinc = 1
Case 1
rinc = 1
cinc = 0
Case 2
rinc = 1
cinc = 1
Case 3
rinc = 1
cinc = -1
End Select
intScore = EvaluateLine_5(row, rinc, col, cinc, player)
AddToLine_5 intScore, row, rinc, col, cinc
Continue:
Next intDir
Next col
Next row
EvaluatePosition_5 = FindMaxScore()
End Function
305
'Hien thi o co imgCode o vi tri (row,col)
Private Sub DisplayElem(row As Integer, col As Integer, imgCode As Integer)
Dim x As Integer, y As Integer
Dim curPic As Object
ScaleMode = vbPixels
x = intBaseX + col * intPicXWidth
y = intBaseY + row * intPicXHeight
PaintPicture ImageList1.ListImages.Item(imgCode + 1).Picture, x, y, intPicXWidth,
intPicXHeight, 0, 0, , , vbSrcCopy
End Sub
306
BÀI TH C HÀNH THÊM NHÀ Ự Ở
(S 4)ố
M c tiêu sinh viên c n đ t đ c: ạ ượ ụ ầ
Thi t k tr c quan đ c các ph n t giao di n c a ch ế ế ự ượ ầ ử ệ ủ ươ ng trình d ng SDI. ạ
T o đ c các th t c x lý bi n c và vi t code cho các th t c này. ạ ượ ủ ụ ử ế ố ế ủ ụ
Dùng đ c các hàm v nh, thay đ i kích th ng giao di n. ượ ẽ ả ổ c đ i t ướ ố ượ ệ
Dùng đ ượ c các th t c x lý s ki n c b n nh MouseDown, ... ự ệ ơ ả ủ ụ ử ư
Ch ng trình th c hành : trò ch i dò mìn có d ng sau : ươ ự ạ ơ
307
Chi ti t các menu nh sau : ế ư
308
Qui trình th c hi n : ự ệ
1-20. Th c hi n các b 1-20 gi ng y nh bài Caro v i 1 vài khác bi t : ự ệ c t ướ ừ ư ố ớ ệ
Các image đ c dùng trong trò ch i dò mìn là : ượ ơ
: BlancInit.jpg : MineInactive.jpg : MineActive.jpg
: BlancFin.jpg : One.jpg : Two.jpg
: Three.jpg : Four.jpg : Five.jpg
: Six.jpg : Seven.jpg : eight.jpg
Nh v y c a s t o ImageList nh sau : ư ậ ử ổ ạ ư
t l p các thông s có 3 textbox nh n 3 giá tr : s hàng, s c t c a bãi mìn và s mìn C a s thi ử ổ ế ậ ố ộ ủ ị ố ậ ố ố
trong bãi mìn.
309
21. T o các th t c x lý bi n c cho 2 option Start và Setup... r i vi t code cho chúng nh sau : ủ ụ ử ế ố ạ ồ ế ư
Option Explicit
' L u ý các image trong ImageList ph i có đúng ch s đ c qui đ nh đây ỉ ố ượ ư ả ị ở
Private Const BLANCINIT_IMG = 1
Private Const MINEINACTIVE_IMG = 2
Private Const MINEACTIVE_IMG = 3
Private Const BLANCFIN_IMG = 4
'Private Const ONE_IMG = 5
'Private Const TWO_IMG = 6
'Private Const THREE_IMG = 7
'Private Const FOUR_IMG = 8
'Private Const FIVE_IMG = 9
'Private Const SIX_IMG = 10
'Private Const SEVEN_IMG = 11
'Private Const EIGHT_IMG = 12
Private blnDangchoi As Boolean ' Tr ng thái ch i/ ch a ch i ơ ơ ư ạ
310
Private intRowsBoard As Integer ' s hàng c a bãi mìn ủ ố
Private intColsBoard As Integer ' s c t c a bãi mìn ố ộ ủ
Private intMineCount As Integer ' s mìn trong bãi mìn ố
Private intPicXWidth As Integer, intPicXHeight As Integer ' kích th c t ng ô ướ ừ
Private intBaseX As Integer, intBaseY As Integer ' t a đ trên trái c a bãi mìn ọ ộ ủ
Private intOdado As Integer ' s ô đã đ p đ c ạ ượ ố
Private DataBoard() As Integer ' ma tr n d li u mìn ậ ữ ệ
Private StatusBoard() As Boolean ' ma tr n tr ng thái đ p mìn ậ ạ ạ
'------------------------------------------------------------------
' Các th t c x lý s ki n c a form MyMine ự ệ ủ ủ ụ ử
'------------------------------------------------------------------
Private Sub Form_Load()
' Thi ế ậ t l p các thông s ban đ u c a trò ch i ơ ầ ủ ố
intRowsBoard = 8
intColsBoard = 8
intMineCount = 10
intPicXWidth = 17
intPicXHeight = 17
intBaseX = 4
intBaseY = 4
Call InitBoard
End Sub
' Th t c x lý s ki n n chu t form ự ệ ấ ủ ụ ử ộ
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim row As Integer, col As Integer
311
If Not blnDangchoi Then Exit Sub
' Ki m tra v trí n chu t n m trong bàn c không ? ộ ằ ể ấ ờ ị
If intBaseX > x Or x > intBaseX + intColsBoard * intPicXWidth Or _
intBaseY > y Or y > intBaseY + intRowsBoard * intPicXHeight Then Exit Sub
' Tính v trí ô c đ ị c n ờ ượ ấ
col = (x - intBaseX) \ intPicXWidth
row = (y - intBaseY) \ intPicXHeight
v trí (row,col) ' Đ p mìn ạ ở ị
Call Domin(row, col)
End Sub
' Th t c x lý s ki n v l i form ủ ụ ử ự ệ ẽ ạ
Private Sub Form_Paint()
Dim row As Integer, col As Integer
Dim cnt As Integer
For row = 0 To intRowsBoard - 1
For col = 0 To intColsBoard - 1
If Not StatusBoard(row, col) Then
Call DisplayElem(row, col, BLANCINIT_IMG)
ElseIf DataBoard(row, col) = 1 Then
Call DisplayElem(row, col, MINEINACTIVE_IMG)
Else
cnt = MineCount(row, col)
Call DisplayElem(row, col, cnt + 4)
End If
Next col, row
312
End Sub
' Th t c x lý s ki n ch n menu Help.About MyMine ọ ủ ụ ử ự ệ
Private Sub mnuHelpAbout_Click()
frmAbout.Show vbModal, Me
End Sub
' Th t c x lý s ki n ch n menu Options.Exit ủ ụ ử ự ệ ọ
Private Sub mnuOptionsExit_Click()
'unload the form
Unload Me
End Sub
' Th t c x lý s ki n ch n menu Options.Setup... ủ ụ ử ự ệ ọ
Private Sub mnuOptionsSetup_Click()
MyMineSetup.txtRowsBoard = CStr(intRowsBoard)
MyMineSetup.txtColsBoard = CStr(intColsBoard)
MyMineSetup.txtMineCount = CStr(intMineCount)
MyMineSetup.Show vbModal
intRowsBoard = Val(MyMineSetup.txtRowsBoard)
intColsBoard = Val(MyMineSetup.txtColsBoard)
intMineCount = Val(MyMineSetup.txtMineCount)
If intRowsBoard < 8 Then intRowsBoard = 8
If intColsBoard < 8 Then intColsBoard = 8
If intMineCount < 1 Or intMineCount >= intRowsBoard * intColsBoard Then intMineCount =
10
Call InitBoard
313
End Sub
' Th t c x lý s ki n ch n menu Options.Start ủ ụ ử ự ệ ọ
Private Sub mnuOptionsStart_Click()
Call InitBoard
Call Form_Paint
End Sub
'-----------------------------------------------------------------------------------------
' Các th t c d ch v c p 1 : đ c g i khi b n n chu t vào form ủ ụ ị ụ ấ ượ ọ ạ ấ ộ
' Ta dùng t m v c Public đ phân bi ự ể ầ ệ ớ t v i các th t c d ch v c p 2 ủ ụ ị ụ ấ
'-----------------------------------------------------------------------------------------
'Th t c kh i đ ng các thông s ban đ u c a trò ch i ầ ủ ở ộ ủ ụ ố ơ
Public Sub InitBoard()
Dim row As Integer, col As Integer
Dim i As Integer
ReDim DataBoard(intRowsBoard - 1, intColsBoard - 1)
ReDim StatusBoard(intRowsBoard - 1, intColsBoard - 1)
'blnInit = False
blnDangchoi = True
intOdado = 0
For row = 0 To intRowsBoard - 1
For col = 0 To intColsBoard - 1
DataBoard(row, col) = 0
StatusBoard(row, col) = False
Next col, row
314
Me.ScaleMode = vbPixels
' Ch nh l i kích th c form đ hi n th v a đ bãi mìn ỉ ạ ướ ị ừ ủ ể ể
Me.Width = Me.ScaleX(intColsBoard * intPicXWidth + intBaseX * 4, vbPixels, vbTwips)
Me.Height = Me.ScaleY(intRowsBoard * intPicXHeight + intBaseY * 2 + 64, vbPixels,
vbTwips)
' X p ng u nhiên intMineCount trái mìn vào bãi mìn ế ẫ
i = 0
Call Randomize
While i < intMineCount
row = (intRowsBoard - 1) * Rnd
col = (intColsBoard - 1) * Rnd
If DataBoard(row, col) = 0 Then
DataBoard(row, col) = 1
i = i + 1
End If
Wend
End Sub
' Đ p mìn v trí (h,c) ạ ở ị
Public Sub Domin(ByVal h As Integer, ByVal c As Integer)
Dim cnt As Integer
Dim row As Integer, col As Integer
If StatusBoard(h, c) Then Exit Sub
If DataBoard(h, c) = 1 Then 'Dap trung min
' hien thi cac vi tri min
For row = 0 To intRowsBoard - 1
For col = 0 To intColsBoard - 1
315
If DataBoard(row, col) = 1 Then Call DisplayElem(row, col, MINEINACTIVE_IMG)
Next col, row
Call DisplayElem(h, c, MINEACTIVE_IMG)
MsgBox ("Ban da thua vi dap trung min roi!")
blnDangchoi = False
Else 'do trung cho khong co min
cnt = MineCount(h, c)
StatusBoard(h, c) = True
If cnt = 0 Then
Call DisplayElem(h, c, BLANCFIN_IMG)
Call Doquanh(h, c)
Else
Call DisplayElem(h, c, cnt + 4)
End If
intOdado = intOdado + 1
End If
If intOdado = intRowsBoard * intColsBoard - intMineCount Then
MsgBox ("Hoan ho, Ban da thang!")
blnDangchoi = False
End If
End Sub
'-----------------------------------------------------------------------------------------------------
' Các th t c d ch v c p 2 : ch đ c g i b i các th t c d ch v c p 1 ủ ụ ị ụ ấ ỉ ượ ọ ở ủ ụ ị ụ ấ
' Ta dùng t m v c Private đ phân bi ự ể ầ ệ ớ t v i các th t c d ch v c p 1 ủ ụ ị ụ ấ
'-----------------------------------------------------------------------------------------------------
316
v trí (row,col) có mã nh imgCode 'Hi n th ô mìn ị ể ở ị ả
Private Sub DisplayElem(ByVal row As Integer, ByVal col As Integer, ByVal imgCode As
Integer)
Dim x As Integer, y As Integer
Dim curPic As Object
ScaleMode = vbPixels
x = intBaseX + col * intPicXWidth
y = intBaseY + row * intPicXHeight
PaintPicture ImageList1.ListImages.Item(imgCode).Picture, x, y, intPicXWidth, intPicXHeight,
0, 0, , , vbSrcCopy
End Sub
' Tính s mìn xung quanh v trí (h,c) ố ị
Private Function MineCount(ByVal h As Integer, ByVal c As Integer) As Integer
Dim cnt As Integer
If h - 1 >= 0 And c - 1 >= 0 Then
If DataBoard(h - 1, c - 1) = 1 Then cnt = cnt + 1
End If
If h - 1 >= 0 Then
If DataBoard(h - 1, c) = 1 Then cnt = cnt + 1
End If
If h - 1 >= 0 And c + 1 < intColsBoard Then
If DataBoard(h - 1, c + 1) Then cnt = cnt + 1
End If
If c - 1 >= 0 Then
If DataBoard(h, c - 1) Then cnt = cnt + 1
End If
317
If c + 1 < intColsBoard Then
If DataBoard(h, c + 1) Then cnt = cnt + 1
End If
If h + 1 < intRowsBoard And c - 1 >= 0 Then
If DataBoard(h + 1, c - 1) Then cnt = cnt + 1
End If
If h + 1 < intRowsBoard Then
If DataBoard(h + 1, c) Then cnt = cnt + 1
End If
If h + 1 < intRowsBoard And c + 1 < intColsBoard Then
If DataBoard(h + 1, c + 1) Then cnt = cnt + 1
End If
MineCount = cnt
End Function
' Đ p t đ ng các ô bao quanh ô tr ng (h,c) ạ ự ộ ố
Private Sub Doquanh(ByVal h As Integer, ByVal c As Integer)
If h - 1 >= 0 And c - 1 >= 0 Then
If Not StatusBoard(h - 1, c - 1) Then Call Domin(h - 1, c - 1)
End If
If h - 1 >= 0 Then
If Not StatusBoard(h - 1, c) Then Call Domin(h - 1, c)
End If
If h - 1 >= 0 And c + 1 < intColsBoard Then
If Not StatusBoard(h - 1, c + 1) Then Call Domin(h - 1, c + 1)
End If
318
If c - 1 >= 0 Then
If Not StatusBoard(h, c - 1) Then Call Domin(h, c - 1)
End If
If c + 1 < intColsBoard Then
If Not StatusBoard(h, c + 1) Then Call Domin(h, c + 1)
End If
If h + 1 < intRowsBoard And c - 1 >= 0 Then
If Not StatusBoard(h + 1, c - 1) Then Call Domin(h + 1, c - 1)
End If
If h + 1 < intRowsBoard Then
If Not StatusBoard(h + 1, c) Then Call Domin(h + 1, c)
End If
If h + 1 < intRowsBoard And c + 1 < intColsBoard Then
If Not StatusBoard(h + 1, c + 1) Then Call Domin(h + 1, c + 1)
End If
End Sub