You are on page 1of 111

BI TH C HNH S 1

(Bu i 1)
M c tiu sinh vin c n t c:
Hi u v s d ng c h i u hnh Win9x m c c b n.
S d ng t t ti n ch Windows Explorer trong cc thao tc qu n l
h th ng file (th m c - folder & file).
Quy c k hi u v thu t ng trong ti li u:
Khi ni 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 sch dropdown c a submenu b.
Dng d u '/' miu t s ty ch n ph n t bn tri hay bn ph i
(a/b ngh a l a ho c b).
Dng d u + th hi n vi c b m gi ng th i nhi u phm. VD:
Ctrl + C ngh a l n gi phm Ctrl r i n th phm C r i th phm Ctrl.
V cch s d ng chu t: click ngh a l b m-th phm chu t tri,
right click ngh a l b m-th phm chu t ph i, double-click ngh a l
click nhanh 2 l n lin ti p (nhanh h n thng s qui nh v Mouse
trong Control Panel c a Windows.
N i dung chnh ph n th c hnh:
1. S l c v cch s d ng cc thi t b bn phm v chu t ( c
nh)
2. Kh i ng, t t 1 phin lm vi c trn Windows 9x.
3. Gi i thi u mn hnh lm vi c Windows
4. M (Load), t t ch ng trnh Windows Explorer
5. Gi i thi u mn hnh lm 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 tnh th m c/file
11. Thay i tn th m c/file
12. Tm ki m th m c/file
13. Delete th m c/file
14. Format a m m
15. Qui nh n/hi n th cc th m c/file c thu c tnh
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 c v cch s d ng cc thi t b bn phm v chu t ( c nh)
Chu t v bn phm l hai thi t b nh p d li u/l nh i u khi n th ng
dng nh t. Sinh vin c n n m c cch s d ng chng trong Windows v
176
trong cc ch ng trnh so n th o ti 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 Bn phm (keyboard)
Bn phm l thi t b nh p d li u chu n hi n nay (c th thay i trong
t ng lai). Bn phm hi n nay thng th ng c t 101 n 105 phm, c !
chia lm cc nhm chnh:
Nhm cc phm ch c n ng g m:
F1-F12: cc phm ch c n ng c a ph n m m (ch c n ng c a
chng 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 gc trn bn ph i bn phm hi n th thng tin tr ng thi
phm capslock: sng = nh ch hoa, khng sng = nh ch
th ng.
Enter: dng k t thc vi c nh p li u trong 1 textbox h u kh i
ng vi c yu c u h th ng th c hi n m t ch c n ng no ho c
a con tr xu ng u hng sau trong cc ch ng trnh so n th o #
v n b n.
Shift: dng km v i phm khc nh p ch th ng/hoa hay 1
trong 2 k t c kh c trn phm n theo qui nh sau :
Gi shift v b m cc phm c hai k t nh p k t pha trn.
Gi shift v b m k t ch chuy n i cch nh t m th i t !
hoa sang th ng v ng c l i (ph thu c vo tr ng thi Capslock).
Backspace ( d i phm F12): xa k t bn tri con tr . #
Delete: xa k t ngay t i v tr con tr hay xa cc file/ folder #
ch n.
Print screen: in mn hnh hi n t i vo Clipboard.
Nhm cc phm k t t a-z, k s t 0-9:
Cc phm ny th ng dng nh p d li u hay k t h p v i cc phm
i u khi n t o phm t t. cch k t h p v i phm Shift trnh "
by trn.
Nhm cc phm i u khi n:
Cc phm m i tn: $ ,,, : dng di chuy n con tr trong #
trnh so n th o.
Cc phm Home, End d i mn hnh v u hay cu i ti li u.
Cc phm Page Up, Page Down cu n ln hay xu ng 1 trang
mn hnh.
Ctrl, Alt: th ng dng k t h p v i cc phm khc ho c chu t
th c hi n m t cng vi c no .
Thanh space: thanh di pha d i cc k t ch , dng nh p
k t tr ng (m c d khng th y nh ng c r ng nh t nh).
177
Phm c a s Windows (c th c ho c khng ty bn phm)
hai bn thanh space, c d ng l c hnh 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 phm khc
th c hi n ch c n ng g trong Windows.
Nhm phm s NumPad:
n m bn ph i bn phm, ch c tc d ng khi n numlock ( i u khi n % &
b ng phm num lock) sng. Trong tr ng h p n numlock t t th %
ngh a cc phm ny c kh c pha d i cc s .
1.2 Chu t (mouse)
C hai n 3 nt nh n. M t s thao tc trn 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 nt tri 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 trnh.
Right click: n v nh nt ph i hi n ln menu ng v i i
t ng ang ch n (context menu).
2. Kh i ng, t t m t phin lm vi c trn Windows 9x.
Kh i ng = b m nt cng t c i n.
T t : ch n menu Start.Shut down, my c th t ng ng t i n ho c
hi n ln dng ch Its safe to turn off your computer, trong tr ng h p sau
b n c n b m cng t c i n ng t i n cho my. Khng nn t t b ng %
cch ch b m nt cng t c i n m khng ch n shutdown tr c. &
3. Gi i thi u mn hnh lm vi c Windows
Mn hnh lm vi c Windows (mn hnh desktop) c d ng nh hnh d i :
178
4. M (load), t t ch ng trnh Windows Explorer
Ngoi 4 cch trnh by trong cc slide l thuy t, b n c th ch y WE
b ng cc cch sau: %
Right click vo Start, ch n Explore trong menu m ra.
B m ng th i phm c a s Windows v ch E.
L u : c th m cng lc nhi u c a s WE.
t t WE (v cc c a s ch ng trnh ni chung): click vo d u " gc
trn ph i c a c a s (hay ch n menu File.Exit c a ch ng trnh).
5. Gi i thi u mn hnh lm vi c WE
Mn hnh lm vi c c a WE c gi i thi u trong slide 41 c a b slide
gio trnh. y gi i thi u thm m t s ph n t : '
179
Nt Start Icon c a cc shortcut n file Thanh taskbar ch a icon cc
ng d ng ang ch y
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 cc 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.
H th ng t o ra m t th m c c tn m c nh l "New folder"
hay "New folder2,3 B n nn nh p tn m i cho th m c g i nh
h n, l u tn th m c khng c trng v i tn m t th m c hay file
c trong cng m t th m c cha.
Th d th c hi n:
T o cy th m c sau b t u t th m c g c a D : !
Mn hnh lm vi c WE sau khi t o cy th m c c d ng sau:
180
X:\
Th m c c tn
l MSSV
Documents
Source code
Copied files
Moved files
a m m (
(floppy disk)
Cc a c ng
(hard disk)
T o file:
Vi c t o file th ng c th c hi n trong cc ng d ng. Trong WE c
th t o file b ng cch: %
Ch n v tr th m c c n t o file.
Ch n menu File.New, ch n option miu t ki u file mu n t o hay
right click vo c a s bn ph i v ch n New r i ch n option miu t
ki u file mu n t o.
Nh p tn cho file m i t o, l u tn khng c trng v i m t tn
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 trn. Sau khi t o xong, !
n i dung th m c documents nh sau:
181
7. Copy, paste th m c, file
Copy /Paste l thao tc r t th ng c s d ng. Quy t c chung
th c hi n Copy/ Paste g m cc b c:
ch n cc ph n t c n copy,
ch n l nh copy,
xc nh v tr th m c t cc b n copy,
ch n l nh paste.
Ch n cc ph n t c n copy th ng b ng cc cch sau:
Lm hi n th cc ph n t c n copy trn c a s bn tri ho c bn
ph i.
Ch n m t ph n t b ng cch click vo ph n t , icon c a ph n t %
chuy n mu s m ngh a l ph n t ang c ch n.
C th ch n nhi u ph n t theo m t trong cc sau:
Ctrl + A ch n t t c nh ng ph n t trong c a s bn ph i ho c
Click vo m t ph n t , b m gi phm shift v click vo ph n t khc
ch n t t c nh ng ph n t n m gi a 2 ph n t trn ho c %
Click vo m t ph n t , b m gi phm Ctrl v click vo cc ph n t
khc ch n nhi u ph n t r i r c.
L u : Click vo ph n t ang c ch n (mu s m) s lo i b ph n t ) #
kh i danh sch c ch n. #
Ch n l nh copy b ng m t trong cc cch sau:
Vo menu Edit, ch n m c Copy ho c
Ctrl + C ho c
Right click vo m t trong cc ph n t ch n, ch n Copy trong
menu hi n ra.
Xc nh v tr t cc b n copy :
182
B ng cch click vo th m c n i s ch a b n copy trong c a s bn tri % )
hi n ln n i dung c a th m c trong c a s bn ph i.
Ch n l nh paste b ng m t trong cc cch sau:
Vo menu Edit, ch n m c Paste ho c
Ctrl + V ho c
Right click vo tn 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 cch: right click vo cc ph n t c n copy (mu n copy nhi u ph i %
ch n tr c v right click ln m t trong nh ng ph n t ch n), ch n Send
to trong menu xu t hi n, ch n 3

Floppy (A).
Th c hi n:
Copy th m c C:\windows\fonts vo th m c copied files t o ra
trn.
Copy cc file t ARIAL.TTF n ARIBLK.TTF trong th m c !
copied files\fonts vo th m c copied files.
Copy cc file tr file TAHOMA.TTF trong th m c copied !
files\fonts vo th m c copied files. L u xem thng bo sau c a
my:
183
Thng bo d ng trn th ng g p khi ta paste ph n t (file hay th m c)
vo n i c ph n t khc trng tn. Ch n Yes n u mu n thay th ph n
t t n t i b ng ph n t m i, ch n No n u khng mu n thay th , ch n %
Yes to All thay th t t c nh ng ph n t t n t i b ng ph n t m i %
c cng tn.
Sau khi th c hi n, cy th m c nh sau: l u s l ng file trong th
m c copied files c th khc nhau ty thu c s l ng font ang dng trn
m i my. *
184
8. Move (cut, paste) th m c, file:
T ng t l nh copy, paste l nh move c ng th ng c th c hi n thng $
qua 4 b c:
ch n cc ph n t c n move,
ch n l nh cut,
xc nh v tr t cc ph n t ,
ch n l nh paste.
Cc b c 1, 3, 4 hon ton t ng t cc b c t ng ng m c 7.
Th c hi n b c 2 b ng m t trong cc cch: %
Vo menu Edit ch n m c Cut ho c Ctrl + X ho c,
Right click vo 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 trn.
18. Move ton b cc file trong th m c documents\copied files sang
th m c moved files.
Sau khi th c hi n, cy th m c hi n t i nh sau: l u s l ng file trong
th m c moved files c th khc nhau ty thu c s l ng font ang dng
trn m i my. *
185
9. M (load) file
Trong ng c nh c a WE, hnh ng load file s bao g m 2 tc v : n p )
ng d ng x l file r i nh n n p ti p file vo b nh s n sng lm +
vi c. C th load file b ng m t trong 2 cch sau : %
Double click ho c ch n file r i g phm Enter ho c ch n file r i
ch n menu File.Open, Windows s load ch ng trnh m c nh )
ch ng trnh ny n p file. N u windows khng xc nh c ch ng
trnh m c nh, n s hi n th b ng thng bo yu c u ch n ch ng )
trnh c file nh sau :
C th bo cho windows bi t ch ng trnh dng m lo i file ny trong
cc l n load sau b ng cch ch n Always use this program to open these %
files. V sau c th thay i l a ch n ny b ng cch thay i trong ph n %
thu c tnh (m c 10).
N u mu n load file b ng m t ch ng trnh t ch n trong c a s %
Open with trn, ch n file c n load, sau ch n menu File.Open
with
Th c hi n:
Load file readme.txt, sau click vo d u X gc ph i trn c a
ch ng trnh v a m ra ng l i (unload). !
10. Thay i thu c tnh th m c, file
xem v thay i thu c tnh c a file hay th m c, c th th c hi n "
theo m t trong cc cch sau :
186
Right click vo file hay th m c c n xem thu c tnh, ch n
Properties trong menu hi n ra.
Ch n file hay th m c c n xem thu c tnh, vo menu File, ch n
m c Properties.
WE hi n th c a s properties nh sau :
11. i tn (rename) file/ folder !
Ngoi cch vo properties (m c 10) i tn file hay th m c, b n c
th dng cc cch sau :
Right click ln file hay th m c c n i tn, ch n rename trong
menu m i m ra, nh p tn m i cho file hay th m c ho c
Click vo file hay th m c, ch n menu File, trong ch n m c
rename, nh p tn m i cho file hay folder.
L u : n u tn m i nh p trng v i tn m t ph n t ang t n t i trong
th m c, windows khng ch p nh n tn m i.
Th c hi n : i tn th m c documents thnh my_documents, i tn
file help.doc thnh document.doc
12. Tm ki m th m c, file
N u nh chnh xc ng d n c a file hay th m c c n truy xu t, b n ,
ch c n duy t cy th m c v n ph n t c n tm. Tuy nhin trong 1 s &
tr ng h p, ta khng nh chnh xc ng d n c a file/th m c c n truy ,
xu t, trong tr ng h p ny WE h tr ta tm ki m thng tin thng qua ch c *
n ng "Search". Ch c n ng Search c a WE cho php ta tm ki m 1 hay
nhi u file/th m c th a mn 1 s i u ki n nh sau : #
187
Tn file / th m c
Ch ng trnh m c nh
c file. Click vo
Change thay i
Kch th c th t
Khng gian a dnh
cho file
Ngy t o file
Ngy hi u ch nh g n &
nh t
Ngy truy xu t g n nh t
Cc thu c tnh read-only,
hidden, archive. Click vo
checkbox k bn !ha" #i
!h$%c !&nh.
pattern c a file/th m c c n tm . N u ta nh 1 ph n thng tin v
tn file/th m c th ta nn miu t n thng qua khi ni m pattern, th
d ta tm cc file *.doc hay cc file l*.xls... N u ta khng nh g h t, ta
ph i nh miu t *.*.
1 chu i k t t n t i trong file c n tm * . N u ta nh file c n tm
ch a 1 chu i k t no , cng di cng t t, th ta miu t chu i ny. * *
N u khng ta nh d tr ng tiu chu n ny. -
v tr th m c xu t pht vi c tm ki m . N u ta nh r ph n t c n
tm n m nhnh con c a 1 th m c no th ta miu t th m c %
ny. N u khng ta nh ch n th m c g c c a a.
tm 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 trn
Toolbar), WE s c d ng trang k (l u c a s bn tri thay i )
t d ng cy sang d ng khc). !
Nh p pattern c a file hay th m c c n tm, c th dng nh ng k
t thay th v i ngh a sau :
k t ? thay th cho m t k t b t k , .
k t * thay th cho 0 hay nhi u k t b t k . .
V d: tm t t c nh ng t p tin c ki u l vbp (file project c a
VB) dng chu i tn tm ki m *.vbp *
tm t t c nh ng t p tin c ki u vbp c tn b t u b ng A, k t " %
thc b ng B v tn ch c 4 k t ta dng chu i tn tm ki m A?? % & *
B.vbp.
C th nh p chu i k t trong file c n tm vo textbox *
"Containing text :", n u khng tr ng.
Ch n khu v c tm ki m, n u ch n my computer l tm ki m trong
ton b my.
Click button Search Now.
L u : k t qu tm ki m chnh xc h n c th b sung m t s
options trong Search options.
188
Pattern c n tm
K t qu tm
ki m
V tr ch a file/th
m c c n tm
Ty ch n
t ng thng tin
tm ki m
chu i c n tm *
Th c hi n:
Tm ki m t t c nh ng t p tin c tn b t u b ng A, k t thc %
b ng L, ki u l TTF (chu i tn tm 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 cch sau:
Ch n cc ph n t mu n delete r i,
Ch n menu File.Delete hay b m phm delete trn bn phm r i,
Ch n Yes trong h p tho i hi n ra.
L u : Khi xa theo cch trn, Windows s ph n t b xa vo m t )
n i c bi t g i l Recycle bin, sau ny c th vo ph c h i l i c.
N u mu n xa v nh vi n th b n b m gi phm Shift khi th c hi n thao tc 2 -
trn.
Th c hi n:
Xa v nh vi n ton b n i dung th m c c tn l m s sinh vin -
t o ra trn.
14. Format a m m "
a m m ang s d ng i khi c n format lm s ch a v gp "
ph n lm t ng kh n ng s d ng a. L u l m t khi format th
189
thng tin trn a s m t h t " # $ , v v y c n h t s c c n th n v i thao tc
ny. Tuy t i khng c format b t c a c ng no $ " .
format a m m c th th c hi n nh sau: "
B a m m vo a r i #
Right click vo a m m, ch n Format trong menu hi n ra.
WE hi n th h p tho i sau:
15. Qui nh n/hi n th cc th m c/file c thu c tnh Hidden/System %
B n c th qui nh cho WE hi n th /khng hi n th cc file/th m c c
thu c tnh hidden b ng cch vo menu View.Folder options (trn Win 9x) %
hay Tools.Folder options (trn WinMe hay Win2000), ch n tab View, duy t
tm m c "Hidden files" v click vo m c ch n t ng ng.
190
Dung l ng a
Ki u h th ng file
Nhn a (c th nh nhn m i)
Ty ch n:
Quick format : format
nhanh, th c ch t ch xa &
thng tin trn a, khng
ch n s l format ch m. )
B m start format
T ng t , WE hi n th /khng hi n th cc file/th m c c thu c tnh
system, b n duy t tm 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 cch hi n th cc ph n t c a mn hnh lm vi c
WE, th d n/hi n cc ph n t giao di n c a WE. n/hi n m t ph n t "
trn giao di n WE, nguyn t c chung l vo menu View, sau ch n/ b #
ch n ph n t c n n/hi n.
Vo Menu View.Toolbars n/hi n cc thanh tool bar nh :
Standard Buttons l thanh cng c ch a cc button chu n th hi n
nh ng ch c n ng th ng dng, Address bar l thanh a ch ch a &
ng d n n th m c ch a ph n t ang tch c c c a s bn ,
tri
191
Vo Menu View/Explorer bar ch n thng tin hi n th c a s
bn tri: Search: hi n th ph n tm ki m, Favorites: hi n th nh ng
trang Web a thch, History: hi n th l ch s truy xu t th m c, file
trn my, Folders: hi n th thng tin c u trc hnh cy h th ng th
m c trong my (th ng s d ng nh t).
Ch n/c m m c Status bar hi n th hay khng thanh tr ng thi
c a WE.
192
BI TH C HNH S 2
(Bu i 2)
M c tiu sinh vin c n t c :
Lm quen v i mi tr ng l p trnh VB.
Thi t k tr c quan c cc ph n t giao di n c a ch ng trnh.
T o c cc th t c x l bi n c v vi t code cho cc th t c ny.
Cc thao tc thi t k tr c quan v vi t code t p trung trn ch ng
trnh th d : trnh gi i ph ng trnh b c 2 trong tr ng s th c v i
form giao di n nh sau :
1. Tham kh o cc slide ch ng 4 ch y VB, t o project
GiaiPTrinhBac2, thi t k form giao di n v t o cc th t c x l bi n c cho
cc ph n t giao di n. C a s VB u tin th ng c d ng sau :
193
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:
194
3. n chu t vo button / c a form "Project1 - Form1 (Form)" phng to n
ra h t vng lm vi c c a VB, c a s VB s c d ng : )
4. D i chu t v handle d i ph i c a form Form1, n gi v drag chu t t i
v tr m i thay i kch th c form cho l n h n h u ch a cc ph n t
giao di n c a ch ng trnh. T o frame "Nhap thong so cho chuong trinh
ax^2 + bx + c = 0" b ng cch ch n icon % trong Toolbox, d i chu t t i v tr
thch h p trong Form r i v 1 hnh ch nh t ch a ph n t frame, hi u ch nh ) ! &
l i thng s Caption c a frame trong c a s thu c tnh gc d i ph i mn
hnh v n i dung m i "Nhap thong so cho chuong trinh ax^2 + bx + c = 0".
K t qu form c d ng :
195
5. T o Label "Nhap thong so a :" b ng cch ch n icon % trong Toolbox, d i
chu t t i v tr thch h p trong frame r i v 1 hnh ch nh t ch a ph n t ) !
label, hi u ch nh l i thng s Caption c a label trong c a s thu c tnh &
gc d i ph i mn hnh v n i dung m i "Nhap thong so a :". Dng qui trnh
t ng t t o 1 Textbox nh p li u (dng icon ), hi u ch nh thng s Name &
thnh txtA, xa gi tr thng s Text c a n. K t qu form c d ng :
6. L p l i b c 5 cho thng s b (hi u ch nh thu c tnh Name c a TextBox &
th 2 thnh txtB). L p l i b c 5 1 l n n a cho thng s c (hi u ch nh thu c &
tnh Name c a TextBox th 3 thnh txtC). K t qu form c d ng :
196
7. ch nh th ng l tri 3 label, n gi nt Ctrl r i l n l t dng chu t ch n " & 0
3 label, label lm chu n v tr s c ch n cu i cng, th d label "Nhap )
thong so a:" trong nh d i y :
8. Ch n option Format.Align.Left ch nh l tri c a 3 label, k t qu form &
c d ng :
197
9. Trong khi 3 label v n cn c ch n, hy ch n option Format.Make ,
Same Size.Both ch nh 3 label c cng kch 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 cc thao tc ch nh tri, ch nh kch th c v ch nh d c nh trn & & &
cho 3 TextBox nh p li u, k t qu form c d ng :
198
11. Ti p t c v button "Bat dau giai" (hi u ch nh thu c tnh Name thnh ) &
Start, Caption thnh "Bat dau giai"). V frame ch a 2 nghi m d i button, )
hi u ch nh cc thu c tnh cho cc ph n t trong frame ch a 2 nghi m nh &
sau :
ph n t frame c thu c tnh Caption = "Cac nghiem cua phuong trinh"
label 1 c thu c tnh Caption = "Nghiem x1 =".
label 2 c thu c tnh Caption = "Nghiem x2 =".
TextBox ch a nghi m 1 c thu c tnh Name = "txtX1" v Text = "".
TextBox ch a nghi m 2 c thu c tnh Name = "txtX2" v Text = "".
K t qu frame c d ng :
199
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 kp chu t vo button "Bat dau giai" t o hm x l s ki n Click /
chu t cho button ny, k t qu template (khung s n) c a hm x l s ki n
s hi n th ln mn hnh nh sau: )
14. Nh p o n code sau cho hm x l s ki n :
200
'Th t c x l s ki n click button "Bat dau giai"
Private Sub Start_Click()
' Khai bo cc bi n c n dng
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)
c = CDbl(txtC.Text)
' Tnh bi t s delta
delta = b * b - 4 * a * c
' Ki m tra bi t s delta
If (delta < 0) Then
txtX1 = "Vo nghiem"
txtX2 = "Vo nghiem"
Else
' Tnh 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 ln form " *
txtX1 = CStr(x1)
txtX2 = CStr(x2)
End If
End Sub
15. Ch n menu Run.Start ch y th ch ng trnh, n u b n lm ng 14
b c tr c v khng c sai st, ch ng trnh s ch y c. Th nh p 3 )
thng s a,b,c c a 1 ph ng trnh b c 2 m b n bi t nghi m r i n
button v xem k t qu . B n c quy n gi i bao nhiu ph ng trnh c ng $
c. Lc no mu n d ng ch ng trnh b n c th n chu t vo button !
gc trn ph i form ch ng trnh.
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 xc nh th m c ch a cc file c a Project.
201
BI TH C HNH S 3
(Bu i 3,4,5)
M c tiu sinh vin c n t c :
Lm quen v i mi tr ng l p trnh VB.
Thi t k tr c quan c cc ph n t giao di n c a ch ng trnh.
T o c cc th t c x l bi n c v vi t code cho cc th t c ny.
Cc thao tc thi t k tr c quan v vi t code t p trung trn ch ng
trnh th d : trnh MiniCalculator gi l p my tnh tay v i giao di n
gi ng nh trnh Calculator c a Windows ch Standard.
1. Tham kh o cc slide ch ng 4 ch y VB, t o project
MiniCalculator, thi t k form giao di n v t o cc th t c x l bi n
c cho cc ph n t giao di n :

