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

319