S d ng menu Format nh d ng cc command button v text box nh
. Cc ch c n ng h tr trong menu format: *
Align Left: canh tri th ng hng cc i t ng giao di n. 0
Align Right: canh ph i th ng hng cc i t ng giao di n. 0
Align Top: canh c nh trn th ng hng cc i t ng giao di n. 0
Align Bottom: canh c nh d i th ng hng cc i t ng giao di n. 0
Align Center: canh gi a th ng hng cc i t ng giao di n theo chi u 0
d c.
Align Middle: canh gi a th ng hng cc i t ng giao di n theo chi u 0
ngang.
Make Same Size Width: t o chi u ngang b ng nhau gi a cc i t ng. %
Make Same Size Height: t o chi u cao b ng nhau gi a cc i t ng. %
Make Same Size Both: t o cc i t ng b ng nhau c chi u ngang v %
chi u cao.
Horizontal Spacing Make Equal: cc i t ng d li u cch u nhau
theo chi u ngang
Vertical Spacing Make Equal: cc i t ng d li u cch u nhau theo
chi u d c.
Thi t l p cc thu c tnh cho cc i t ng giao di n trn form l n
l t t trn xu ng d i, t tri sang ph i theo qui c sau :
Caption = , Name = cmdMemStatus
Caption = MC, Name = cmdMC
Caption = MR, Name = cmdMR
Caption = MS, Name = cmdMS
Caption = MA, Name = cmdMA
Caption = 0, Name = cmd0
202
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
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 trn xu ng, t tri
sang r i vi t code cho cc th t c x l bi n c :
a. nh ngh a cc h ng g i nh v cc thu c tnh d li u c a form ! "
MiniCalculator
Option Explicit ' Yu c u m i bi n u ph i c nh ngh a
' nh ngh a cc h ng g i nh c n dng 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 tnh l u gi gi tr ton h ng 1 c a ton t 2 ngi
Private strOldValue As String
' Thu c tnh l u gi m ton t 2 ngi ch a c th c hi n
Private bytOperatorId As Byte
203
' Thu c tnh l u gi gi tr c a b nh c a Calculator
Private strMemValue As String
' Thu c tnh miu t tr ng thi nh p li u (k s u/k s sau )
Dim blnStartData As Boolean
b. L p trnh x l thao tc nh p d li u
Khi b m m t nt 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 trnh nh p: khi ta s thm d li u v a c ) !
nh p vo bn ph i chu i d li u ang nh p trn textbox hi n th .
miu t tr ng thi nh p li u (k s u/k s sau ), ta s s d ng " )
bi n blnStartData c ki u l Boolean.
nh ngh a th t c c p nh t gi tr hi n th c a Calculator sau khi 1 phm "
c n :
'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 phm 0
Private Sub cmd0_Click()
UpdateDisplay (0)
End Sub
' Th t c ph c v phm 1
Private Sub cmd1_Click()
UpdateDisplay (1)
End Sub
' Th t c ph c v phm 2
Private Sub cmd2_Click()
UpdateDisplay (2)
End Sub
' Th t c ph c v phm 3
Private Sub cmd3_Click()
204
UpdateDisplay (3)
End Sub
' Th t c ph c v phm 4
Private Sub cmd4_Click()
UpdateDisplay (4)
End Sub
' Th t c ph c v phm 5
Private Sub cmd5_Click()
UpdateDisplay (5)
End Sub
' Th t c ph c v phm 6
Private Sub cmd6_Click()
UpdateDisplay (6)
End Sub
' Th t c ph c v phm 7
Private Sub cmd7_Click()
UpdateDisplay (7)
End Sub
' Th t c ph c v phm 8
Private Sub cmd8_Click()
UpdateDisplay (8)
End Sub
' Th t c ph c v phm 9
Private Sub cmd9_Click()
UpdateDisplay (9)
End Sub
' Th t c x l d u . th p phn
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 & "."
End If
205
End If
End If
End Sub
c. L p trnh x l cc ton t 1 ngi
G m cc ton t nh +/-, sqrt, 1/x. Ta s th c hi n tnh ton tr c ti p v tr )
k t qu l i trn mn hnh. Cc th t c x l cc ton t ny nh sau :
' Th t c i s d ng --> m v ng c l i
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)))
End Sub
' Th t c tnh 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
d. L p trnh x l cc ton t 2 ngi
G m cc ton t nh +, -, *, /. Ta s l u gi ton h ng 1 (trn mn display) )
r i ch ng i dng nh p thm ton h ng 2 m i th c hi n php ton.
Private Sub Op_Process(op As Byte)
Dim dblOldValue As Double
Dim dblDispValue As Double
206
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
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 ton t +
Private Sub cmdAdd_Click()
Op_Process (IDC_ADD)
End Sub
' Th t c x l ton t -
Private Sub cmdSub_Click()
Op_Process (IDC_SUB)
End Sub
' Th t c x l ton t *
Private Sub cmdMul_Click()
Op_Process (IDC_MUL)
End Sub
' Th t c x l ton t /
Private Sub cmdDiv_Click()
Op_Process (IDC_DIV)
End Sub
' Th t c x l ton t =
Private Sub cmdEqual_Click()
Op_Process (IDC_EQUAL)
End Sub
207
e. L p trnh x l cc php ton v b nh MS, M+, MR, MC
y l nh ng ton t x l b nh (my tnh gi l p c a ta ch c 1 b " &
nh ) : c t tr display vo b nh , c ng d n tr display vo b nh , c l i tr
b nh ra display v xa b nh .
' Th t c c t n i dung dislay vo b nh
Private Sub cmdMS_Click()
strMemValue = txtDisplay.Text
cmdMemStatus.Caption = "M"
blnStartData = True
End Sub
' Th t c c ng tch l y n i dung dislay vo 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
'Tao lai trang thai nhap lieu tu dau cho viec nhap lieu ke tiep
blnStartData = True
End Sub
' Th t c xa 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 trnh x l cc thao tc khc
' Th t c xa display
Private Sub cmdCE_Click()
'Xoa man hinh
208
txtDisplay.Text = "0."
blnStartData = True
End Sub
' 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 xa 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 php %
Private Sub cmdPercent_Click()
Op_Process (IDC_PERCENT)
End Sub
209
BI TH C HNH THM NH '
(S 1)
M c tiu sinh vin c n t c :
Thi t k tr c quan c cc ph n t giao di n c a ch ng trnh d ng
MDI.
T o c cc th t c x l bi n c v vi t code cho cc th t c ny.
Code ch ng trnh t p trung gi i quy t cc v n l ng gic v hi n
th h a.
Ch ng trnh th c hnh : trnh v cc t gic ch y trn nhi u c a s )
ng th i c giao di n MDI ngh nh sau :
210
Chi ti t cc menu nh sau :


Qui trnh th c hi n :
1. Ch y VB b ng 1 trong cc cch bi t. %
211
2. Khi c a s New Project hi n th , ch n icon "VB Application Wizard" nh
trn v n button Open.
3. B n c th ch n file "profile" ch a cc thng tin c u hnh c n dng (
thi t l p s n cho cc Project tr c) r i n button Next th c hi n b c +
ti p theo c a qui trnh Wizard.
212
4. B n ch n checkbox MDI, nh p tn Project r i n button Next th c
hi n b c ti p theo c a qui trnh Wizard.
5. B n c th xy d ng tr c quan menu (trong th d ny b n khng c n
lm g b c ny) r i n button Next th c hi n b c ti p theo c a qui
trnh Wizard.
213
6. B n c th xy d ng tr c quan toolbar (trong th d ny b n khng c n
lm g b c ny) r i n button Next th c hi n b c ti p theo c a qui
trnh Wizard.
7. B n c th gi nguyn thi t l p c a c a s ny r i n button Next
th c hi n b c ti p theo c a qui trnh Wizard.
214
8. B n c th gi nguyn thi t l p c a c a s ny (v khng c n truy xu t
Internet) r i n button Next th c hi n b c ti p theo c a qui trnh
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 trnh
Wizard.
215
10. B n c th t o 1 hay nhi u data form truy xu t database (nh ng ng
d ng ny khng c n) r i n button Next th c hi n b c ti p theo c a qui
trnh Wizard.
216
11. B n c th ch n file profile v c t cc thng s v a thi t l p ln ( !
dng l i cho cc ng d ng khc) r i n button Finish hon t t qui trnh
Wizard.
12. C a s ban u c a Project v a t o ra. n kp chu t vo tn ! / frmAbout
trong c a s Project hi n th n r i hi u ch nh l i theo mu n, th d &
theo d ng sau :
217
218
13. n chu t ph i trong c a s Project, ch n menu Add.Form t o ra 1 /
form m i, t tn l frmInit r i thi t k n nh sau. Form ny c dng
yu c u user nh p cc thng s v cc t gic ch y cho 1 c a s con hi n
t i c a ch ng trnh.
14. n kp chu t vo buton Ok t o th t c x l bi n c cho button ny /
r i vi t code cho n nh sau :
Option Explicit
Private Sub cmdOk_Click()
Hide
End Sub
15. n kp chu t vo tn / 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 trnh MDI, & , "
n miu t 1 c a s con c t o ra 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 yu c u v 2
control : Timer nh th i v commonDialog hi n th cc c a s thi t
l p thng s my in.
219
txtSoTugiacChay
txtSoLuuAnh
txtMaxStep
txtTocDo
cmdOk
16. T o cc th t c x l bi n c cho cc option c a menu r i vi t code cho
chng nh sau :
'============================================
' Code c a cc th t c x l s ki n trong frmDocument
'============================================
Option Explicit
Private inforec As FormInfo 'record ch a thng tin hi n th c a frmDocument
Private frmInitAttr As New frmInit ' form thi t l p thng s c a frmDocument
' Th t c x l s ki n Load form
Private Sub Form_Load()
StepTimer.Enabled = False ' c m timer lm vi c
Me.BackColor = QBColor(0) ' n n en
ScaleMode = vbPixels ' n v tnh kch th c l pixel
mnuViewToolbar.Checked = False ' t t Toolbar
fMainForm.tbToolBar.Visible = mnuViewToolbar.Checked
mnuViewStatusBar.Checked = True ' hi n th Status bar
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
220
' Th t c x l s ki n thay i kch th c form
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) ' dng l i gi tr hi n
hnh
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)
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 gic 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 gic ch y !
Call KhoidongCacTugiac(inforec) ' kh i ng chng
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()
221
Dim frmD As frmDocument
lDocumentCount = lDocumentCount + 1 ' bi n public ny c khai bo
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"
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
222
' 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"
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 kp chu t vo tn Module1 c a s Project r i thm l nh nh /
ngh a bi n ton c c nh sau :
Public fMainForm As frmMain
Public lDocumentCount As Long' nh s c a s con t o ra
Sub Main()
Set fMainForm = New frmMain
fMainForm.Show
End Sub
223
18. n chu t ph i trong c a s Project, ch n menu Add.Module t o ra 1 /
standard module m i, t tn l XulyTugiac. Module ny s ch a cc th )
t c qu n l v hi n th cc t gic ch y cho 1 c a s . t ng chnh l m i *
c a s c 1 danh sch cc t gic ch y, m i t gic ch y c xc nh b i *
4 nh v cc thng s khc nh mu v , b c ch y tnh b ng pixel, gc & ) %
ch y tnh b ng ... M i c a s c 1 timer t o chu k v l i (tnh b ng ms % * . ) %
v do user nh p vo), chu k cng nh th t c ch y cng nhanh (d nhin . #
cn ph thu c vo b c ch y c a t ng nh t gic). n kp chu t vo tn ! & /
XulyTugiac r i vi t code cho 2 th t c public KhoidongCacTugiac,
VeCacTugiac v cc th t c d ch v km theo nh sau :
'=========================================================
' Module ch a cc th t c qu n l t gic ch y
'=========================================================
Option Explicit
' nh ngh a cc h ng g i nh c n dng " %
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
End Type
' nh ngh a ki u ch a cc thng tin c a 1 t gic ch y. "
Private Type TuGiacChay
intMau As Integer ' mu hi n t i c a t gic
Dinh(4) As Toado ' 4 nh c a t gic &
dblBuocChay(4) As Double ' b c ch y tnh theo pixel
dblGocChay(4) As Double ' gc ch y tnh theo
HangLuuanh(SOLUUANHMAX, 4) As Toado
intDauLuuAnh As Integer ' ch s u l u nh &
intDuoiLuuAnh As Integer ' ch s ui l u nh &
End Type
' nh ngh a ki u ch a cc thng tin c a 1 c a s con ch a cc t gic "
ch y
Public Type FormInfo
objFormRef As Form ' tham kh o n c a s ch a cc t gic
ch y
224
intSoTugiac As Integer ' s t gic ch y trong c a s
intSoLuuAnh As Integer ' s l u nh
intMaxStep As Integer ' b c ch y max c a cc nh t gic &
intTocdo As Integer ' t c v l i t gic )
DsTugiac() As TuGiacChay ' danh sch cc t gic 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 mu c dng v cc t gic )
End Type
225
'=========================================================
' Hi u ch nh gc ch y c a cc nh t gic & &
' trnh cc tr ng h p nh ch y th ng ng hay ngang & 0
'=========================================================
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
'=========================================================
' Tnh gc ph n x m i khi nh ng thnh ng (bn tri 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
'=========================================================
' Tnh gc ph n x m i khi nh ng thnh ngang (trn hay d i). * &
'=========================================================
Private Function DoiGocChayY(dblGocChay As Double) As Double
DoiGocChayY = ChinhGocChay(360 - dblGocChay)
End Function
226
'=========================================================
' 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
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 thnh ngang hay d c -> thay i gc ch y, b c ch y v
mu 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
y = 0
ElseIf (y >= .Ymax) Then
227
y = .Ymax - 1
End If
' L u t a vo v tr c $
.DsTugiac(i).Dinh(j).x = Int(x)
.DsTugiac(i).Dinh(j).y = Int(y)
End With
End Sub
'=========================================================
' Hi n th t gic DsTugiac(i).HangLuuanh(idx)
'=========================================================
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 mu v v n v tnh b ng pixel ) %
.objFormRef.ForeColor = QBColor(intMau)
.objFormRef.ScaleMode = 3
' l p v t ng c nh c a t gic ) !
For j = 0 To 3
x1 = .DsTugiac(i).HangLuuanh(idx, j).x
y1 = .DsTugiac(i).HangLuuanh(idx, j).y
If (j < 3) Then
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 nhin cho cc t gic ch y trong c a s ,
'=========================================================
Public Sub KhoidongCacTugiac(pview As FormInfo)
Dim i As Integer, j As Integer
With pview
Randomize
228
.intMaxColor = 15
' L p kh i ng t ng t gic trong danh sch !
For i = 0 To .intSoTugiac - 1
' kh i ng mu
.DsTugiac(i).intMau = Int(Rnd() * .intMaxColor)
If .DsTugiac(i).intMau = 0 Then .DsTugiac(i).intMau = .intMaxColor - 1
' kh i ng ch s u v ui c a hng l u nh &
.DsTugiac(i).intDauLuuAnh = 0
.DsTugiac(i).intDuoiLuuAnh = 0
' kh i ng 4 nh t gic + b c ch y + gc ch y &
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
'=========================================================
' Xa t gic ui l u nh, tnh t gic m i, ch a n vo u l u nh r i
v n )
'=========================================================
Public Sub VeCacTugiac(pview As FormInfo)
Dim i As Integer, j As Integer
With pview
' L p x l t ng t gic ch y trong danh sch !
For i = 0 To .intSoTugiac - 1
' Xa t gic ui hng 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
End If
' Tnh t gic m i
For j = 0 To 3
Call HieuchinhDinh(pview, i, j)
Next j
229
' ch a t gic m i vo u hng 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 gic m i u hng 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
230
BI TH C HNH THM NH '
(S 2)
M c tiu sinh vin c n t c:
Thi t k tr c quan c cc ph n t giao di n c a ch ng trnh
d ng SDI.
T o c cc th t c x l bi n c v vi t code cho cc th t c
ny.
S d ng cc linh ki n ph n m m c s n (do mnh vi t, do cng +
ty khc vi t hay do Microsoft vi t). bi t p ny ta s dng linh ki n ' )
tn l WebBrowser x l m i v n Web : download, hi n th ,
ch t ng tc v i ng i dng,...
Ch ng trnh th c hnh : trnh duy t Web tn l MyIE c giao
di n SDI ngh nh sau :
231
Chi ti t cc menu nh sau :


Qui trnh th c hi n :
1. Ch y VB b ng 1 trong cc cch bi t. %
2. Khi c a s New Project hi n th , ch n icon "VB Application Wizard" nh
hnh trn v n button Open.
232
3. B n c th ch n file "profile" ch a cc thng tin c u hnh c n dng (
thi t l p s n cho cc Project tr c) r i n button Next th c hi n b c +
ti p theo c a qui trnh Wizard.
233
4. B n ch n checkbox SDI, nh p tn Project "MyIE" r i n button Next
th c hi n b c ti p theo c a qui trnh Wizard.
5. B n c th xy d ng t r c quan menu (trong th d ny b n khng c n
lm g b c ny) r i n button Next th c hi n b c ti p theo c a qui
trnh Wizard.
234
6. B n c th xy d ng tr c quan toolbar (trong th d ny b n khng c n
lm g b c ny) r i n button Next th c hi n b c ti p theo c a qui
trnh Wizard.
7. B n c th gi nguyn thi t l p c a c a s ny r i n button Next
th c hi n b c ti p theo c a qui trnh Wizard.
235
8. B n nn ch n checkbox Yes VB thm cc ActiveX Control truy xu t
Web vo 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 trnh Wizard.
9. B n ch n checkbox About Box VB t ng t o form AboutBox dm
b n r i n button Next th c hi n b c ti p theo c a qui trnh Wizard.
236
10. B n c th t o 1 hay nhi u data form truy xu t database (nh ng ng
d ng ny khng c n) r i n button Next th c hi n b c ti p theo c a qui
trnh Wizard.
11. B n c th ch n file profile v c t cc thng s v a thi t l p ln ( !
dng l i cho cc ng d ng khc) r i n button Finish k t thc qui trnh
Wizard.
237
12. C a s ban u c a Project v a t o ra c d ng c a hnh trn. N u !
kh o st k form hi n th v tn c a n trong c a s Project th b n s bi t 1 )
l form truy xu t Web. By gi b n c th 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 vo comboBox Address truy xu t Web. Tuy nhin v &
mu n ch ng trnh chnh qui h n v i nhi u ch c n ng h n nn ta c th
xa form frmBrowser i v thi t k l i c a s chnh theo yu c u c a
ch ng trnh ngh . Nh ng tr c h t hy n kp vo tn frmAbout trong
c a s Project hi n th form AboutBox c a ch ng trnh r i hi u ch nh &
l i theo mu n, th d theo d ng sau :
13. n kp chu t vo tn / frmMain trong c a s Project hi n th c a s
238
chnh c a ch ng trnh. Ch n menu Tool.Menu Editor hi u ch nh l i &
menu c a ch ng trnh theo c t ngh ph n m c ch. Sau khi hi u
ch nh menu xong th c a s chnh c d ng sau : &
14. V Toolbar c a trnh MyIE c a ta khc xa Toolbar c s n nn t t nh t l +
xa Toolbar c s n r i t o Toolbar m i. Sau khi xa Toolbar, c a s c +
d ng sau :
239
15. Dng trnh so n th o h a (nh Paint, Corel Draw!,...) + trnh screen
capture v /copy 9 icon Toolbar c a ch ng trnh r i c t t ng nh icon ) !
ln file bitmap t ng ng (nn c t vo cng 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 vo i t ng ImageList, ch n m c Properties hi n th /
c a s thu c tnh c a n h u hi u ch nh l i theo mong mu n. Sau khi ch n &
tab Images trn c a s thu c tnh, c a s Properties c d ng nh sau :
17. Ta ch n t ng images r i n button "Remove Picture" xa n n khi !
khng cn images no trong danh sch, lc ny c a s thu c tnh c d ng
sau :
240
18. n button "Insert Picture" thm t ng images vo danh sch, c a s / !
sau c hi n th ta duy t file v ch n file image c n thm vo danh
sch :
241
19. Ch n file goback.bmp miu t icon "Back" r i ch n button Open thm
n vo danh sch, c a s thu c tnh s c d ng sau : )
20. Nh p danh hi u nh n d ng image vo textbox "Key", m i l n Toolbox *
c n 1 icon trong ImageList, ta c th dng ch s (Index) hay danh hi u Key &
c a n g i nh h n. Ti p t c thm t ng image khc v t tn cho n !
cho n khi thm 9 images theo yu c u. Lc ny c a s thu c tnh
c d ng sau :
242
21. n button OK hon t t vi c hi u ch nh ImageList v tr v c a s / &
chnh c a ch ng trnh. T o i t ng ToolBar, n ph i chu t vo n v
ch n m c Properties hi n th c a s thu c tnh c a Toolbar :
243
22. Duy t comboBox "ImageList", ch n m c imlToolbarcons (tn c a i
t ng ImageList) khai bo r ng Toolbar dng cc images trong i %
t ng ImageList ny. Duy t danh sch Style v ch n m c "1-tbrFlat"
hi n th cc icon toolbar khng c ng vi n. Hnh trn cho th y hi n tr ng
c a c a s thu c tnh Toolbar. Ch n tab "Buttons" nh ngh a cc button
Toolbar, c a s sau s hi n th : )
244
23. n button "Insert Button" thm icon m i r i khai bo cc thu c tnh /
c a n. L u cc thu c tnh Caption (text hi n th d i button), Key (danh
hi u nh n d ng button trong code ch ng trnh), 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 : &
24. L p l i thao tc b c 23 chn l n t o 9 icon mong mu n trong
Toolbar, c a s thu c tnh sau cho th y hi n tr ng ang t o icon th 8 :
245
25. V icon Favorites v Fonts c d ng menu Dropdown nn ta s khai bo )
thu c tnh ny cho chng (Style = 5-tbrDropdown) cng cc option con c a
chng. Th d c a s sau l hi n tr ng hi u ch nh thu c tnh cho icon &
Fonts. L p ch n button "Insert Buttonmenu" t o t ng option con cng !
cc thu c tnh c a n. L u nn t thu c tnh "Key" c a t ng option trong !
menu Fonts gi ng v i thu c tnh "Name" c a option t ng ng trong menu
View.Fonts v chng th c hi n cng ch c n ng.
246
26. T ng t , th d c a s sau l hi n tr ng hi u ch nh thu c tnh cho icon &
Favorites. Do menu ny c thay i ng khi ch ng trnh ch y, nn ta
ch c n t o 1 option gi ban u b ng cch ch n button "Insert & %
Buttonmenu".
27. Sau khi xy d ng xong Toolbar, c a s chnh c a ch ng trnh s c )
d ng sau :
247
28. By gi ta t o thm 3 i t ng khc cho ch ng trnh : 1 comboBox
ch a danh sch cc 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 kch th c c a 2 i t ng
conboBox v WebBrowser khng c n chnh xc v code ch ng trnh s t )
hi u ch nh chng m i khi c a s thay i kch th c. C a s ch ng trnh & *
s c d ng sau : )
29. T o cc th t c x l bi n c cho cc option menu v Toolbar r i vi t
code cho chng nh sau :
'======================================================
' Code c a form frmMain
'======================================================
Option Explicit
Dim sFile As String ' bi n ch a URL c ch n l n cu i cng
' 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 kch th c
Private Sub Form_Resize()
ScaleMode = vbPixels
248
' v l i 2 i t ng ComboBox v WebBrowser cho ph h p kch 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 cc form c a ch ng trnh
For i = Forms.Count - 1 To 1 Step -1
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
'================================================
' Cc 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 sch 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
' 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
249
' 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
' Thm pathname file vo danh sch v hi n th n
UpdateAddrCombo (sFile)
End Sub
' Th t c thm URL c a trang Web c n hi n th vo danh sch v hi n th
n
Private Sub UpdateAddrCombo(strURL As String)
Dim idx As Integer
Dim intItemCount As Integer
StatusTimer.Enabled = True
intItemCount = cbAddress.ListCount
' Tm m c ch a chu i strURL trong danh sch v xa 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 vo u danh sch ComboBox
cbAddress.AddItem strURL, 0
' nh i t ng WebBrowser1 download v hi n th trang Web
WebBrowser1.Navigate2 (strURL)
End Sub
'================================================
' Cc 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()
250
WebBrowser1.GoBack
End Sub
' Th t c x l s ki n ch n menu Go.Forward
Private Sub mnuGoForward_Click()
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 hnh
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
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
251
' 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
'================================================
' Cc th t c x l s ki n thay i kch th c font hi n th
'================================================
' Th t c x l s ki n ch n menu View.Fonts.Large
Private Sub mnuViewFontsLarge_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.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
StatusTimer.Enabled = False
252
cbAddress.Text = sFile
Else
End If
End Sub
' Th t c x l s ki n ch n option trong cc 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
' 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
253
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
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
254
BI TH C HNH THM NH '
(S 3)
M c tiu sinh vin c n t c:
Thi t k tr c quan c cc ph n t giao di n c a ch ng trnh
d ng SDI.
T o c cc th t c x l bi n c v vi t code cho cc th t c
ny.
Dng c cc hm v nh, thay i kch th c i t ng giao )
di n.
Dng c cc th t c x l s ki n c b n nh MouseDown, ...
Ch ng trnh th c hnh : tr ch i Caro gi a ng i v my :
255
Chi ti t cc menu nh sau :

Qui trnh th c hi n :
1. Ch y VB b ng 1 trong cc cch bi t. %
2. Khi c a s New Project hi n th , ch n icon "VB Application Wizard" nh
hnh trn v n button Open.
256
3. B n c th ch n file "profile" ch a cc thng tin c u hnh c n dng (
thi t l p s n cho cc Project tr c) r i n button Next th c hi n b c +
ti p theo c a qui trnh Wizard.
257
4. B n ch n checkbox SDI, nh p tn Project "Caro" r i n button Next
th c hi n b c ti p theo c a qui trnh Wizard.
5. B n c th xy d ng t r c quan menu (trong th d ny b n khng c n
lm g b c ny) r i n button Next th c hi n b c ti p theo c a qui
trnh Wizard.
258
6. B n c th xy d ng tr c quan toolbar (trong th d ny b n khng c n
lm g b c ny) r i n button Next th c hi n b c ti p theo c a qui
trnh Wizard.
7. B n c th gi nguyn thi t l p c a c a s ny r i n button Next
th c hi n b c ti p theo c a qui trnh Wizard.
259
8. B n c th gi nguyn thi t l p c a c a s ny (v khng c n truy xu t
Internet) r i n button Next th c hi n b c ti p theo c a qui trnh
Wizard.
9. B n ch n checkbox About Box VB t ng t o form AboutBox dm
b n r i n button Next th c hi n b c ti p theo c a qui trnh Wizard.
260
10. B n c th t o 1 hay nhi u data form truy xu t database (nh ng ng
d ng ny khng c n) r i n button Next th c hi n b c ti p theo c a qui
trnh Wizard.
11. B n c th ch n file profile v c t cc thng s v a thi t l p ln ( !
dng l i cho cc ng d ng khc) r i n button Finish k t thc qui trnh
Wizard.
261
12. C a s ban u c a Project v a t o ra c d ng c a hnh trn. Tr c !
h t hy n kp vo tn frmAbout trong c a s Project hi n th form
AboutBox c a ch ng trnh r i hi u ch nh l i theo mu n, th d theo d ng &
sau :
13. n kp chu t vo tn / frmMain trong c a s Project hi n th c a s
chnh c a ch ng trnh. Ch n menu Tool.Menu Editor hi u ch nh l i &
menu c a ch ng trnh theo c t ngh ph n m c ch. Sau , xa
Toolbar, comboBox trn frmMain (ch gi l i i t ng ImageList). Cu i &
cng c a s chnh c d ng sau :
262
14. Dng trnh so n th o h a (nh Paint, Corel Draw!,...) + trnh screen
capture v /copy 5 bitmap miu t tr ng thi cc c (tr ng, X, O, )
X nh p nhy, O nh p nhy) r i c t t ng nh icon ln file bitmap t ng !
ng (nn c t vo cng 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
263
15. n ph i chu t vo i t ng ImageList, ch n m c Properties hi n th /
c a s thu c tnh c a n h u hi u ch nh l i theo mong mu n. Sau khi ch n &
tab Images trn c a s thu c tnh, c a s Properties c d ng nh sau :
16. Ta ch n t ng images r i n button "Remove Picture" xa n n khi !
khng cn images no trong danh sch, lc ny c a s thu c tnh c d ng
sau :
264
17. n button "Insert Picture" thm t ng images vo danh sch, c a s / !
sau c hi n th ta duy t file v ch n file image c n thm vo danh
sch :
18. Ch n file blanc.gif miu t c tr ng r i ch n button Open thm n
vo danh sch, c a s thu c tnh s c d ng sau : )
265
19. Nh p danh hi u nh n d ng image vo textbox "Key", m i l n code *
ch ng trnh c n truy xu t 1 icon trong ImageList, ta c th dng ch s &
(Index) hay danh hi u Key c a n g i nh h n. Ti p t c thm t ng !
image khc v t tn cho n cho n khi thm 5 images theo yu
c u. Lc ny c a s thu c tnh c d ng sau :
20. n button OK hon t t vi c hi u ch nh ImageList v tr v c a s / &
chnh c a ch ng trnh. t l i tn imageList l ImageList1. "
21. T o cc th t c x l bi n c cho 2 option Start v Setup... r i vi t code
cho chng nh sau :
Option Explicit
' nh ngh a cc h ng g i nh c dng " %
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 cc bi n c dng trong module "
Private blnDangchoi As Boolean ' Trang thai choi/chua choi
Private Board() As Integer ' Ma tran trang thai cac o
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
266
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 trn tri c a
bn c
Private intPicXWidth As Integer, intPicXHeight As Integer ' kch 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
'------------------------------------------------------------------
' Cc 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
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 bn c khng ? %
If intBaseX > x Or x > intBaseX + intColsBoard * intPicXWidth Or _
intBaseY > y Or y > intBaseY + intRowsBoard * intPicXHeight Then Exit
Sub
' Tnh v tr c c n
col = (x - intBaseX) \ intPicXWidth
row = (y - intBaseY) \ intPicXHeight
' N u v tr c c n dng r i th thi
If Board(row, col) <> 0 Then Exit Sub
' Ghi nh n v tr c c n cho ng i dng
Board(row, col) = USERID
267
' 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
' Tm n c i k ti p cho my
Call Timnuocke
Board(mdong, mcot) = COMPID
DisplayElem mdong, mcot, O_IMG
' Ki m tra xem my 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
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()
268
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
269
'-----------------------------------------------------------------------------------------
' Cac thu tuc dich vu cap 1 : duoc goi khi ban an chuot vao form
' Ta dng 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
'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()
270
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
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 dng tam vuc Private de phan biet voi cac thu tuc dich vu cap 1
'-----------------------------------------------------------------------------------------------------
Private Function priority(ByVal m1 As Integer, ByVal m2 As Integer) As
Boolean
Dim tam As Integer, n1 As Integer, n2 As Integer
271
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
'------------------------------------------------
'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
272
For col = 0 To intColsBoard - 1
If Score(row, col) > MaxScore Then
mdong = row
mcot = col
MaxScore = Score(row, col)
End If
Next col
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
End If
End Function
'------------------------------------------------
'ham evaluateline cho luat choi "5 an"
273
'Tnh 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
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
274
win_rinc = rinc
win_col = col - 5 * cinc
win_cinc = cinc
EvaluateLine_5 = 2000
Exit Function
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
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
275
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
'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
276
'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
277
BI TH C HNH THM NH '
(S 4)
M c tiu sinh vin c n t c:
Thi t k tr c quan c cc ph n t giao di n c a ch ng trnh
d ng SDI.
T o c cc th t c x l bi n c v vi t code cho cc th t c
ny.
Dng c cc hm v nh, thay i kch th c i t ng giao )
di n.
Dng c cc th t c x l s ki n c b n nh MouseDown, ...
Ch ng trnh th c hnh : tr ch i d mn c d ng sau :
278
Chi ti t cc menu nh sau :

Qui trnh th c hi n :
1-20. Th c hi n cc b c t 1-20 gi ng y nh bi Caro v i 1 vi khc bi t : !
Cc image c dng trong tr ch i d mn 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 :
C a s thi t l p cc thng s c 3 textbox nh n 3 gi tr : s hng, s c t
c a bi mn v s mn trong bi mn.
279
21. T o cc th t c x l bi n c cho 2 option Start v Setup... r i vi t code
cho chng nh sau :
Option Explicit
' L u cc 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 thi ch i/ ch a ch i
Private intRowsBoard As Integer ' s hng c a bi mn
Private intColsBoard As Integer ' s c t c a bi mn
Private intMineCount As Integer ' s mn trong bi mn
Private intPicXWidth As Integer, intPicXHeight As Integer ' kch th c t ng !

Private intBaseX As Integer, intBaseY As Integer ' t a trn tri c a bi


mn
Private intOdado As Integer ' s p c
Private DataBoard() As Integer ' ma tr n d li u mn
280
Private StatusBoard() As Boolean ' ma tr n tr ng thi p mn
'------------------------------------------------------------------
' Cc th t c x l s ki n c a form MyMine
'------------------------------------------------------------------
Private Sub Form_Load()
' Thi t l p cc thng 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
If Not blnDangchoi Then Exit Sub
' Ki m tra v tr n chu t n m trong bn c khng ? %
If intBaseX > x Or x > intBaseX + intColsBoard * intPicXWidth Or _
intBaseY > y Or y > intBaseY + intRowsBoard * intPicXHeight Then Exit
Sub
' Tnh v tr c c n
col = (x - intBaseX) \ intPicXWidth
row = (y - intBaseY) \ intPicXHeight
' p mn v tr (row,col) "
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
281
cnt = MineCount(row, col)
Call DisplayElem(row, col, cnt + 4)
End If
Next col, row
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
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
'-----------------------------------------------------------------------------------------
' Cc th t c d ch v c p 1 : c g i khi b n n chu t vo form $ $
' Ta dng t m v c Public phn bi t v i cc th t c d ch v c p 2 $
'-----------------------------------------------------------------------------------------
282
'Th t c kh i ng cc thng 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
Me.ScaleMode = vbPixels
' Ch nh l i kch th c form hi n th v a bi mn & !
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 nhin intMineCount tri mn vo bi mn ,
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 mn 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
283
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
'-----------------------------------------------------------------------------------------------------
' Cc th t c d ch v c p 2 : ch c g i b i cc th t c d ch v c p $ ( $
1
' Ta dng t m v c Private phn bi t v i cc th t c d ch v c p 1 $
'-----------------------------------------------------------------------------------------------------
'Hi n th mn v tr (row,col) c m nh imgCode
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
' Tnh s mn xung quanh v tr (h,c)
Private Function MineCount(ByVal h As Integer, ByVal c As Integer) As
Integer
284
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
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 cc 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
If c - 1 >= 0 Then
If Not StatusBoard(h, c - 1) Then Call Domin(h, c - 1)
End If
If c + 1 < intColsBoard Then
285
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
286

You might also like