Está en la página 1de 173

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi tp chng 1

NGN NG LP TRNH VISUAL BASIC


MC TIU: SAU KHI HON THNH CC BI TP, NGI HC C TH
Khai bo cc bin thuc cc kiu d liu c bn (byte, integer, long, string,
boolean, single) v kiu mng, kiu bn ghi trong Visual Basic.
S dng cc hm nhp xut d liu (MsgBox v InputBox) ca VB.
S dng v vn dng c cc cu trc r nhnh (If...Then v
If...Then...Else), cu trc a r nhnh (Select Case) v cc loi vng lp :
For; Do While...Loop; Do...Loop vit chng trnh.
S dng c mt s hm x l xu thng dng.

A - BI TP
Bi tp 1: S dng hm MsgBox v InputBox Vit chng trnh gii phng trnh
bc 2. H s a, b, c nhp t bn phm bng hm InputBox (Gii s a 0).
Bi tp 2: Minh ho cu trc If Then. Vit chng trnh tnh lng nh sau: Cho
ngi dng nhp vo lng c bn LCB, H s lng HSL v chc v CV. Nu
chc v l "giam doc" th cng thm 500000 vo lng thc lnh (LTL), nu l
"truong phong" th cng thm 300000, nu l "to truong" th cng thm 200000, nu
l "nhan vien" th khng cng. Sau hin th tng s lng thc lnh.
Bi tp 3-Select Case: Yu cu nh bi 2, nhng s dng cu trc Select Case
Bi tp 4: Hin th cc loi thng bo s dng hm MsgBox. Vit chng trnh
hin th 4 loi hp thoi MsgBox nh m t di y khi ngi dng nhp vo cc
s tng ng 1,2,3,4 bng hm InputBox:

Bi tp 5: S dng cu trc Select Case. Vit chng trnh cho php ngi dng
nhp vo 2 s thc a v b v mt trong cc php ton gm +, -, *, /, \ (Chia ly phn
nguyn), mod (chia ly phn d) hoc ^ (Lu tha). Sau hin th kt qu tng
ng. V d nu nhp 2 s 10, 20 v php ton l + th thng bo "Kt qu l 30" v.v.
Trang 1

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi tp 6: S dng vng lp FOR. Vit chng trnh tnh tng ca dy s sau v


hin th kt qu ra mn hnh: S = 1 + 2 + 3 + ... + N , Vi N nhp t bn phm.
Bi tp 7: S dng vng lp For vi iu khon Step. Hy vit chng trnh tnh
tng cc s chn t 1 n 100.
Bi tp 8: S dng vng lp For m ngc FOR DOWNTO.
Hy s dng vng lp For in ra cc s t 100 n 1 bng lnh Debug.Print.
Bi tp 9: S dng vng lp DoLoop Until
Cho ngi dng nhp vo mt dy cc s nguyn (m v dng) v tnh tng cc
s m, tng cc s dng. Vic nhp kt thc nu s nhp vo l 0.
Bi tp 10: S dng cu trc Do While Loop. Hy cho bit cn gi s tin tit
kim 1 triu ng vo ngn hng trong thi gian my nm c 2 triu ng. Bit
rng li sut hng nm l 8%.
Bi tp 11: Thot khi vng lp vi Exit For, Exit Do. Vit chng trnh nhp s
nguyn n v kim tra xem c phi l s nguyn t hay khng ?.
Bi tp 12: S tng ng gia cc cu trc lp. Tnh n! s dng cc cu trc
lp khc nhau.
Bi tp 13: S dng vng lp FOR
Lp trnh tnh tng ca dy s sau v hin th kt qu ra mn hnh :
S=

n2 +
n =1

200

n2 +

n =100

310

n =300

Bi tp 14 Tnh N !: Vit chng trnh nhp s nguyn N (0<N<20) v tnh N!.


Bi tp 15- Tnh tng 1 dy s: Tnh tng ca dy sau, vi n nhp t bn phm:
S = 1. n + 2 + 2. n + 3 + 3. n + 4 + ... + i. n + (i + 1) + ... + n. n + ( n + 1)

Bi tp 16- Tnh dy Fibonasi: Tnh tng ca day s Fibonasi theo 2 cch: bng
qui v khng qui, vi N nhp t bn phm. Bit rng dy s Fibonasi c nh
ngha nh sau:
F (n) = 1 nu n = 0, n = 1
F (n) = Fn-2 + Fn-1 nu n 2
Bi tp 17- Tm c s chung ln nht : Tm c s chung ln nht ca 2 s a v
b (a,b nhp t bn phm).
Bi tp 18-Ti gin phn s : Kim tra xem phn s a/b (a, b nhp t bn phm)
ti gin hay cha? Nu cha ti gin th hy thc hin rt gn phn s v in ra
mn hnh.

Trang 2

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi tp 19- Tm s nguyn t: Nhp vo mt dy s nguyn dng bng hm


InputBox. Sau in ra cc gi tr l s nguyn t.
Bi tp 20-m k t: Lp trnh cho ngi dng nhp vo mt xu k t S. Sau
m xem trong xu nhp vo c bao nhiu k t l a v A.
Bit rng :
- Hm Mid(S, i, 1) cho ta k t th i trong xu S
- Hm Len(S) cho ta di ca xu S
Bi tp 21-Tnh tng dy s: Vit chng trnh nhp x v n ri tnh tng
x x2 x3
xn
+
+ ... +
S = 1+ +
2 3
4
n +1
x 0 x1 x 2 x 3
xn
+ +
+
+ ... +
(Hay c th vit di dng S =
)
1
2
3
4
n +1
Bi tp 22 : Bi ton tm phn t ln nht (nh nht) trong mt danh sch
Vit chng trnh nhp n s nguyn vo mt mng nguyn A, sau tm s ln nht
trong mng nguyn .
Bi tp 23: Lit k cc phn t ln nht (nh nht) trong danh sch.
Nhp danh sch gm n s nguyn, sau hin th cc phn t c gi tr ln nht.
Bi tp 24: Sp xp mt dy s nguyn. Vit chng trnh cho php nhp vo N
s nguyn. Sau sp xp dy s ny theo chiu tng dn v hin th dy sp
xp ra mn hnh bng lnh Debug.Print.
Bi tp 25 Quick Sort: Nhp vo mt dy N s nguyn dng, sau sp xp
dy ny tng dn theo gii thut Quick-Sort. Kt qu in ra bng hm Debug.Print.
Bi tp 26- Heap Sort: Nhp vo mt dy N s nguyn dng, sau sp xp dy
ny tng dn theo gii thut Heap-Sort. Kt qu in ra bng hm Debug.Print.
Bi tp 27: Sp xp mt dy cc phn t, trong mi phn t l mt xu k
t theo vn Alphabet (Theo th t t in) bng thut ton sp xp n gin.
Vit chng trnh nhp vo danh sch tn ca mt lp, sau sp xp theo vn
Alphabet v hin th kt qu sp xp ra mn hnh bng hm Debug.Print
Bi tp 28-Chun ho xu: Nhp vo mt xu k t bt k sau chun ho v in
ra mn hnh. Xu chun ho y l xu khng c 2 du trng lin nhau, khng c
du trng hai u v sau du chm hoc du phy phi c mt du trng.
Bi tp 29-Chun ho xu: Yu cu nh bi 28 v mi k t u cu l ch HOA.
Bi tp 30-Tch s khi xu: Nhp vo mt xu k t c cha c ch s v ch
ci v d: Ngy mng 2 thng 9 nm 1945 Bc H c tuyn ngn c lp ti
Qung trng Ba nh lch s !. Gi s cc s l nguyn dng. Hy tch cc s
ra khi xu v in ra mn hnh ( y s tch c 3 s l 2, 9 v 1945).

Trang 3

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi tp 31-Tch Cu: Nhp vo mt xu k t bt k, kt thc mi cu l mt du


chm. Hy in mi cu trong xu trn mt dng bng hm Debug.print.
Bi tp 32-Chuyn i Font ch: Gi s mt tp vn bn c ni dung c nh
dng vi font ch .vntime, Hy chuyn ni dung ca tp ny sang font ch VIQR v
lu vo mt tp khc. Tn tp ngun v tp ch tng ng l : c:\FontVNTime.txt v
c:\FontVIQR.txt.
Bi tp 33-Thng k k t trong xu: Nhp mt xu k t bt k, sau in ra mn
hnh s lng tng loi k t nhp.
Bi tp 34-Thay th k t: Nhp vo mt xu, sau thay th tt c cc k t trng
(chr(32)) bng k t _. Kt qu in ra mn hnh bng hm MsgBox.
Bi tp 35-Cng s nguyn ln: Vit chng trnh cng 2 s nguyn dng ln
bt k v in kt qu ra mn hnh.
Bi tp 36-Ma trn s: Vit chng trnh nhp vo mt ma trn gm m hng v n
ct. Sau tnh tng cc phn t dng, tng cc phn t trn 2 ng cho chnh.
Bi tp 37- Kim tra "ng thng" trong ma trn: Nhp mt ma trn vung kch
thc N x N. Ma trn ny ch cha cc s 0 v 1. Hy lp trnh cho bit ma trn
c t nht 5 phn t thng hng (ngang, dc, cho xui, cho ngc) c cng gi
tr l 1 hay khng ?
Bi tp 38- Mng bn ghi: Vit chng trnh nhp vo mt danh sch cn b, sau
sp xp danh sch cn b theo tui v lu vo mt tp tn l Canbo.txt. Thng tin
v cn b gm: H v tn, Nm sinh, Qu qun, H s lng.

PH LC 1
Di y l m t mt s hm rt hay dng trong VB bn tham kho trong khi lp
trnh v cho cc bi tp sau ny .
Tn hm
M t
V d
Abs (x)
Sqr(x)
Round(x)
Asc(Ch)
Chr(n)
UCase(S)
LCase(S)
Len(S)
Mid(S,i,n)
Left(S, n)
Right(S,n)
Trim(S)
LTrim(S)
RTrim(S)
StrReverse(S)
Str(x)
Val(S)
Instr(n,S1,S2)
Split(S, C)

Hm tnh gi tr tuyt i ca mt s.
Tnh cn bc hai ca mt s x (x>=0)
Lm trn s x
Tr v m ca k t Ch
Tr v k t c m Ascii l n
Tr v xu ch hoa (Nhng khng lm thay i
n xu S)
Tr v xu ch thng (Nhng khng lm thay
i n xu S)
Tr v di ca xu S
Ly mt xu con trong S t v tr th i, n k t.
Nu b qua tham s n th mc nh l ly t v tr i
n ht xu.
Ly ra n k t trong xu S tnh t bn tri
Ly ra n k t trong xu S tnh t bn phi
Tr v mt xu S nhng b cc du trng hai u
(Xu S khng b thay i).
Ging nh Trim(S) nhng ch ct pha tri
Ging nh Trim(S) nhng ch ct pha phi
o ngc xu S (S khng b thay i)
Chuyn s x sang dng xu
Chuyn mt xu sang dng s
Kim tra xu S2 c nm trong xu S1 hay khng.
Hm tr v gi tr > 0 nu c.
Tch xu S thnh cc phn t, vi k hiu phn

Abs(-5)
5
Sqr(4)
2
Round(3.2)
3
Asc("A")
65
Chr(65)
"A"
UCase("aBc")

"ABC"

UCase("aBc")

"abc"

Len("abc123")

Mid("ABCDE", 2,3)

"BCD"

Left(S,"ABCD",3)
"ABC"
Right(S,"ABCD",3)
"BCD"
Trim(" ABC ")

"ABC"

LTrim(" ABC ")


"ABC "
RTrim(" ABC ")
" ABC"
StrReverse("AB")
"BA"
Str(10)
"10"
Val("10")
10
Instr(1,"ABC", "BC")

Dim S As string, R As

Trang 4

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

tch l C.

Replace
(S, S1, S2)
FileLen(F)
CurDir

Cho bit kch thc ca file F tnh theo bytes


Tr v ng dn ca th mc hin hnh

Year(D)

Tr v nm ca bin kiu Date D

Month(D)
Day(D)
Hour(T)
Now
Time

Tr v thng ca bin kiu Date D


Tr v ngy ca biu thc kiu Date D
Tr v gi ca biu thc kiu Time T
Hm tr v ngy thng hin hnh
Tr v gi pht giy hin hnh
Hm tr v mt s ngu nhin trong khong [0, 1)
Lu : trc phi gi th tc Randomize.

Rnd

Thay th cc xu con S1 trong S bng xu S2

Variant
Dim I As integer
S = ha,noi,viet,nam
R = Split(S,,)
For i=0 to Ubound(R)
Msgbox R(i)
Next
Dim S As string
S = Replace(A!!,!!,!)
MsgBox FileLen("C:\io.sys")
Msgbox CurDir
Dim D As Date
D = Now
Msgbox Year(D)
MsgBox Month(Now)
Day(#21/2/2004#)
21
Hour(Time)
Msgbox now
Msgbox Time
Msgbox Rnd

B. HNG DN - GII MU
Bi tp 1
a. Hng dn: Cn tnh gi tr ca , Sau s dng cu trc lnh If...Then...Else
(Hoc cu trc Select Case) kim tra v tnh nghim.
b. Chng trnh mu:
Cch 1: S dng cu trc If..Then Else

Cch 2: S dng cu trc Select Case

Private Sub Form_Load()


Dim a As Single, b As Single
Dim c As Single
Dim Delta As Single
Dim x1 As Single, x2 As Single

Private Sub Form_Load()


Dim a As Single, b As Single
Dim c As Single
Dim Delta As Single
Dim x1 As Single, x2 As Single

a = InputBox("Nhp h s a (a <> 0) :")


b = InputBox("Nhp h s b : ")
c = InputBox("Nhp h s c : ")
Delta = b ^ 2 - 4 * a * c
If Delta < 0 Then
MsgBox "V nghim ", vbInformation
Else
If Delta = 0 Then
x1 = -b / (2 * a)
MsgBox "C nghim kp:" & x1
Else
x1 = (-b + Sqr(Delta)) / (2 * a)
x2 = (-b - Sqr(Delta)) / (2 * a)
MsgBox "x1=" &x1 & " x2=" &x2
End If '//// Ca If Delta = 0
End If
'//// Ca If Delta < 0
End Sub

a = InputBox("Nhp h s a (a<>0):")
b = InputBox("Nhp h s b : ")
c = InputBox("Nhp h s c : ")
Delta = b ^ 2 - 4 * a * c
Select Case Delta
Case Is < 0
MsgBox "V nghim "
Case 0
x1 = -b / (2 * a)
MsgBox "Nghim kp:" & x1
Case Is > 0
x1 = (-b + Sqr(Delta)) / (2 * a)
x2 = (-b - Sqr(Delta)) / (2 * a)
MsgBox "x1=" &x1 &" x2=" &x2
End Select
End Sub

c. Ghi ch: Cu trc Select Case ca VB rt mnh, n khng nhng kim tra biu
thc dng s nguyn m cn c th kim tra c dng s thc, xu k t, ng thi
vi mi loi gi tr c th kim tra mt khong gi tr (s dng t kho Case is )
Trang 5

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi tp 2
a. Hng dn: Lng thc lnh (LTL) = HSL * LCB + Ph cp chc v. tnh Ph
cp chc v, cn s dng cu lnh If ... Then kim tra xem chc v nhp vo c
l "giam doc", "truong phong" hay "to truong" hay khng cng thm.
b. Chng trnh mu:
Chng trnh nhp v tnh lng
Private Sub Form_Load()
Dim HSL As Long, LCB As Long, PCCV As Long, LTL As Long
Dim CV As String
LCB = InputBox("nhp vo lng c bn : ", "Tnh lng", 290000)
HSL = InputBox("nhp vo h s lng", "Tnh lng", 1.92)
CV = InputBox("Chc v ")
If CV = "giam doc" Then LTL = HSL * LCB + 500000
If CV = "truong phong" Then LTL = HSL * LCB + 300000
If CV = "to truong" Then LTL = HSL * LCB + 20000
If CV = "nhan vien" Then LTL = HSL * LCB
End Sub

c. Ghi ch: C th thay th cu trc If...Then trn bng cu trc If....Then...ElseIf


hoc bng cu trc a r nhnh Select Case (y l cu trc ph hp nht)
Bi tp 3
a. Hng dn: Cu trc Case trong VB cho php kim tra c biu thc dng Xu, S
nn c th p dng vo gii quyt bi ton ny.
b. Chng trnh mu:
Tnh lng n gin minh ho cu trc Select Case
Private Sub Form_Load()
Dim HSL As Long, LCB As Long, PCCV As Long, LTL As Long
Dim CV As String
LCB = InputBox("nhp vo lng c bn : ", "Tnh lng", 290000)
HSL = InputBox("nhp vo h s lng", "Tnh lng", 1.92)
CV = InputBox("Chc v ")
Select Case CV
Case "giam doc"
LTL = HSL * LCB + 500000
Case "truong phong"
LTL = HSL * LCB + 300000
Case "to truong"
LTL = HSL * LCB + 20000
Case Else
LTL = HSL * LCB
End Select
MsgBox "Lng ca bn l : " & LTL
End Sub

C. Ghi ch: chng trnh vn tnh ng cho d ngi dng c th nhp chc v
dng ch thng hay ch HOA th nn UCase cc xu trc tin. (Xem ph lc 1)

Trang 6

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi tp 4
a. Hng dn: hin th hp thoi Msgbox vi cc nt v biu tng khc nhau, ta
ch cn thm cc hng vo tham s th 2 ca hm MsgBox, v d : vbQuestion,
vbYesNo, vbOKCancel, vbInformation, vbAbortRetryIgnore....
Ngoi ra, bit ngi dng mun hin th loi hp thoi no (nhp vo s my) cn
s dng cu trc Select Case kim tra v ra quyt nh.
b. Chng trnh mu:
Private Sub Form_Load()
Dim Kieu As Byte
Kieu = InputBox("Bn hy nhp vo mt s (1-4) chn kiu MsgBox : ")
Select Case Kieu
Case 1: MsgBox "Kiu n gin ch c nt OK" '///Vit nhiu lnh cn cch nhau du ":"
Case 2: MsgBox "C 2 nt Yes v No", vbYesNo
Case 3: MsgBox "C nt OK, Cancel v du hi chm", vbOKCancel Or vbQuestion
Case 4: MsgBox "C 3 nt v du cnh bo mu ", vbAbortRetryIgnore Or vbCritical
Case Else: MsgBox "Bn phi nhp 1,2,3 hoc 4", vbExclamation, "nhp sai"
End Select
End Sub

c. Ghi ch:

C th kt hp hin th cc nt, cc biu tng bng cch t hp OR gia


cc hng s: V d vbOKCancel Or vbExclamation hin th 2 nt
OK/Cancel km thm biu tng khuyn co .
Hm MsgBox lun tr v mt s cho bit l ngi dng va click chn nt
no ca hp thng bo MsgBox. V d: gi tr tr v l vbOK, vbCancel.

Bi tp 5
a. Hng dn:
Vic cng, tr, nhn hay chia a vi b v.v... cn ph thuc vo php ton (ton t) m
ngi dng nhp vo l g. Do vy, ra quyt nh l thc hin php ton no ln 2
ton hng a v b , cn s dng cu trc Select Case kim tra ton t nhp
vo.
b. Chng trnh mu:
Private Sub Form_Load()
Dim a As Single, b As Single, KetQua As Single
Dim PhepToan As String
a = InputBox("Nhp s hng th nht: ")
PhepToan = InputBox("Nhp vo php ton (+,-,*,/,mod,div,^)")
b = InputBox("Nhp s hng th hai: ")
Select Case PhepToan
Case "+": KetQua = a + b
Case "-"
KetQua = a - b
Case "*": KetQua = a * b
Case "/": KetQua = a / b
Case "div": KetQua = a \ b
Case "mod": KetQua = a Mod b
Case "^": KetQua = a ^ b

Trang 7

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Case Else: MsgBox "Ti khng hiu php ton ny !", vbExclamation, "Nhp sai"
End Select
MsgBox "Kt qu ca " & a & PhepToan & b & " l : " & KetQua
End Sub

Thc hin cc php ton c bn dng cu trc Select Case


C. Ghi ch : cc php chia nguyn v chia d trong VB:

Php chia \ l php chia ly phn nguyn: V d 10 \ 3 = 3. Php chia / l


php chia thng thng (ly c phn nguyn v phn d), v d: 5 / 2 = 2.5.

Php mod l chia ly phn d, v d 10 mod 3 = 1, 6 mod 4 = 2 v.v


Bi tp 6
a. Hng dn: S l tng cc s hng th i, vi i chy t 1 n N, S hng tng qut
l i. Do vy tnh tng ca dy s S, c th s dng mt trong 3 loi vng lp
bit.
b. Chng trnh mu (G on m trong th tc Form_Load)
Cch 1: S dng vng lp For
Dim i As Integer
Dim N As Integer
Dim S As Long
N=Inputbox("Nhp s N (N>0) : ")
S=0
For i=1 To N
S=S+i
///S = S + <S hng tng qut>
Next
Msgbox "Tng = " & S
Cch 2: S dng vng lp Do...Loop Until
Dim i As Integer
Dim N As Integer
Dim S As Long
N=Inputbox("Nhp s N (N>0) : ")
S=0
i=1
Do
S=S+i
i=i+1
Loop UNTIL i > N
Msgbox "Tng = " & S
Cch 3 : Dng vng lp Do While ... Loop
Dim i As Integer
Dim N As Integer
Dim S As Long
N=Inputbox("Nhp s N (N>0) : ")
S=0
i=1
Do While i <= N
Trang 8

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

S=S+i
i=i+1
Loop
Msgbox "Tng = " & S
Bi tp 7
a. Hng dn: C nhiu cch tnh nhng trong trng hp ny c th s dng vng
lp For kt hp vi iu khon Step:
b. Chng trnh mu:
Private Sub Form_Load()
Dim i As Integer, S As Long
S=0
For i = 2 To 100 Step 2
S=S+i
Next
MsgBox "Tng cc s chn t 1->100 l : " & S
End Sub
c. Ghi ch:

Nu khng c iu khon Step th sau mi ln lp bin chy i t ng c


tng ln 1 n v. Cn nu c iu khon Step 2 th sau mi ln lp, bin chy
i c tng ln 2 n v. Tng qut, nu Step N (N nguyn m hoc dng)
th sau mi ln lp, bin chy c tng (nu N > 0) hay gim i (Nu N<0) n
n v.

Nu cho i chy t 1 (For i = 1 TO 100) th kt qu cho ta l tng cc s l .

Bi tp 8
a. Hng dn: Thng thng trong VB, vi vng lp For th c sau mi ln lp bin
chy t ng c tng ln 1 n v. Tuy nhin, trong mt s trng hp ta mun
bin chy thay i theo chiu gim dn (Tng t nh For Downto ca
Pascal), tc l sau mi ln lp th bin chy li b gim i mt n v th cn phi s
dng n iu khon Step N vi N l mt s m. Nu mun sau mi vng lp bin
chy i gim i mt n v th ta cn vit : For i = N to 1 Step -1
b. Chng trnh mu:
Private Sub Form_Load()
Dim i As Integer
For i = 100 To 1 Step -1
Debug.Print i
Next
End Sub

Bi tp 9
a. Hng dn: V khng bit ngi dng nhp bao nhiu s do vy ta c th dng
vng lp khng xc nh tin hnh cng vic nhp. Ngoi ra, cng cn c 2 bin
lu tng cc s m v dng. iu kin kt thc vng lp s l n=0.

Trang 9

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

b.Gii mu:
Private Sub Form_load()
Dim n As Long, i As Long
Dim TongAm As Long
Dim TongDuong As Long
TongAm = 0
TongDuong = 0

'/// Khi to trc khi tnh tng


'/// Khi to trc khi tnh tng

Do
n = InputBox("Nhp vo mt s nguyn : ")
If n > 0 Then
TongDuong = TongDuong + n
Else
TongAm = TongAm + n
End If
Loop Until n = 0
'/// Lp cho n khi no nhp n = 0 th dng.
MsgBox "Tng cc s m = " & TongAm & ". Tong cc s dng = " & TongDuong
End Sub

c. Ghi ch:

Vng lp Do . Loop Until <K> s kt thc khi iu kin <K> bng true
Vng lp DoLoop Until khc vi vng lp dng Do.Loop While <K>
ch vng lp DoLoop While <K> kt thc khi <K> vn l False.
Thc cht, cu trc lp DoLoop Until v Do Loop While l tng
ng nhau, do vy trnh nhm ln chng ta ch nn nh mt loi khi thc
hnh.
C th thot khi vng lp dng Do Loop bng cu lnh Exit Do

Bi tp 10
a. Hng dn: V khng th bit c l sau bao nhiu nm th tng s tin s l
2.000.000, m ch bit rng mi nm s tng thm mt lng no . Do vy, y
ta s s dng vng lp khng xc nh v mi ln lp ta s kim tra xem c s
tin cn thit hay cha? Nu ri th thot v s ln th chnh l s nm cn tm.
Nhng y ti sao ta li s dng vng lp Do WhileLoop m khng l Do
Loop ?. S d s dng vng lp Do While Loop l v rng s tin gi vo ban
u rt c th ln hn s tin k vng !
b. Chng trnh mu:
Private Sub Form_Load()
Dim SoNam As Integer, TongTien As Long
SoNam = 0
TongTien = 1000000
Do While TongTien < 2000000
SoNam = SoNam + 1
TongTien = (1 + 0.05) ^ SoNam * TongTien /// Cng thc cn nh
Loop
MsgBox "Cn phi gi trong " & SoNam & " nm !"
End Sub
c. Ghi ch: y l bi ton tnh tin gi tit kim, GDP c th p dng trong cuc sng

Trang 10

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi tp 11
a. Hng dn: Mt s N c gi l s nguyn t nu nh n ch chia ht cho 1 v
chnh n. Hay ni cch khc l s N khng l nguyn t nu nh n chia ht cho t
nht mt s nm trong khong [2N-1]. Nh vy, kim tra ta ch cn duyt tt c
cc s i trong phm vi t [2N-1] xem N mod i = 0 ?, nu xy ra th kt lun ngay
rng N khng l nguyn t, tri li nu sau khi duyt ht m khng thy trng
hp xy ra th kt lun N l nguyn t.
Ngi ta chng minh c rng khng cn phi duyt t [2N-1] m ch cn
duyt trong phm vi hp hn l t [2.. N ] .
b. Chng trnh mu:
Private Sub Form_Load()
Dim n As Integer, i As Integer, KetQua As Boolean
n = InputBox("Nhp vo mt s nguyn ")
KetQua = True
For i = 2 To Sqr(n)
If n Mod i = 0 Then
KetQua = False
Exit For

/// Thot ngay khi vng lp For

End If
Next
If KetQua = True Then MsgBox n & l s nguyn t !
If KetQua = False Then MsgBox n & khng phi l s nguyn t !
End Sub
c. Ghi ch:

thot v iu kin khi vng lp Do While, DoLoop While hay


Do Loop Until th cn gi lnh Exit Do

Hm Sqr(n) trong VB dng tnh n (khng phi l tnh bnh phng nh


trong mt s ngn ng lp trnh khc nh Pascal).

Nu cng vic g ch lm mt ln (v d thng bo kt qu nh trn) th


KHNG BAO GI c t trong vng lp m phi t ngoi vng lp. V
c im ca vng lp l lp i lp li nhiu ln mt cng vic !

Bi tp 12
a. Hng dn: Giai tha ca s N c tnh theo cng thc N!=1.2.3N-1.N.
tnh ton ta thc hin nhn dn cc s i ( i = 1 N) vo kt qu.
b. Chng trnh mu:
Private Sub Form_Load()
Dim n As Integer, i As Integer, KetQua As Long

Trang 11

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

'/// Nhp s n, m bo 0<n<10

Do
n = InputBox("Cn tnh giai tha ca my : ")
Loop Until (0 < n And n < 10)
'/// S dng vng lp For

KetQua = 1
For i = 1 To n
KetQua = KetQua * i
Next
Debug.Print "Kt qu ca " & n & "! = " & KetQua
'/// S dng vng lp Do While

KetQua = 1
i=1
Do While i <= n
KetQua = KetQua * i
i=i+1
Loop
Debug.Print "Kt qu ca " & n & "! = " & KetQua
'/// S dng vng lp Do Until

KetQua = 1
i=1
Do Until i > n
KetQua = KetQua * i
i=i+1
Loop
Debug.Print "Kt qu ca " & n & "! = " & KetQua
'/// S dng vng lp Do ... Loop While

i=1
KetQua = 1
Do
KetQua = KetQua * i
i=i+1
Loop While i <= n
Debug.Print "Kt qu ca " & n & "! = " & KetQua
'/// S dng vng lp Do ... Loop Until

i=1
KetQua = 1
Do
KetQua = KetQua * i
i=i+1
Loop Until i > n
Debug.Print "Kt qu ca " & n & "! = " & KetQua
End Sub

c. Ghi ch:

C th tnh N! bng phng php qui : GiaiThua = GiaiThua (n-1) * N.


Ngi ta chng minh c rng tt cc cu trc lp u c th vit tng
ng theo cc cu trc khc.
Trong VB c rt nhiu cu trc lp, tuy nhin ch cn thuc 3 cu trc sau l :
o For
Trang 12

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

o Do

Loop Until <K>


o Do While <K>
..
Loop
Cu trc Do While <K> Loop v Do Until <K>. Loop cng c im
ging nhau l kim tra iu kin trc khi lp (ging nh cu trc While do
trong Pascal hay While trong C/C++) nhng cu trc Do While <K>
Loop ch lp khi iu kin <K> vn ng, cn cu trc Do Until <K>.
Loop ch lp khi iu kin <K> vn sai (Hay thot nu <K> l ng).

Cu trc Do Loop While <K> v cu trc Do Loop Until <K> cng


ging nhau l thc hin lp sau mi kim tra iu kin (Ging cu trc
Repeat Until trong pascal hay do While trong C/C++), nhng cu trc
Do Loop While <K> ch lp nu iu kin vn cn ng, trong khi cu
trc Do Loop Until <K> ch lp nu biu thc iu kin vn cn sai (Hay
ni cch khc l kt thc lp nu iu kin lp l ng)

Khi thc hnh, khng nht thit phi nh c 4 kiu lp nu trn m bn


nn vn dng thnh tho 3 cu trc lp c khuyn co dng l For, Do
While v Do Loop Until, v 3 cu trc ny tng t nh cc cu trc lp
trong mt s ngn ng lp trnh ph bin khc (For,Whiledo,Repeat
..Until).

Bi tp 13
a. Hng dn: Ta c thng S = S1 + S2 + S3, vi S1, S2, S3 tng ng vi 3 tng
trn. S dng vng lp tnh tng ca mi Si, sau cng li c kt qu.
b. Chng trnh mu:
Private Sub form_load()
Dim i As Integer
Dim Tong As Long
Dim S1 As Long, S2 As Long, S3 As Long
Tong = 0
' u tin do cha tnh nn Tong bng 0
S1 = 0
S2 = 0
S3 = 0
'/// Tnh tng S1
For i = 1 To 8
S1 = S1 + i ^ 2
Next
'/// Tnh tng S2
For i = 100 To 200
S2 = S2 + i ^ 2

Next
'/// Tnh tng S3
For i = 300 To 310
S3 = S3 + i ^ 2

Next
S = S1 + S2 + S3
MsgBox "Tng l : " & Tong, vbInformation, "Thng bo ..."
End Sub

Trang 13

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi tp 14:
a. Hng dn: Cng thc tnh giai tha ca s N l: N! = 1.2.3N-1.N, nh vy
y ta cn nhn lin tip cc s i (i chy t 1 n n) vo kt qu. Trong , gi tr
khi to cho kt qu l 1. Bi ny c th gii theo cch qui hoc khng qui.
b. Chng trnh mu
Cch 1: Dng vng lp (Khng dng qui)
Private Sub Form_Load()
Dim i As Integer, n As Integer
Dim KetQua As Long
'/// Nhp s n (0<n<20)

Do
n = InputBox("Nhp s N : ", "Tnh giai tha")
Loop Until (0 < n And n < 20)
KetQua = 1
For i = 1 To n
KetQua = KetQua * i
Next
MsgBox n & " ! bng " & KetQua
End Sub
Cch 2: Dng qui
'/// Hm qui tnh N !

Function GiaiThua(ByVal N As Integer) As Long


If N = 1 Then
GiaiThua = 1
Else
GiaiThua = GiaiThua(N - 1) * N
End If
End Function
Private Sub Form_Load()
Dim i As Integer, N As Integer
Dim KetQua As Long
'/// Nhp s n (0<n<20)

Do
N = InputBox("Nhp s N : ", "Tnh giai tha")
Loop Until (0 < N And N < 20)
MsgBox N & " ! bng " & GiaiThua(N)
End Sub

Trang 14

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi tp 15:
a. Hng dn: Vi bi ton dng tnh tng ca mt chui s khi bit s hng tng
qut Si, ni chung l n gin. C th thc hin theo gii thu nh sau:
S=0
For i = i0 TO in
S = S + Si
Next
Vi mi dy khc nhau th gi tr i0, N, Si c th khc nhau v cn phi xc nh.

- Gi tr i0 v N thng xc nh bi gii phng trnh Si = S0 v Si = Sn


- S hng tng qut Si thng c th nhn thy ngay trong bi.
Trong bi ny:

S i = i * n + (i + 1)

Xc nh i0: Cho S0 = Si 1 * n + 2 = i * n + (i + 1) i0=1

Xc nh in: Cho Sn = Si n * n + (n + 1) = i * n + (i + 1) in=n

b. Chng trnh mu:


Private Sub Form_Load()
Dim S As Single, i As Integer, N As Integer
N = InputBox("Nhp s N : ")
S=0
For i = 1 To N
S = S + i * Sqr(N + (i + 1))
Next
MsgBox "Tng ca dy cho l : " & S
End Sub
Bi tp 16
a. Hng dn: Vi cc bi ton c nh ngha theo kiu qui th cch gii ph
hp v d nht l theo gii thut qui. Tuy nhin, tc b chm ng k khi s N ln,
ngoi ra cn c th b trn Stack.
b. Chng trnh mu:
'/// Tnh dy Fibonasi dng qui

Function Fib_Dequi(ByVal N As Integer) As Long


If N = 0 Or N = 1 Then Fib_Dequi = 1
If N > 1 Then Fib_Dequi = Fib_Dequi(N - 2) + Fib_Dequi(N - 1)
End Function
'/// Tnh dy Fibonasi KHNG dng qui

Function Fib_KhongDequi(ByVal N As Integer) As Long


Dim i As Integer
Dim F1 As Long, F2 As Long, KetQua As Long
F1 = 1
F2 = 1
KetQua = 1

Trang 15

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

i=2
Do While i <= N
KetQua = F1 + F2
F1 = F2
F2 = KetQua
i=i+1
Loop
Fib_KhongDequi = KetQua
End Function
'--------------------------------------------------------------------------------------------------------------------------'/// Chng trnh chnh

Private Sub Form_Load()


MsgBox "Fib (30) = " & Fib_Deq ui(30)
MsgBox "Fib (30) = " & Fib_KhongDequi(30)
End Sub

Ch : Ring vi bi ton ny, ngi ta cn c th gii bng phng php qui hoch
ng (Dynamic Programming) rt n gin nh sau:
Function Fib_DynamicPrgramming(ByVal N As Integer) As Long
Dim i As Integer
Dim F(1000) As Long '/// Bng cha gi tr tnh ton c bc trung gian
'/// im xut pht

F(0) = 1
F(1) = 1
For i = 2 To N
F(i) = F(i - 2) + F(i - 1)
Next
Fib_DynamicPrgramming = F(N)
End Function

Bi tp 17:
a. Hng dn: tm c s chung ln nht ca 2 s nguyn a v b, ngi ta c
th da vo cng thc -Le v ci t bng vng lp hoc qui. Vic tm c s
chung c ng dng vo ti gin phn s.
b. Chng trnh mu:
'/// Tm USCLN khng dng qui

Function USCLN(a As Integer, b As Integer) As Integer


Dim Du As Integer
Du = a Mod b
Do While Du <> 0
a=b
b = Du
Du = a Mod b
Loop
USCLN = b
End Function

Trang 16

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

'/// Tm USCLN bng qui

Function USCLN_Dequi(a As Integer, b As Integer) As Integer


If a Mod b = 0 Then
USCLN_Dequi = b
Else
USCLN_Dequi = USCLN_Dequi(b, a Mod b)
End If
End Function
'----------------------------------------------------------------------------------------------------------------------------'/// Chng trnh chnh

Private Sub Form_Load()


MsgBox "c s chung ln nht ca 20 v 30 l : " & USCLN(20, 30)
MsgBox "c s chung ln nht ca 20 v 30 l : " & USCLN_Dequi(20, 30)
End Sub

Bi tp 18:
a. Hng dn: Phn s dng a/b c gi l ti gin nu c s chung ln nht ca
a v b l 1. V d: phn s 5/7 v 9/7 l ti gin; 4/6 v 6/4 l cha ti gin.
b. Chng trnh mu:
'/// Tm c s chung ln nht ca 2 s a v b

Function USCLN(a As Integer, b As Integer) As Integer


If a Mod b = 0 Then
USCLN = b
Else
USCLN = USCLN(b, a Mod b)
End If
End Function
'----------------------------------------------------------------------------------------------------------------------------'/// Chng trnh chnh

Private Sub Form_Load()


Dim a As Integer, b As Integer, TuMoi As Integer, MauMoi As Integer
a = InputBox("Nhp t s : ")
b = InputBox("Nhp mu s : ")
If USCLN(a, b) = 1 Then
MsgBox "Phn s " & a & "/" & b & " ti gin", vbInformation
Else
TuMoi = a / USCLN(a, b)
MauMoi = b / USCLN(a, b)

/// Tnh li t s mi
/// Tnh li mu s mi

MsgBox "Phn s sau khi ti gin l : " & TuMoi & "/" & MauMoi
End If
End Sub

Bi tp 19:
a. Hng dn: Trc ht cn xy dng hm kim tra xem s N c phi l nguyn t
hay khng ? Sau s dng kt qu ny vo gii quyt yu cu bi ton.
b. Chng trnh mu:
Trang 17

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

'/// Hm kim tra xem s N c phi l s nguyn t hay khng ?

Function LaSoNguyenTo(ByVal n As Integer) As Boolean


Dim i As Integer
LaSoNguyenTo = True
For i = 2 To Round(Sqr(n))
If n Mod i = 0 Then
LaSoNguyenTo = False
Exit Function
End If
Next
End Function
'----------------------------------------------------------------------------------------------------------------------------'/// Chng trnh chnh

Private Sub Form_Load()


Dim i As Integer, n As Integer, DaySo(100) As Integer
n = InputBox("S phn t cn nhp : ", , 10)
For i = 1 To n
DaySo(i) = InputBox("Nhp s th " & i)
Next
For i = 1 To n
If LaSoNguyenTo(DaySo(i)) Then Debug.Print DaySo(i)
Next
End Sub

Bi tp 20
a. Hng dn:
m s k t a v A trong mt xu S, chng ta cn duyt v kim tra ln lt
tng k t nm trong xu S v so snh vi k t a v A. duyt (ly tng k t
trong xu S) chng ta c th s dng mt trong 3 loi vng lp. Hm Mid(S,i,1) cho
ta k t ti v tr th i trong xu S.
b. Chng trnh mu (S dng vng lp Do While):
Form_load()
Dim S As String
Dim TongAa As Integer
Dim i As Integer
S = InputBox("Bn hy nhp mt xu : ")
i=1
TongAa = 0

'Bt u t k t th nht
'Khi to s k t A hoa v a thng ban u bng 0.

Do While i <= Len(S)


If Mid(S, i, 1) = "A" Or Mid(S, i, 1) = "a" Then
TongAa = TongAa + 1
End If
/// Chuyn n v tr ca k t tip theo
i=i+1
Loop
MsgBox "Tng s k t a v A trong xu l " & TongAa & " k t"
End Sub

Trang 18

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

C. Ghi ch: Trong vng lp For th bin chy s c t ng tng ln 1 n v, cn


trong vng lp Do While ... Loop v Do...Loop bin chy khng t ng tng ln 1,
do vy ta phi t thc hin tng bin chy ln 1 n v bng cu lnh i = i + 1 nh
bi tp trn.
Bi tp 21:

xi
(y l s
i+n
hng tng qut) v i chy t 0 n N. Do vy tnh tng chng ta cn s dng mt
trong 3 loi vng lp hc.
a. Hng dn: Tng S chnh l tng ca cc s hng th i, vi Si =

b. Chng trnh mu: (S dng vng lp For, bn hy thc hin vi vng lp


do...While v do...Loop)
Private Sub Form_Load()
Dim i As Integer, N As Integer, x As Single
Dim S As Single
'///////// Nhp x v n ////////////////////////
x = InputBox("Nhp vo s x : ")
N = InputBox("Nhp vo s n : ")
S=0
'// Khi to tng S = 0
For i = 0 To N
S = S + x ^ i / (i + 1)
/// Ni chung l : S = S + <S hng tng qut>
Next
MsgBox "Tng S = " & S, vbInformation, "Tnh tng chui"
End Sub

Ch : Khi tnh tng ca mt dy s bt k, vic kh khn nht l phi xc nh c


s hng tng qut Si, sau l cn di v cn trn ca vng lp. Cn tng th
thng tnh theo cng thc : S = S + Si
Bi tp 22
a. Hng dn: Trc ht cn khai bo mt mng nguyn, sau hi ngi dng
xem mun nhp bao nhiu s v s dng vng lp tin hnh nhp d liu cho
mng.
tm s ln nht, thng thng ta gi nh l phn t u tin. Sau dng vng
lp duyt qua cc phn t cn li v so snh, nu s ang xt ln hn s gi nh
th ta li thay i gi tr ca s gi nh bng phn t ang xt.
b. Chng trnh mu:
Private Sub Form_Load()
Dim i As Integer, N As Integer
Dim MAX As Integer
Dim A(100) As Integer
'Khai bo mng A c 101 phn t
'///////// Nhp s phn t n
N = InputBox("Bn cn nhp bao nhiu s: ")

Trang 19

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

For i = 1 To N
A(i) = InputBox("Nhp vo s th " & i)
Next
'/////// Tm s ln nht trong N s va nhp ///////////////////////
MAX = A(1)
'///Gi nh phn t ln nht l phn t A(1)
For i = 1 To N
If A(i) > MAX Then MAX = A(i)
Next
MsgBox "Phn t ln nht l : " & MAX
End Sub

C. Ghi ch: trn chng ta khai bo mng A(100) v nh vy phn t u tin l


A(0), nhng khi nhp ta li cho i chy t 1, tc l khng s dng phn t A(0). y
l thi quen s dng ca mi ngi. Bn c th s dng A(0) hay khng l tu, cn
nu s dng A(0) th vng lp trn s c dng : For i= 0 to N - 1 ....
Bi tp 23
a. Hng dn: Cn phi tm ra s ln nht, k hiu l MAX, sau hin th nhng
phn t c gi tr bng vi MAX va tm c.
b. Chng trnh mu:
Private Sub Form_Load()
Dim i As Integer, MAX As Integer
Dim DS(100) As Integer, N As Integer
'/// Nhp cc s

N = InputBox("Nhp s phn t : ")


For i = 1 To N
DS(i) = InputBox("Nhp s th " & i)
Next
'/// Tm s ln nht cc s va nhp

MAX = DS(1)
For i = 1 To N
If MAX < DS(i) Then MAX = DS(i)
Next
'/// Hin th nhng phn t bng vi MAX (chnh l nhng pt ln nht)

For i = 1 To N
If DS(i) = MAX Then Debug.Print DS(i)
Next
End Sub
C. Ghi ch:
C th p dng gii bi ton tm s nh nht, in ra cc s nh nht v.v
Trong danh sch khng phi ch c duy nht mt phn t ln nht (nh nht)
Bi tp 24
a. Hng dn:
sp xp mt dy s A c N phn t ta tin hnh nh sau:
Bt u t phn t u tin
Trang 20

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Ti v tr (phn t) th i trong mng A, Ta xt tt c cc s t th i+1 n N


xem c s no nh hn phn t th i ang xt hay khng. Nu c phn t A(j)
no nh hn A(i) th hon i gi tr ca A(i) Cho A(j). hon i A(i) vi
A(j) ta thc hin nh sau:
o TrungGian = A(i)
o A(i) = A(j)
o A(j) = TrungGian
Lp li i vi cc phn t A(i) cho n khi no i >= N th dng.

b. Chng trnh mu:


Private Sub Form_Load()
Dim i As Integer, N As Integer, TrungGian As Integer
Dim A(100) As Integer
'Khai bo mng A c 101 phn t
'///////// Nhp s phn t N v nhp d liu cho mng A
N = InputBox("Bn cn nhp bao nhiu s: ")
For i = 1 To N
A(i) = InputBox("Nhp vo s th " & i)
Next
'/////// Sp xp mng A theo chiu tng dn ///////////////////////
For i = 1 To N - 1
'///Duyt tng phn t t 1 n N-1
For j = i + 1 To N
'///Kim tra cc phn t cn li ng sau phn t th i
If A(j) < A(i) Then '///Nu nh hn s i thi` Hon i A(i) vi A(j)
TrungGian = A(i)
A(i) = A(j)
A(j) = TrungGian
End If
Next
Next
Debug.Print "Dy sau khi sp xp "
For i = 1 To N
Debug.Print A(i)
Next
End Sub

Ch :

Thut ton sp xp trn thng xuyn c s dng trong cc bi ton


khng i hi nhiu v tc v n c th p dng sp xp mt danh sch
tng qut (c s v xu), do vy chng ta cn nm vng thut ton ny.

Nu mun sp xp danh sch theo chiu gim dn th ch vic thay cu lnh


If A(j) < A(i) Then Thnh If A(j) > A(i) Then .

Bi tp 25
a. Hng dn: V bn cht, gii thut Quick_Sort s dng phng php Chia tr
(Deive and Conquer). C th m t th thut ton ny nh sau:
- Chn mt v tr K gia (Khng nht thit l chnh gia) ca danh sch L.
- Duyt tng phn t v xt: Nu phn t L[i] < L[k] th cho vo danh sch con
L1, cn nu L[i] >= L[k] th cho vo danh sch L2. Kt qu ta c:
L = L1 L[k] L2, Trong L[k] v tr ng. Tip tc thc hin qui vi L1
v L2 Do L hu hn nn thut ton s dng. phc tp ca thut ton
ny trung bnh vo c O(n) = n.Log2n.
Trang 21

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

b. Chng trnh mu:


'/// Th tc tch danh sch thnh 2 danh sch con v 1 v tr ng (Cht-K)

Sub TachDanhSach(DS() As Integer, ByVal L As Integer, ByVal R As Integer, K As Integer)


Dim i As Integer, j As Integer, Tam As Integer
i=L
j=R
Do While i < j
Do While DS(j) > DS(i)
j=j-1
Loop
Do While (DS(i) <= DS(L)) And (i < j)
i=i+1
Loop
If (j > i) Then
Tam = DS(i)
DS(i) = DS(j)
DS(j) = Tam
End If
Loop
K=j
Tam = DS(L)
DS(L) = DS(j)
DS(j) = Tam
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Thc hin sp xp Quick_Sort

Private Sub Quick_Sort(ByRef DS() As Integer, ByVal L As Integer, ByVal R As Integer)


Dim K As Integer
If R > L Then
TachDanhSach DS, L, R, K
Quick_Sort DS, L, K - 1
Quick_Sort DS, K + 1, R
End If
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Chng trnh chnh

Private Sub Form_Load()


Dim i As Integer, n As Integer, DaySo(100) As Integer
n = InputBox("S phn t cn nhp : ", , 10)
For i = 1 To n
DaySo(i) = InputBox("Nhp s th " & i)
Next
Debug.Print "Dy s sau khi sp xp l : " & vbCrLf
Quick_Sort DaySo, 1, n
For i = 1 To n
Debug.Print DaySo(i)
Next
End Sub

Trang 22

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

c. Ghi ch:

Trong phn khai bo hm v th tc, nu trc tham s hnh thc khng c


t kho byref ng trc th VB hiu l tham bin (tham chiu).

Tham s hnh thc trong phn khai bo chng trnh con l mt mng th phi
vit di dng nh sau: <Tn> () As <Kiu c bn>, Cch vit: A (10) As
integer hay A (1 to 10) As String v.v l sai !.

Gii thut Quick_Sort thc hin tng i nhanh khi n ln. Ngi ta gi gii
thut sp xp Quick_Sort v mt s gii thut sp xp nhanh khc (nh
Merge sort, Heap sort) thuc phng php sp Cng nghip, do vy cn
phi nh v vn dng thnh tho gii thut ny.

Bi tp 26
a. Hng dn: tng ca gii thut ny l dng mng mt chiu biu din cy
nh phn. Sau tinh chnh dn cc cy con c sp xp cho kt qu cui
cng.
b. Chng trnh mu
'/// Th tc hon i gi tr ca 2 bin a v b cho nhau (s s dng trong chng trnh)

Sub Swap(a As Integer, b As Integer)


Dim Tam As Integer
Tam = a
a=b
b = Tam
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Th tc iu chnh li cy con bt u t nt i n tr thnh mt ng (Heap)
'/// iu chnh ti nt i ca cy DS, c N phn t

Sub DieuChinhNut(i As Integer, N As Integer, DS() As Integer)


Dim R As Integer
If i > (N \ 2) Then Exit Sub
'/// So snh con tri v con phi ca nt i, nu con no ln hn th
'/// R s lu v tr ca con
R=2*i
'/// Gi s con tri ln hn

If (R + 1 <= N) And (DS(R) < DS(R + 1)) Then R = R + 1


If DS(i) < DS(R) Then '//Nu nt cha i nh hn th tro i li gi tr tho mn l Heap
Call Swap(DS(i), DS(R))
Call DieuChinhNut(R, N, DS) '/// cn phi iu chnh li nt R sau khi hon i
End If
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// iu chnh ton b N nt ca cy (Danh sch) ton b cy tho mn l Khi Heap

Sub DieuChinhToanBo(N As Integer, DS() As Integer)


Dim i As Integer
For i = N \ 2 To 1 Step -1
Call DieuChinhNut(i, N, DS)
Next
End Sub

Trang 23

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

'/// Thc hin HeapSort

Sub Heap_Sort(N As Integer, DS() As Integer)


Dim i As Integer
DieuChinhToanBo N, DS
For i = N To 2 Step -1
Swap DS(1), DS(i)
DieuChinhNut 1, i - 1, DS
Next
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Chng trnh chnh

Private Sub Form_Load()


Dim i As Integer, N As Integer, DaySo(100) As Integer
N = InputBox("S phn t cn nhp : ", , 10)
For i = 1 To N
DaySo(i) = InputBox("Nhp s th " & i)
Next
Debug.Print "Dy s sau khi sp xp l : " & vbCrLf
Heap_Sort N, DaySo
For i = 1 To N
Debug.Print DaySo(i)
Next
End Sub

c. Ghi ch:
Ton t \ thc hin php chia ly phn nguyn.
Khi gi hm hay th tc c th thm t kho Call hoc khng, nhng khi c t
kho Call th cc tham s phi c t trong ngoc n nh trn.
Mt cy nh phn c th biu din bng mng mt chiu, trong nt con tri
ca nt i c ch s l i*2 v nt con phi l i*2 + 1. Nt cha ca nt i c ch s
l i \ 2.
Bi tp 27
a. Hng dn: Vic sp xp c th thc hin thng qua gii thut sp xp n gin
c phc tp tnh ton n2. (p dng thut ton s dng trong bi tp 12)
b. Chng trnh mu:
Private Sub Form_Load()
Dim DanhSach(100) As String
Dim SoSV As Integer
Dim i As Integer

// Mng lu danh sch tn ca lp


'//S Sinh vin nhp vo

SoPT = InputBox("Bn cn nhp tn ca bao nhiu ngi : ")


For i = 1 To SoSV
DanhSach(i) = InputBox("Nhp tn ca ngi th " & i)
Next
Dim j As Integer, TrungGian As String
'/// Sp xp tng dn bng 1 thut ton n gin (dng vi s pt t)

Trang 24

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

For i = 1 To SoSV- 1
For j = i + 1 To SoSV
If DanhSach(j) < DanhSach(i) Then
TrungGian = DanhSach(i)
DanhSach(i) = DanhSach(j)
DanhSach(j) = TrungGian
End If
Next
Next
'/// Hin th danh sch va sp xp ra ca s Immediate
'/// Nhn Ctrl-G hin th ca s ny
For i = 1 To SoSV
Debug.Print DanhSach(i)
Next
End Sub

c. Ghi ch: C th p dng gii thut Quic_Sort v Heap_Sort cc bi tp trc


thc hin sp xp trn danh sch dng xu k t.
Bi tp 28:
a. Hng dn: S dng cc hm thao tc xu k t.

Hm Trim(S) tr v xu S nhng khng c du trng 2 u (Lu : Bn thn


xu S khng b thay i).

Hm Replace(S, Sc, Sm) : Hm thay th tt c cc xu con Sc nm trong xu


cha S bng xu Sm.

b. Chng trnh mu:


'----------------------------------------------------------------------------------------------------------------------------'/// Hm chun ho xu k t S. Gi tr tr v cho hm l xu c chun ho
'/// Xu vo c truyn dng tham tr. Hm khng lm thay i xu vo S

'----------------------------------------------------------------------------------------------------------------------------Function ChuanHoa(ByVal S As String) As String


'/// Thm du trng vo sau du chm "." -> hay du . = . + du trng

S = Replace(S, ".", "." & Chr(32))


'//Thm du trng vo sau du phy "," -> hay thay du , bng du , + du trng

S = Replace(S, ",", "," & Chr(32))


'/// Thay 2 du trng bng 1 du trng cho n khi no khng cn 2 du trng lin nhau

Do While InStr(1, S, Chr(32) & Chr(32)) > 0


S = Replace(S, Chr(32) & Chr(32), Chr(32))
Loop
'/// Ct du trng 2 u xu

S = Trim(S)
'/// Tr kt qu v cho hm. (Lu : Bn thn xu S khng b thay i khi ra khi hm)

ChuanHoa = S
End Function
'----------------------------------------------------------------------------------------------------------------------------'/// Chng trnh chnh

Private Sub Form_Load()


Dim S As String
S = InputBox("Hy nhp mt xu k t : ")
MsgBox "Xu sau khi chun ho l : " & ChuanHoa(S)
End Sub

Trang 25

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

c. Ghi ch:

V khi vit du trng (c m l 32) trong ti liu rt kh khn cho ngi c


nn y thay v vit du trng , th c th vit l chr(32).

C th dng Hm String(N, Ch) to mt xu gm c N k t Ch.

Bi tp 29
a. Hng dn:

Cc bc cn lm ging nh bi tp 28, ngoi ra cn cn phi thc hin vic


i thnh ch ci hoa mi k t u cu v u xu vn bn.

Khi chun ho theo nh bi 28 th cc k t cn chuyn thnh ch HOA s


nm v tr ca du chm + 2.

b. Chng trnh mu:


'/// Hm chun ho xu k t S. Gi tr tr v cho hm l xu c chun ho
'/// Xu vo c truyn dng tham tr. Hm khng lm thay i xu vo S

Function ChuanHoa(ByVal S As String) As String


Dim i As Integer, S2 As String
'/// Thm du trng vo sau du chm "."

S = Replace(S, ".", "." & Chr(32))


'/// Thm du trng vo sau du phy ","

S = Replace(S, ",", "," & Chr(32))


'/// Thay 2 du trng bng mt du trng cho n khi no khng cn 2 du trng lin nhau

Do While InStr(1, S, Chr(32) & Chr(32)) > 0


S = Replace(S, Chr(32) & Chr(32), Chr(32))
Loop
'/// Ct du trng 2 u xu

S = Trim(S)
'///----------- Chuyn i thnh k t HOA mi u cu (Sau du ".")----------///

S2 = ""

'/// Bin lu kt qu sau khi chuyn thnh ch ci Hoa u cu

'///Kim tra tng k t, nu l du "." th chuyn k t ng cnh (cch 2 v tr) thnh ch HOA.

For i = 1 To Len(S)
If (Mid(S, i, 1) = ".") And (i < Len(S)) Then
S2 = S2 & "." & Mid(S, i+1, 1) & UCase(Mid(S, i + 2, 1))
i = i + 2 '/// B qua v tr i+1 v i+2 (v cng vo kt qu S2 dng trn ri)
Else
S2 = S2 & Mid(S, i, 1) '/// Nu khng phi l du "." th cng vo S2
End If
Next
'// Cng cn chuyn k t u vn bn thnh ch HOA

S2 = UCase(Left(S2, 1)) & Mid(S2, 2)


'/// Tr kt qu v cho hm.

ChuanHoa = S2
End Function

Trang 26

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

'----------------------------------------------------------------------------------------------------------------------------'/// Chng trnh chnh

Private Sub Form_Load()


Dim S As String
S = InputBox("Hy nhp mt xu k t : ")
MsgBox "Xu sau khi chun ho l : " & ChuanHoa(S)
End Sub

c. Ghi ch:
Hm Mid(S,i,n) ly n k t ti v tr i ca xu S. Nu b qua tham s n th
hm s tr v cc k t cn li t v tr i cho n cui xu. Nu n = 1 th cho ta
k t ti v tr th i. (Trong cc ngn ng lp trnh khc, ly k t th i trong
xu S, ta thng vit S[i]
nhng trong VB phi vit l Mid(S,i,1) )
Left(S,n) : Tr v n k t pha tri ca xu S
Right(S,n) : Tr v n k t pha phi ca xu S.
Hm Ucase(S) : Tr v xu S nhng dng ch HOA
Lcase(S) : Tr v xu ch thng ca S.
Bi tp 30
a. Hng dn: y ta cn duyt ln lt tng k t v kim tra, s c 2 kh nng
xy ra. trong qu trnh thc hin, ta s dng mt bin xu lu cc s.

Trng hp k t ang xt l k t s th ch vic cng vo bin xu hin ti

Trng hp k t ang xt khng l k t s th xt tip: Nu bin xu hin ti


khng rng th in sau xo xu .

b. Chng trnh mu
'/// Tch cc s ra khi xu

Private Sub Form_Load()


Dim S As String, i As Integer, So As String
S = InputBox("Hy nhp mt xu k t : ")
So = ""
i=1
Do While i <= Len(S)
If ("0"<=Mid(S,i,1)) And (Mid(S,i,1) <= "9") Then '/// Nu k t ang xt l k t s
So = So & Mid(S, i, 1)
'/// Th ghp vo s hin ti
Else
'/// c ht s ri-> in ra mn hnh
If So <> "" Then
Debug.Print So
So = ""
'/// Xo bt u lu s mi
End If
End If
'/// Xt k t tip theo
i=i+1
Loop
'/// In nt ra mn hnh (Trng hp s cui cng nm cui xu).

If So <> "" Then Debug.Print So


End Sub

c. Ghi ch: Thut ton c th m rng tch cc s m/dng, nguyn/thc .

Trang 27

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi tp 31
a. Hng dn: Gi S1 l mt cu trong xu S. Ta duyt tng k t trong S v cng
vo S1 cho n khi no gp k t l du chm hoc ht xu th dng li. Sau in
xu S1 ra mn hnh v t li S1 = .
b. Chng trnh mu:
'/// Tch cc cu ra khi xu vn bn

Private Sub Form_Load()


Dim S As String, i As Integer, S1 As String
S = InputBox("Hy nhp mt xu k t : ")
S1 = ""
i=1
Do While i <= Len(S)
S1 = S1 & Mid(S, i, 1)
If Mid(S, i, 1) = "." Then
Debug.Print S1
S1 = ""
End If
i=i+1
'/// Chuyn n k t tip theo
Loop
'/// In nt cu S1 ra mn hnh (Trong trng hp xu S1 khng c du chm cu)

Debug.Print S1
End Sub

c. Ghi ch: Bi ton ny c th p dng m s cu trong mt vn bn.


Bi tp 32
a. Hng dn: Ta s dng hm Replace thay th mi k t font .vnTime bng
mt k t (hoc xu k t) font VIQR. Vic ny thc hin trn tng xu k t c
t tp vi lnh Line Input.
b. Chng trnh mu : y ch xin minh ho thay th mt s k t: , , , , ,
,, , .
'/// Chuyn i font ch

Private Sub Form_Load()


On Error GoTo Err
Dim F_Nguon As Long, F_Dich As Long, S As String
F_Nguon = FreeFile
Open "c:\FontVNTIME.txt" For Input As F_Nguon

'/// M c (Input=c)

F_Dich = FreeFile
Open "c:\FontVIQR.txt" For Output As F_Dich

'/// M (to mi) ghi

Do While Not EOF(F_Nguon)


Line Input #F_Nguon, S
S = Replace(S, "", "dd")
S = Replace(S, "", "a^")
S = Replace(S, "", "a(")
S = Replace(S, "", "a`")
S = Replace(S, "", "a'")

'/// c mt dng trong file ngun

Trang 28

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

S = Replace(S, "", "a?")


S = Replace(S, "", "a.")
S = Replace(S, "", "u+")
S = Replace(S, "", "o+")
'............... Tip tc thay th cc k t Ting Vit khc y
Print #F_Dich, S
'/// Ghi kt qu vo file ch
Loop
Close F_Nguon
Close F_Dich

'/// ng file ngun v file ch

MsgBox " chuyn i xong ! Xin m file C:\FontVIQR.txt xem !"


Exit Sub
Err:
MsgBox "Xut hin li ! " & Err.Description, vbCritical, "Li !"
End Sub

c. Ghi ch:

C th p dng chuyn i gia cc b font ch khc nhau.

Cu lnh Line Input dng c tng dng vn bn trong tp vn bn.

Cu lnh Print dng ghi danh sch cc gi tr vo tp

Hm eof(F) dng kim tra xem c ht tp F hay cha. True -> ht

Pht biu On error goto err thng c dng ch ng bt li, trnh b


treo my. Trc nhn Err: thng phi l Exit Sub hay Exit Function. Hy s
dng c ch bt li ny trong nhng bi ton hay on chng trnh m d
xy ra li Runtime. Cn c mt lnh bt li khc l On error Resume Next. Xin
hy tra cu trong ti liu hng dn trc tuyn MSDN, gm 3 a CDs.

Bi tp 33
a. hng dn: C nhiu cch gii quyt bi ny, nhng cch nhanh gn nht l dng
mt mng lu tr s lng k t nhp. Ch s ca cc phn t trong mng
lu s lng k t s l gi tr ASCII ca k t . V d: M[65] dng lu s
lng k t l ch ci A.
b. Chng trnh mu
'/// m s lng tng loi k t

Private Sub Form_Load()


Dim i As Integer
Dim S As String
Dim M(1 To 255) As Integer
For i = 1 To 255
M(i) = 0
Next
S = InputBox("Hy nhp vo mt xu k t ch cha cc ch ci HOA : ")
For i = 1 To Len(S)
M(Asc(Mid(S, i, 1))) = M(Asc(Mid(S, i, 1))) + 1
Next
For i = 1 To 255

Trang 29

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

If M(i) > 0 Then


Debug.Print "S lng k t """ & Chr(i); """ l : " & M(i)
End If
Next
End Sub

c. Ghi ch:

Hm ASC(Ch) cho ta m ASCII ca k t Ch, v d: ASC(A)

Du nhy kp l k t c bit c VB s dng bao bc mt hng xu,


do vy khi mun in du nhy kp ra mn hnh th cn phi g 2 ln du nhy
kp . V d in ra mt du nhy kp ra mn hnh.

65

Bi tp 34
a. Hng dn : Sdng hm Replace
b. Chng trnh mu:
'/// Thay th k t

Private Sub Form_Load()


Dim S As String
S = InputBox("Hy nhp mt xu : ", "S dng hm Replace", "Welcome to VB")
S = Replace(S, Chr(32), "_")
MsgBox "Xu sau khi thay th l : " & S
End Sub

Bi tp 35
a. Hng dn: Thc hin cng t phi sang tri tng cp k t s vi nhau (c tnh
n phn nh)
b. Chng trnh mu
Private Sub Form_Load()
Dim S1 As String, S2 As String, S As String
Dim i As Integer, Nho As Integer, DonVi As Integer /// Nho=Nh, DonVI=n V
S1 = InputBox("Nhp vo s nguyn dng th nht : ")
S2 = InputBox("Nhp vo s nguyn dng th hai : ")
'/// Chn thm s 0 vo trc xu s2 2 xu di bng nhau

nu S2 < S1

If len(s2) < len(s1) Then S2 = String(Len(S1) - Len(S2), "0") & S2


/// Chn thm s 0 vo trc xu S1 2 xu di bng nhau nu S1 < S2

If Len(s1) < len(s2) Then S1 = String(Len(S2) - Len(S1), "0") & S1


S = ""
Nho = 0
For i = Len(S1) To 1 Step -1
DonVi = (Val(Mid(S1, i, 1)) + Val(Mid(S2, i, 1)) + Nho) Mod 10
Nho = (Val(Mid(S1, i, 1)) + Val(Mid(S2, i, 1)) + Nho) \ 10
S = DonVi & S
Next
If Nho > 0 Then S = Nho & S
MsgBox "kt qu ca " & S1 & "+" & S2 & " = " & S
End Sub

Trang 30

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

c. Ghi ch:
C th p dng thc hin cng 2 s nguyn, hai s thc hay s nguyn vi
s thc.
C th vn dng vo vic nhn 2 s ln.
Hm String(N,Ch) : Tr v mt xu cha N k t Ch
Hm Val (S) : Chuyn xu S thnh s.
Php Mod thc hin vic chia ly phn d
Php ton \ thc hin vic chia ly phn nguyn.
Bi tp 36
a. hng dn: Cc phn t trn ng cho chnh th nht c ch s l [i,i] (vi i
chy t 1 n n). ng cho chnh th hai c ch s l [i,j] (vi i chy t 1 n n v
j chy t n-i+1 n 1)
b. Chng trnh mu:
Private Sub Form_Load()
Const MAX = 10
Dim TongDuong As Long, TongAm As Long
Dim A(1 To MAX, 1 To MAX) As Integer
Dim N As Integer, i As Integer, j As Integer
N = InputBox("Kch thc ca ma trn : ")
'/// Nhp d liu cho ma trn

For i = 1 To N
For j = 1 To N
A(i, j) = InputBox("Nhp phn t A[" & i & "," & j & "]")
Next j
Next i
TongAm = 0
TongDuong = 0
'/// Cng trn ng cho th nht

For i = 1 To N
If A(i, i) < 0 Then
TongAm = TongAm + A(i, i)
Else
TongDuong = TongDuong + A(i, i)
End If
Next
'/// Cng trn ng cho th hai

For i = 1 To N
If A(i, N - i + 1) < 0 Then
TongAm = TongAm + A(i, N - i + 1)
Else
TongDuong = TongDuong + A(i, N - i + 1)
End If
Next
MsgBox "Tng m = " & TongAm & " Tng dng = " & TongDuong
End Sub

Trang 31

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi tp 37
a. Hng dn: Kim tra tng v tr A[i,j] ca ma trn. Vi mi v tr ta th lan tip
theo chiu ngang, dc, cho xem liu c lin k m c gi tr 1 hay khng ?. Nu
c th ghi nhn thm vo, trong qu trnh ghi nhn th cn kim tra, nu s >=5
th dng v thng bo l c tn ti mt hng lin nhau cng c gi tr l 1.
b. Chng trnh mu:
Option Explicit
Dim A(1 To 10, 1 To 10) As Integer
Dim N As Integer
'///Hm kim tra xem ti v tr hng h, ct c c t nht 5 c cng gi tr 1 hay khng ?
'/// Nu tn ti th hm tr v gi tr True, tri li tr v False

Function KiemTraHangNgang(h As Integer, c As Integer) As Boolean


Dim i As Integer, SoPT As Integer
SoPT = 1
For i = 1 To 4
If i + c <= N Then
If A(h, i + c) = 0 Then Exit For
SoPT = SoPT + 1
End If
Next
KiemTraHangNgang = (SoPT >= 5)
End Function
'----------------------------------------------------------------------------------------------------------------------------'/// Hm kim tra hng dc

Function KiemTraHangDoc(h As Integer, c As Integer) As Boolean


Dim i As Integer, SoPT As Integer
SoPT = 1
For i = 1 To 4
If i + h <= N Then
If A(i + h, c) = 0 Then Exit For
SoPT = SoPT + 1
End If
Next
KiemTraHangDoc = (SoPT >= 5)
End Function
'----------------------------------------------------------------------------------------------------------------------------Function KiemTraCheo1(h As Integer, c As Integer) As Boolean
Dim i As Integer, SoPT As Integer
SoPT = 1
For i = 1 To 4
If (h + i <= N) And (c + i <= N) Then
If A(h + i, c + i) = 0 Then Exit For
SoPT = SoPT + 1
End If
Next
KiemTraCheo1 = SoPT >= 5
End Function
'----------------------------------------------------------------------------------------------------------------------------Function KiemTraCheo2(h As Integer, c As Integer) As Boolean
Dim i As Integer, SoPT As Integer
SoPT = 1

Trang 32

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

For i = 1 To 4
If (h + i <= N) And (c - i >= 1) Then
If A(h + i, c - i) = 0 Then Exit For
SoPT = SoPT + 1
End If
Next
KiemTraCheo2 = SoPT >= 5
End Function
'----------------------------------------------------------------------------------------------------------------------------Private Sub Form_Load()
Dim i As Integer, j As Integer
N = InputBox("Kch thc ca ma trn : ")
'/// Nhp d liu cho ma trn

For i = 1 To N
For j = 1 To N
A(i, j) = InputBox("Nhp phn t A[" & i & "," & j & "]")
Next j
Next i
For i = 1 To N
For j = 1 To N
If A(i, j) = 1 Then
If KiemTraHangNgang(i, j) Then
MsgBox "ng ngang bt u t v tr " & i & ":" & j
End
End If
If KiemTraHangDoc(i, j) Then
MsgBox "ng dc bt u t v tr " & i & ":" & j
End
End If
If KiemTraCheo1(i, j) Then
MsgBox "ng cho chnh 1, bt u t v tr " & i & ":" & j
End
End If
If KiemTraCheo2(i, j) Then
MsgBox "ng cho chnh 2, bt u t v tr " & i & ":" & j
End
End If
End If
Next
Next
MsgBox "Khng thy xut hin !"
End Sub

Bi tp 37
a. Hng dn: Mun nh ngha kiu d liu mi, cn dng t kho Type End
type v thng nh ngha trong Module.

Trang 33

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

b. Chng trnh mu:


Private Sub Form_Load()
Dim i As Integer, j As Integer
Dim DS(100) As CanBo
Dim SoLuong As Integer
Dim Tam As CanBo
SoLuong = InputBox("S lng cn b cn nhp : ")
For i = 1 To SoLuong
DS(i).HoTen = InputBox("H tn :")
DS(i).NamSinh = InputBox("Nhp nm sinh : ")
DS(i).QueQuan = InputBox("Nhp qu qun : ")
DS(i).HeSoLuong = InputBox("H s lng : ")
Next
'/// Sp xp bng gii thut sp xp n gin

For i = 1 To SoLuong - 1
For j = i + 1 To SoLuong
If DS(i).NamSinh > DS(j).NamSinh Then
Tam = DS(i)
DS(i) = DS(j)
DS(j) = Tam
End If
Next
Next
'/// Lu kt qu ra tp

Dim F As Long
F = FreeFile
Open "c:\Canbo.txt" For Output As #F
For i = 1 To SoLuong
Print #F, DS(i).HoTen, vbTab, DS(i).NamSinh
Next
Msgbox M file c:\Canbo.txt quan st
Close F
End Sub

c. Ghi ch:

C th gn gi tr ca cc bin cu trc cho nhau.


Trang 34

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Hm FreeFile tr v mt con s (gi l th file) cn trng.

C BI TP T GII
Bi 1: Vit chng trnh nhp vo 3 cnh ca tam gic (Lu phi m bo kim tra
tng 2 cnh ln hn cnh cn li). Dng hm MsgBox hin th chu vi, din tch,
di 3 ng cao, 3 ng trung tuyn, 3 ng phn gic, bn knh ng trn ni
tip, ngoi tip theo cc cng thc sau:
V = a+b+c = 2p
2S
S = p ( p a )( p b)( p c)
ha =
a
1
2
ma =
ga =
2b 2 + 2c 2 a 2
bcp( p a)
2
b+c
S
abc
r=
R=
P
4S
Bi tp 2: Thng tin v mt sinh vin gm c: H tn, Tui, im ton (H s 2),
im tin (H s 1). Hy nhp cc thng tin trn cho mt lp v in ra bng im gm
cc chi tit nu trn v im trung bnh.
HD: nh ngha kiu d liu mi bng t kho Type (Tng t nh Record trong
pascal) v khai bo mt Mng lu tr danh sch sinh vin. Dng hm inputbox
nhp liu, hm Debug.print in kt qu.
Bi tp 3: Nhp 3 s a, b, c. Hy cho bit 3 s trn c th l di 3 cnh ca tam
gic hay khng ?. Nu lp thnh mt tam gic th l tam gic g : Vung, u, cn,
vung cn hay tam gic thng.
HD: S dng cu trc If ... Then v If...Then ...Else.
Bi tp 4: Nhp mt k t. Hy cho bit l ch ci vit hoa, thng, ch s hay
k t khc.
HD: S dng cu trc Select Case
Bi tp 5: Nhp vo thng v nm dng lch. Hy hin th s ngy trong thng .
HD: S dng cu trc Select Case v lu nhng thng ca nm nhun (Tc thng
2 c 29 ngy).
Bi tp 6 : Nhp vo tn ca mt hm (Ch thng hoc hoa) v gi tr ca mt
bin s. Sau in ra kt qu ca hm. V d : Nu nhp tn hm l Cos v gi tr
bin s l 0 th kt qu l 1.
HD: S dng cu trc Select Case v hm UCase (hoc LCase)
Bi tp 7: Va g va ch b li cho trn 36 con, 100 chn chn. Hy lp trnh cho
bit c bao nhiu con g, bao nhiu con ch.
HD: S dng 2 vng lp lng nhau th. Nu kim tra tho mn u bi th hin th
kt qu v dng vng lp.
Bi tp 8: C 100 con tru, 100 b c, tru ng n nm b, tru nm n 3 b, tru
gi 3 con n 1 b. Hy lp trnh tm xem c bao nhiu con tru mi loi. HD : Tng
t nh bi tp 7, nhng s dng 3 vng lp th.

Trang 35

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi tp 9 : Yu nhau cau su b ba, ght nhau cau su b ra lm mi. Gin


thng c by mi hai ngi, nhng thi cau ch c mi qu thi. Hy cho bit
c bao nhiu ngi thng bao nhiu ngi gin. HD: S dng 2 vng lp.
Bi tp 10: Nhp vo xu k t, sau m xem c bao nhiu ch ci hoa, bao
nhiu ch ci thng, bao nhiu ch s v bao nhiu k t khc.
HD : S dng hm inStr v kt hp vi vng lp For.
Bi tp 11: Nhp vo mt xu k t v o ngc xu k t .
Bi tp 12 : Nhp vo mt xu k t v ct cc khong trng 2 u (khng s
dng hm Trim ca VB)
Bi tp 13: Vit chng trnh cho ngi dng nhp vo s t nhin n v hin th
tng ca cc dy s sau :

1 + 2 + 3 + ... + n
n
1 3 5
2n 1
S3= . . .....
2 4 6
2n

S1 =

S5 = 2 + 2 + 2 + ... + 2 (n du cn)

S2= 12 + 2 2 + 3 2 + ... + n 2
S4= 1 1 + 2 2 + 3 3 + ... + n n
S6 = n !

Hng dn: S dng vng lp (Nn th lm vi c 3 loi vng lp)


Bi tp 14: Nhp vo mt s nguyn dng n. Hy lp trnh cho bit c phi
l s nguyn t hay khng ?
HD: S n c gi l nguyn t nu n khng chia ht cho bt k s no nm trong
khong [2, [ n ]].
Bi tp 15 : Nhp vo tui ca mt ngi cho n khi no tui nhp vo l mt s
m. HD: S dng vng lp do...Loop
Bi tp 16: Nhp vo mt dy k t (mi ln mt k t). iu kin nhp kt thc khi
k t nhp vo l mt du chm. Sau hin th s lng k t l ch s v s
lng k t khng phi l k t s.
Bi tp 17: Tm s dng n ln nht tho mn iu kin :
1 1
1
< 2.101999
a. 1 + + + ... +
3 5
2n 1
b. en-1999Log10n < 2000
(HD: Trong VB : Log10n vit l Log(n)/Log(10))
Bi tp 18 : Vit chng trnh tm c s chung ln nht ca hai s a v b.
Bi tp 19 : Vit chng trnh nhp vo hai s nguyn T v M. Hy in ra phn s
T/M dng ti gin. V d nhp T = 10, M = 20 th in ra l .
Hng dn : p dng kt qu ca bi 18.
Bi tp 20 : Nhp vo mt xu k t, sau in ngc xu bng th tc
debug.print. Mi k t in trn mt dng ring bit.

Trang 36

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi tp 21: Vit chng trnh tnh din tch hnh gii hn bi ng y1=0, y2 = x2 v
xa=-2, xb=5. bng phng php trung bnh, bc nhy l i = xi+1-xi = 0.0000001.
2
n
( xi +1 + xi )
2
HD: Din tch S = 1 i * y i ; n = ( xb x a ) / i ; y i =

Bi tp 22: Vit chng trnh cho ngi dng nhp vo mt s nguyn dng, sau
in ra mn hnh dng ch, v d nhp "12345" th in ra l "mi hai nghn ba
trm bn mi lm".
HD: Phn chia thnh cc cm 3 ch s sau "c" cm 3 s kt hp vi hng ca
3 s . Nh v d trn th s 12 c c l "mi hai", nhng v s ny thuc
hng nghn nn thm t "nghn".
Bi tp 23: Nhp vo n s v in ra c s chung ln nht ca n s
Bi tp 24: Vit chng trnh m ho mt file vn bn bng phng php m ho
c in. Kt qu c lu vo mt file vn bn khc. Qui tc m ho nh sau:
K t ban u
a
b
c
.................
z
A
B
.............
Z

K t sau khi b m ho
b
c
d
.....
a
B
C
.......
A

Bi tp 25: Vit chng trnh gii m theo qui tc ca bi 24. (B-> A, A->Z...)
Bi tp 26 : Vit chng trnh chuyn i mt dy cc con s (dy con s ny cho
di dng mt xu, v d '142345'). Sau chuyn dy s ny thnh s chui nh
phn, trong mi ch s c chuyn thnh 1 cm 4 bit nh phn. v d nu nhp
xu '1234567' th kt qu cho ta : '0001 0010 0011 0100 0101 0110 0111'.
Bi tp 26: Vit chng trnh chuyn i dy nh phn thnh dy cc k t ASCII
tng ng, bit rng mi cm gm 7 bit nh phn biu din mt k t c m l gi tr
h 10 ca 7 bit .
Bi tp 27: Nhp vo n im trong to phng. Sau in ra mn hnh s lng
tam gic c th c t n im .
Bi tp 28: Yu cu nh bi tp 27 nhng m s lng tam gic u, cn, vung,
vung cn v tam gic thng.
Bi tp 29 : Yu cu nh bi tp 27 nhng m s lng tam gic gc phn t
th I, II, III, IV.
Bi tp 30: Nhp vo mt s h 10 sau in gi tr ca n trong h c s 2, 8, 16.

Trang 37

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Chng ii

S dng cc iu khin c bn
MC TIU: SAU KHI HON THNH CC BI TP, NGI HC C TH
S dng c cc iu khin c bn ca VB
Kt hp s dng nhiu iu khin c bn trong chng trnh
Vn dng cc iu khin vit c mt s chng trnh tin ch.

A - BI TP
Bi 1: Vit chng trnh gii phng trnh bc 2. H s a, b, c nhp t cc
TextBox. Kt qu nghim c hin th trn 2 nhn, hoc thng bo l v nghim
bng hm MsgBox. Giao din c dng nh sau:

Hnh 2.1 Giao din chng trnh


Bi 2: Mt form nhp (v d: hng ho, E-Mail, Web Hosting) thng c rt nhiu
textbox, combobox v mi khi thm mt bn ghi mi th u cn xo trng ni dung
trong cc textbox, combobox ny. Hy to mt form nh Hnh 2 v vit lnh cho nt
Xo thc hin xo trng cc iu khin ny mt cch nhanh nht !.

Hnh 2.2 Form nhp hng ho


Trang 38

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 3: Vit chng trnh nhp h tn sinh vin ca mt lp vo mt ListBox, trong


qua trnh nhp c th cho php ngi dng xo mt s mc ca Listbox. Giao din
chng trnh nh hnh 3. Lu : Mc thm sau c t ln u danh sch.

Hnh 2.3 Thm v xo mt mc khi Listbox


Bi 4: Vit chng trnh nh bi s 3, nhng khi Xo khi danh sch th c th
thc hin chn nhiu mc vi cc Checkbox. Giao din ging nh Hnh 4.

Hnh 2.4 - Chn cc mc vi Style l Checkbox


Bi 5: Minh ho s dng iu khin Listbox v thuc tnh a la chn.
Xy dng giao din chng trnh nh hnh 5

Hnh 2.5 - Chuyn cc mc t mt Listbox sang mt Listbox khc


Trang 39

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Yu cu:

Khi ngi dng click vo nt


th cc mc ang c chn trong Danh
sch ngi dng pha bn tri s c chn vo Listbox pha bn phi.

Khi ngi dng click vo nt


th cc mc ang c chn trong Listbox
bn phi s b xo (Remove) khi Listbox .

Trong c hai Listbox, u cho php ngi dng la chn nhiu mc ng thi.

Click vo nt Thot th kt thc chng trnh.

Yu cu thm: Sau khi chn cc mc ang chn bn Listbox tri sang List
bn phi th cng ng thi xo cc mc ang chn khi Listbox bn tri.

Bi 6: Minh ho s dng iu khin Listbox v hm tch xu Split.

Hnh 2.6 - o tn ln trc h m


Yu cu:
Np sn mt s mc vo trong Listbox pha tri trong th tc Form_load

Khi ngi dng click vo nt


th thc hin o tn ln trc
h trong listbox pha tri v chn vo Listbox pha phi.

Bi 7: Tch a ch E-Mail s dng hm Split


Cc trang gi E-Mail nh Yahoo hay phn mm Outlook Express u cho php
ngi dng c th gi ti nhiu a ch khc nhau v mi a ch ny cch nhau bi
du chm phy.
Hy xy dng mt Form nh hnh 7
Yu cu: Khi ngi dng click vo nt "Thc hin tch" th cc a ch trong hp
Textbox s c tch ra, sau chn vo Listbox pha bn phi. V d: nu nhp
vo l abc@hn.vnn;xyz@yahoo.com th tch thnh 2 mc l abc@hn.vnn.vn v
xyz@yahoo.com.

Trang 40

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Hnh 2.7 Tch xu s dng hm Split


Bi 8: Sp xp danh sch theo TN, p dng bi tp s 7 (Hm Split).

Hnh 2.8 - Sp xp danh sch theo TN


Yu cu:
Np sn (s dng phng thc AddItem) mt s mc vo Listbox pha tri
Copy cc mc trong Listbox pha tri sang Listbox pha phi.
Khi ngi dng Click chn nt Sp xp theo tn th sp xp danh sch
sinh vin trong Listbox pha phi theo th t u tin Tn, sau mi n h.
Bi 9: Minh ho s dng iu khin ComboBox.
Yu cu sau:

Khi ngi dng nhp mt a ch Web (URL) v nhn Enter th thc hin thm
mc ny vo trong ComboBox
M trang Web vi a ch tng ng m ngi dng va nhp vo.
M trang Web tng ng khi ngi dng click chn trong hp ComboBox.

Trang 41

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Hnh 2.9 Thao tc vi ComboBox v WebBrowser duyt Web


Bi 10: Minh ho thao tc vi ComboBox v vic ly tn font ca h thng.
Yu cu:

Np tt c cc Font ch hin c trong my tnh vo hp Combo

t font ch cho textbox bng vi Font ch khi ngi dng chn trong hp
Combox. Trong , hp Combox hin th ch (style) l : Dropdown list.

t c ch cho textbox bng vi c ch trong hp Combox c ch

Hp Textbox hin th ch MultiLine (Nhiu dng).

Hnh 2.10 - Kt hp s dng nhiu hp ComboBox

Trang 42

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 11: Minh ho s dng iu khin Option button v s dng hm APIExitwindow


Yu cu:
Khi ngi dng click chn cc mc Logoff, Restart, Shutdown v chn mc
Normal th thc hin Logoff, Restart, shutdown ch Normal ( ch
ny th khi Restart, Shutdownnu c mt ng dng ang chyv d
Microsoft word-c d liu cha c lu th my tnh s hi trc khi Restart)

Khi ngi dng click chn cc mc Logoff, Restart, Shutdown v chn mc


Bt buc th thc hin Logoff, Restart, shutdown ch Fore ( ch
ny th my tnh thc hin ngay v d liu cha lu s b mt).

Gi tr chn mc nh l Restart-Normal

Hnh 2.11 - Khi ng my tnh ch Normal (bnh thng)


Bi 12 Minh ho s dng nhn (Label) gi lp thanh tiu ca ca s.
Font ch hin th trn cc thanh tiu ca ca s l font ch h thng, thng
khng phi l font ting vit. Do vy khi chy chng trnh trn cc my tnh khc
nhau th vic hin th c th khng cn ng na. gii quyt vn ny, c mt
gii php l n thanh tiu ca ca s v thay vo l mt Label v Font ch
ca Label s c t l font ch ting Vit nn vic hin th lun m bo gia cc
h thng khc nhau.
Yu cu:

Xy dng mt Form nh hnh 10, trong tiu l mt Label vi font ch l


.vnArialH, c ch l 12pt.

Khi ngi dng di chuyn thanh tiu th form cng di chuyn theo.

Khi ngi dng click vo nt

th thot khi ng dng.

Hnh 2.12 - S dng Label thay cho thanh tiu

Trang 43

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 13 Minh ho s dng Label kt hp vi Frame v Timer.


a. Giao din chng trnh

Hnh 2.13 - Cun vn bn vi Label + Frame + Timer


b. Yu cu:
Dng ch trong Label s cun t di ln.

Khi Click vo nt

th dng cun.
Khi ni dung cun ht th t li Label v v tr cun ban u.

th thc hin cun, cn khi click vo nt

Bi 14 : Yu cu nh bi 13 nhng tc cun (Khong Interval ca iu khin


Timer) c th thay i trc quan bng thanh iu chnh tc (Vscrollbar).

Hnh 2.14 - iu chnh tc bng thanh Vscroll.


Bi 15 - S dng Label, kt hp vi Line gi lp nt nhn (Command button).

Khi chut di chuyn ngoi nt

Khi chut di chuyn bn trong nt

Hnh 2.15 - Gi lp nt nhn bng iu khin Label v Line


Yu cu: To mt nt nhn THOT ch s dng Label v Line. :
Khi ngi dng click vo nt ny th thot khi chng trnh

Trang 44

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Di chuyn chut vo Label th Font ch i thnh M, mu ch trng-nn


en v ng thng (bn tri v trn chuyn thnh mu EN).
Khi di chuyn ra khi Label (hay di chuyn chut trong form) th t li v cc
thuc tnh ban u.

Bi 16: Minh ho s dng iu khin Timer to hiu ng ch chy.

Hnh 2.16 - S dng Timer to hiu ng ch chy trn thanh Tiu


Yu cu: Dng ch Trng i hc S phm K thut Hng Yn Khoa Cng
ngh thng tin lin tc chy trn thanh tiu cho n khi ngi dng click nt
Dng. Tc cun l 100 miligiy !. (Interval = 100).
Bi 17: S dng Timer, vit chng trnh ng h bo thc.
Xy dng chng trnh chi mt file nhc (WAV, MP3) ti mt thi im nh.
Trong , thi gian ch nh (gm gi : pht) c th thay i v tn file nhc cng c
th thay i.

Hnh 2.17 Giao din chng trnh ng h bo thc


Bi 18: S dng iu khin Timer kt hp vi iu khin Line v ng h
Digital trn form. (ng h ny ch cn c mt kim giy).

Hnh 2.18 - ng h in t
Trang 45

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 19: S dng iu khin Timer ghi nhn cc phm nhn KeyLogger


a. Giao din

Hnh 2.19 -Giao din chng trnh bt phm t cc ng dng khc- KeyLogger
b. Yu cu

Ghi nhn phm nhn bt k ng dng no trong h thng.

Khi ngi dng click chn nt Kt thc th lu cc phm nhn ghi nhn
c vo trong tp vn bn C:\Keys.txt

Bi 20: Minh ho s dng cc iu khin thao tc Tp, Th mc v a.


a. Giao din chng trnh:

Hnh 2.20 Giao din chng trnh v kt qa khi click "Xem kch thc file"
b. Yu cu:

M file hin hnh (ang c chn) khi ngi dng click nt "M file ny" hoc
Click p mt file.
Xem kch thc file ang c chn khi chn nt Xem kch thc file
Xo file ang c chn (cn hi ngi dng xc nhn li trc khi xo).
Thot khi chng trnh khi ngi dng click nt "Thot"
Trang 46

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 21: Minh ho kh nng ko th (Drag-Drop) file v th mc.


a. Giao din

Hnh 2.21 Thao tc vi tp, th mc bng Drag-Drop (Ko - th)


b. Yu cu:
Nh bi 20 nhng thm kh nng Ko-Th (Drag-Drop): Khi ngi dng ko mt
tp v th vo nt M th m tp . Cn khi ngi dng ko tp vo nt Xem
kch thc file th thng bo kch thc file bng hm MsgBox. Khi ngi dng ko
v th vo nt "Xo file ny" th thc hin Xo file ang c chn.
Bi 22: Thao tc vi iu khin FileListbox v kh nng a la chn.
a. Giao din chng trnh

Hnh 2.22 - Chn nhiu file trong FileListbox


b. Yu cu:
Cho php chn nhiu file trong iu khin FileListbox

Khi click vo nt
th thc hin chn ng dn v tn file ca nhng file
ang c chn vo trong Listbox pha bn phi. Sau hin th tng s file
v tng kch thc ca cc file c trong Listbox.

Trang 47

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 23: S dng iu khin Image lm nh nn cho form.


a. Giao din chng trnh

Hnh 2.23 - t nh nn cho Form bng iu khin Image


b. Yu cu:
Khi ngi dng Click nt Chn file nh cho Form th m hp thoi chn file
v np file vo iu khin Image.

Khi ngi dng Click nt Hu b nh nn th hu nh trong iu khin Image

Bi 24:S dng iu khin PictureBox to Icon ti khay h thng (SystemTray)


a. Giao din

(Picture1)
Hnh 2.24 - (Hin menu khi click chut phi)
b. Yu cu

t mt biu tng (bt k) di khay h thng nh hnh 24

Khi ngi dng click chut phi ln biu tng trn khay h thng th hin th
(Popup) menu nh hnh 24.

Khi ngi dng click chn mc "About" th hin th mt thng bo.

Khi ngi dng click chn mc Exit th thot khi chng trnh.

Form phi c n (Hide).

Yu cu thm: C th to biu tng nhp nhy (thay i lin tc biu tng)


di khay h thng. (HD: Dng mt timer)

Trang 48

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

B- HNG DN - GII MU
Bi 1
a. Thit k giao din v thit lp cc thuc tnh cho cc iu khin (Lu : T nay v
sau, tn ca cc iu khin c vit ngay cnh iu khin . Ring vi iu
khin Label no m khng thc s cn thit th tn c th mc nh - b qua)

Hnh 2.25 - t tn cho cc iu khin trn Form


b. Hng dn

ly gi tr ngi dng nhp trong Textbox, c th truy cp thuc tnh Text,


v d: txtA.Text ly gi tr ngi dng nhp trong hp Textbox h s a.
C th s dng cu trc IfThen nhng vi VB th cu trc Select Case l
ph hp hn c.

c. Chng trnh mu:


Private Sub cmdThucHien_Click()
Dim Delta As Single
Delta = txtB.Text * txtB.Text - 4 * txtA.Text * txtC.Text
Select Case Delta
Case Is < 0
MsgBox "Phng trnh v nghim"
Case 0
lblX1.Caption = "X1 = " & (-txtB.Text / 2 / txtA.Text)
lblX2.Caption = "X2 = " & (-txtB.Text / 2 / txtA.Text)
Case Is > 0
lblX1.Caption = "X1 = " & ((-txtB.Text + Sqr(Delta)) / 2 / txtA.Text)
lblX2.Caption = "X2 = " & ((-txtB.Text - Sqr(Delta)) / 2 / txtA.Text)
End Select
End Sub

d. Ghi ch:

Trong cu trc Select Case, nu mun thc hin mt cng vic ng vi biu
thc cn kim tra nm trong mt min gi tr th c th s dng t kho "IS"

Cu trc Select Case <K> khng ch lm vic vi biu thc <K> dng s
m cn c dng xu k t (nhiu ngn ng khc khng c kh nng ny).

Trang 49

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Gi tr trong textbox lun c VB coi l mt XU. Tuy nhin, nu cc gi tr


trong Textbox tham gia vo cc php tnh +,-, *, /, vi mt s khc th xu t
ng c chuyn thnh s theo ngm nh. Do vy, chng ta khng nht
thit phi chuyn i chng tng minh bng hm Val. Trong trng hp,
nu php ton l + (Cng) m 2 ton hng tham gia u l cc Textbox th bt
buc phi chuyn i chng v s bng hm Val trc khi cng.

Bi 2:
a. Giao din v thit lp tham s cho cc iu khin: Tn ca cc iu khin c
t nh trong hnh 26. Trong c mt iu khin chuyn dng cho nhp ngy
thng rt thun tin l Date Time Picker (nm trong th vin : Microsoft Windows
Common Control-2 6.0)

Hnh 2.26 t tn cho cc iu khin trn Form


b. Hng dn
Trong VB, tt c cc iu khin u nm trong mt tp hp (Collection) l Controls.
Ta c th duyt tt c cc iu khin trong tp hp ny bng cu trc lp
"For.Eachin Controls", ti mi vng lp ta c th kim tra xem iu khin hin ti
thuc loi no ?. Nu l iu khin Textbox hay ComboBox th t thuc tnh Text
bng rng (tc l xo).
c. Chng trnh ngun
Vit lnh cho s kin Click ca nt nhn cmdXoa
Private Sub cmdXoa_Click()
Dim obj As Object
For Each obj In Me.Controls
Trang 50

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

If (TypeOf obj Is TextBox) Or (TypeOf obj Is ComboBox) Then


obj.Text = ""
End If
Next
End Sub
d. Ghi ch:

duyt tt c cc phn t trong mt tp hp th bt buc phi dng cu trc


For Each
kim tra xem mt i tng X no thuc loi iu khin no, c th
dng t kho TypeOf X IsTextBox, ListBox, ComboBox, CheckBox, Frame,
Label, Form, adodc,..
Khi bin chy X ang tr n mt loi iu khin no th c th s dng tt
c cc thuc tnh, phng thc ca i tng thng qua bin chy X. V d
nu TypeOf X is ListBox l ng (True) th ta c th truy cp n thuc tnh
Text v name ca Listbox bng cch vit X.Text, X.Name hay c th truy cp
n phng thc AddItem bng cch vit X.AddItem .
Vic duyt cc phn t trong mt tp hp rt hay c s dng v hu ch,
do vy chng ta cn s dng tt cu trc duyt ny.
Vic xo trng cc Textbox, ComboBox theo cch trn khng phc thuc vo
s lng v tn ca cc phn t trong Form, do vy khng phi sa i
chng trnh ngun khi thay i cc phn t trn form.

Bi 3
a. Giao din v thit lp thng s cho cc iu khin.

Hnh 2.27 - t tn cho cc iu khin.


b. Hng dn: S dng phng thc AddItem thm v phng thc
RemoveItem loi b mt mc khi danh sch. Ngoi ra cn c th dng thuc
tnh ListIndex ly v ch s ca phn t ang c chn.
c. Chng trnh ngun
Form1.frm
Private Sub cmdThem_Click()
lstDanhSach.AddItem txtHoTen.Text, 0
'/// 0 = Thm vo u danh sch
End Sub
'----------------------------------------------------------------------------------------------------------------------------Private Sub cmdXoa_Click()
If lstDanhSach.ListIndex < 0 Then
lstDanhSach.RemoveItem lstDanhSach.ListIndex

Trang 51

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Else
MsgBox "Bn phi chn mt mc trc khi xo !"
End If
End Sub
Private Sub cmdThoat_Click()
End
End Sub

d. Ghi ch:

Trong iu khin Listbox, mc u tin c ch s l 0. Mc cui cng c ch s


l ListCount 1.
Thuc tnh Text cho ta gi tr ca phn t hin hnh (ang c chn)
Thuc tnh List(i) s cho ta gi tr ca phn t c ch s l i
Mc nh phng thc AddItem ca iu khin Listbox thm mc mi vo
cui danh sch, do vy nu mun thm vo u danh sch th cn truyn gi
tr 0 (v tr u tin) vo phng thc AddItem.
Phng thc RemoveItem dng loi b 1 mc khi danh sch. Phn t
hin ang c chn c ch s l ListIndex.
Khi danh sch rng th thuc tnh ListCount = 0 v ListIndex = - 1
C th chn mt s mc vo trong Listbox hay ComboBox trong lc thit k
bng cch nhp vo thuc tnh "List" (Xem hnh 23). Ti y nu mun nhiu
mc th sau mi ln nhp, nhn t hp phm Ctrl+Enter:

Hnh 2.28 - Nhp liu cho Listbox trong lc thit k (Nhn Ctrl-Enter xung dng)

Bi 4
a. Thit k giao din v thit lp thng s cho cc iu khin trn Form

Hnh 2.29 - t tn v thuc tnh cho cc iu khin trn Form


Trang 52

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

b. Hng dn: S dng thuc tnh Selected(i) kim tra liu mc ch s i c c


chn (Check) hay khng. Nu c th gi phng thc RemoveItem xa. Lu
rng, khi xo i th s phn t trong danh sch s b thay i, do vy khng nn s
dng vng lp For m nn s dng vng lp Do While. ng thi khi duyt th nn
duyt t cui danh sch (t phn t c ch s ln nht l ListCount 1).
c. Chng trnh ngun.
Option Explicit
Private Sub cmdThem_Click()
lstDanhSach.AddItem txtHoTen.Text, 0
End Sub
'-----------------------------------------------------------------------------------------------------------------------------

Private Sub cmdXoa_Click()


Dim i As Integer
i = lstDanhSach.ListCount 1
'/// Bt u duyt t phn t cui cng
Do While i >= 0
If lstDanhSach.Selected(i) = True Then lstDanhSach.RemoveItem i
i=i-1
Loop
End Sub
'-----------------------------------------------------------------------------------------------------------------------------

Private Sub cmdThoat_Click()


End
End Sub
c. Ch : Vi cu trc IfThen, nu sau Then ch c mt lnh th c th vit cu
lnh cng dng vi lnh IfThen m khng cn phi c lnh kt thc End If.
Bi 5
a. Giao din v thit lp thuc tnh cho cc iu khin trn Form

Hnh 2.30 - t thuc tnh cho cc iu khin


b. Hng dn: S dng vng lp v kim tra tng mc xem c c chn hay
khng, nu c chn th thm vo danh sch lstNguoiNhan. y v ni dung
trong lstDanhSach khng b thay i nn c th s dng bt k cu trc lp no.

Trang 53

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

c. Chng trnh ngun


Option Explicit
Private Sub cmdCC_Click()
Dim i As Integer
For i = 0 To lstDanhSach.ListCount - 1
If lstDanhSach.Selected(i) = True Then '/// Nu mc i c chn th thm.
lstNguoiNhan.AddItem lstDanhSach.List(i)
End If
Next
End Sub
'----------------------------------------------------------------------------------------------------------------------------Private Sub cmdXoa_Click()
If lstNguoiNhan.ListIndex >= 0 Then
lstNguoiNhan.RemoveItem lstNguoiNhan.ListIndex
End If
End Sub

d. Ghi ch:

lstDanhSach.List(i) : ly ni dung ca mc i trong lstDanhSach


If lstNguoiNhan.ListIndex >= 0 Then m bo ch xo khi mt mc c chn

Khi t thuc tnh MultiSelect l 2 Extended th ngi dng c th chn


nhiu mc lin hoc ri nhau ca ListBox bng chut v bn phm.

Bi 6
a. Giao din v t thuc tnh cho cc iu khin trn Form

Hnh 2.31 Giao din v t tn cho iu khin


b. Hng dn C rt nhiu phng php a phn tn ln trc h m, tuy
nhin trong bi ny xin gii thiu mt cch khc thng qua hm x l xu k t
SPLIT. Vic tch Tn ln trc ca mt xu S c th m t nh v d sau:
"Nguyen Van An"

Xu vo cn o tn

Nguyen Van

An

An

Nguyen Van

Mng
Trang 54

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

- Trc tin xu vo s c phn tch v ly tng t bn trong n nh hm Split


- Tip theo l o phn t cui cng trong mng ln u danh sch.
c. Chng trnh ngun
Option Explicit
Function DaoTen(HoTen As String) As String
Dim i As Integer, KetQua As String
Dim S
KetQua = ""
S = Split(HoTen, Chr(32))
KetQua = S(UBound(S))
For i = 0 To UBound(S) - 1
KetQua = KetQua & Chr(32) & S(i)
Next
DaoTen = KetQua
End Function

'/// Chr(32) l k t trng

'-----------------------------------------------------------------------------------------------------------------------------

Private Sub cmdDao_Click()


Dim i As Integer
lstMoi.Clear
For i = 0 To lstNguoiDung.ListCount - 1
lstMoi.AddItem DaoTen(lstNguoiDung.List(i))
Next
End Sub
Bi 7
a. t thuc tnh cho cc iu khin trn form

Hnh 2.32 Giao din v t tn cho cc iu khin


b. Hng dn
Khi mt xu cha nhiu phn t c cch nhau bi mt k t hay mt xu con
khc, ta c th d dng tch chng ra thnh cc phn t ring bit nh hm Split
trong VB. C php ca hm Split nh sau: Split (Xu cn tch S, Xu phn cch cc
phn t trong S). Kt qu tr v ca hm l mt mng. lu mng ny, ta cn s
dng mt bin kiu Variant nh trong chng trnh mu sau y.
Trang 55

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

c.Chng trnh mu
Option Explicit
'// Vit lnh cho th tc s kin click chut ln nt Tch

Private Sub cmdTach_Click()


Dim i As Integer, S As Variant
S = Split(txtDiaChi.Text, ";")

'/// Tch xu trong Textbox c ngn cch bi ";"

lstKetQua.Clear

'/// Xo Listbox lu kt qu

For i = 0 To UBound(S)
lstKetQua.AddItem S(i)
Next

'/// Chn cc phn t trong mng S vo Listbox

End Sub

d. Ghi ch:

Xu phn cch (Tham s th 2 ca hm Split) khng nht thit l 1 k t m


c th l mt xu ln hn 1 k t.

Hm Ubound(S) tr v s phn t hin c trong mng S.

Trong thc t cn phi x l thm khi nhn cc kt qu t vic tch xu S.


Chng hn nh c th ngi dng g du cch sau du chm phy hoc c 2
du chm phy lin nhau v.v th khi cn phi ct cc du trng bng hm
TRIM trc, sau kim tra xem khng rng th mi nhn kt qu.

Bi 8.
a. Giao din v t tn cho cc iu khin trn form

Hnh 2.33 Giao din chng trnh v t tn cho cc iu khin


b. Hng dn
Theo mc nh, VB so snh hai chui k t t tri qua phi - tc l sp xp H sau
mi n tn- do vy sp xp theo th t u tin Tn trc th cn phi ct
phn tn v ghp ln u. Vic ct tn c rt nhiu cch, nhng y ta hon ton
c th p dng hm Split nh trong cc bi tp trc y. cho thun tin, y
ta xy dng mt hm DaoTen, c nhim v o phn "Tn" ln trc H.
Trang 56

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

c. Chng trnh mu
Option Explicit
'/// Hm ny c chc nng ct phn tn ( cui) a ln u (tn ln trc h)

Function DaoTen(HoTen As String) As String


Dim S As Variant, i As Integer, KetQua As String
S = Split(HoTen, Chr(32))
KetQua = S(UBound(S))

'///Ly phn t cui Tn

For i = 0 To UBound(S) 1
KetQua = KetQua & Chr(32) & S(i)
Next

'/// Ghp thm phn "H" v "m"

'/// Tr kt qu v cho hm
DaoTen = KetQua
End Function
'----------------------------------------------------------------------------------------------------------------------------'///Thc hin sp xp danh sch trong lstDSSV_SapXep khi ngi dng click "Sp xp theo TN"

Private Sub cmdSapXep_Click()


Dim i As Integer, j As Integer, TG As String
lstDSSV_SapXep.Clear
'/// Copy cc mc trong lstDSSV sang listbox l stDSSV_SapXep

For i = 0 To lstDSSV.ListCount - 1
lstDSSV_SapXep.AddItem Trim(lstDSSV.List(i))
Next
'/// Thc hin sp xp danh sch trong lstDSSV_SapXep s dng hm DaoXau.

For i = 0 To lstDSSV_SapXep.ListCount - 2
For j = i + 1 To lstDSSV_SapXep.ListCount - 1
If DaoTen(lstDSSV_SapXep.List(i)) > DaoTen(lstDSSV_SapXep.List(j)) Then

TG = lstDSSV_SapXep.List(i)
lstDSSV_SapXep.List(i) = lstDSSV_SapXep.List(j)
lstDSSV_SapXep.List(j) = TG
End If
Next
Next
End Sub

d. Ghi ch:

Gii thut trn ch thc hin sp xp ng i vi Ting vit khng du.


Mun vic sp xp trn ng n c vi Ting vit c du th cn m ho li
cc k t c du thnh cc k t khng du, sau khi sp xp xong th li gii
m ngc li. V d: ch , , , , th c th m ho tng ng thnh: aa,
ab, ac, ad, ae, af. Vic m ho hay gii m thc cht l vic thay th k t, do
vy ta c th thc hin ht sc n gin bng hm Replace trong VB.

Gii thut ny c th p dng rt tt trong vic sp xp Ting vit trong mi


trng Word v c bit l trong MS Excel.
Trang 57

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 9
a. Giao din v t tn cho cc iu khin trn Form

Hnh 2.34 Giao din v t tn cho cc iu khin


b. Hng dn

iu khin Web Browser cho php chng ta c th hin th cc trang Web


ging nh trong Internet Explorer hay hin th ni dung ca mt th mc, mt
a ging nh Window Explorer hay My Computer.

iu khin ny nm trong th vin:

C th s dng phng thc Navigate2 ca iu khin Microsoft Internet


Control m mt th mc hay mt trang Web.

c. Chng trnh mu
Option Explicit
'///Nu ngi dng chn a ch trong danh sch th m trang

Private Sub cboDiaChi_Click()


webChinh.Navigate2 cboDiaChi.Text
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Nu ngi dng nhp mi sau nhn Enter th cng m

Private Sub cboDiaChi_KeyUp(KeyCode As Integer, Shift As Integer)


If KeyCode = 13 Then
cboDiaChi.AddItem cboDiaChi.Text, 0
webChinh.Navigate2 cboDiaChi.Text

'/// Thm mc mi vo.

End If
End Sub
d. Ghi ch:

M ASCII ca phm Enter l 13.

iu khin ny c th kt hp vi i tng "HTML Microsoft Object Library"


(Vo trong Project
References) truy cp v thao tc trc tip n cc
thnh phn bn trong mt trang WEB bng m lnh Visual Basic. C th truy
cp trang Web http://www.w3schools.com bit thm v m hnh truy cp
DOM (Document Object Model).
Trang 58

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 10
a. Giao din v t tn cho cc iu khin trn form

Hnh 35 Giao din chng trnh


b. Hng dn: S dng cc thuc tnh FontCount v Fonts ca i tng Screen
ly tn cc font ch hin c trong h thng.
c. Chng trnh mu
Option Explicit
'/// t c ch cho ni dung trong txtVanBan

Private Sub cboCoChu_Click()


txtVanBan.FontSize = cboCoChu.Text
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// t font ch cho txtVanBan theo nh la chn ca ngi dng

Private Sub cboFontChu_Click()


txtVanBan.FontName = cboFontChu.Text
End Sub
'----------------------------------------------------------------------------------------------------------------------------'//////////// Chng trnh mu //////////////

Private Sub Form_Load()


Dim i As Integer
'/// Chn tn cc font vo trong ListBox

For i = 0 To Screen.FontCount - 1
cboFontChu.AddItem Screen.Fonts(i)
Next
'----------------------------------------------------------------------------------------------------------------------------'/// Chn mt s gi tr vo trong cboCoChu

For i = 8 To 100 Step 2


cboCoChu.AddItem i
Next
End Sub

d. Ghi ch:

Mun hin th mc no trn ComboBox th c th vit:


<TnCombo>.ListIndex=<V tr mc mun hin th>. v d:
cboFontChu.ListIndex=1. Tuy nhin trnh li cn kim tra mc c tn ti?

Trang 59

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Mun hin th hp TextBox c nhiu dng, thanh cun th cn t li cc thuc


tnh nh MultiLine
True, ScrollBars
3 - Boths

Bi 11
a. Giao din v t tn cho cc iu khin

Hnh 2.36 Giao din v t tn cho cc iu khin


b. Hng dn
Vic LogOff, Restart, Shutdown c th thc hin thng qua hm API ExitWindows
hay ExitWindowsEx, tuy nhin vi cc h iu hnh thuc dng Windows NT, 2K, XP
th cn phi thc hin thm mt s cng vic khc lin quan n xc lp quyn (Vi
Window 95, 98, Me th khng cn). Do vy, y cng gii thiu cch thc
chng ta nhn bit c h iu hnh hin ti thuc loi no (9x hay Win2K, XP)
c. Chng trnh mu (Trong phn ny, bn cn to mt form v mt Module)
G on lnh sau trong Module
Module1.bas
Option Explicit
'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'/// on code ny c ly t trang http://www.allapi.net
'////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Private Const EWX_LOGOFF = 0
Private Const EWX_SHUTDOWN = 1
Private Const EWX_REBOOT = 2
Private Const EWX_FORCE = 4
Private Const TOKEN_ADJUST_PRIVILEGES = &H20
Private Const TOKEN_QUERY = &H8
Private Const SE_PRIVILEGE_ENABLED = &H2
Private Const ANYSIZE_ARRAY = 1
Private Const VER_PLATFORM_WIN32_NT = 2
Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Type LUID
LowPart As Long
HighPart As Long
End Type

Trang 60

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type
Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
'/// Cc hm ny xin copy t API TextViewer i cng vi b Visual Studio 6.0
Private Declare Function GetCurrentProcess..
Private Declare Function OpenProcessToken
Private Declare Function LookupPrivilegeValue .
Private Declare Function AdjustTokenPrivileges
Private Declare Function ExitWindowsEx
Private Declare Function GetVersionEx ..
'///Kim tra xem h iu hnh ang chy c phi thuc dng Windows NT hay khng ?
Public Function IsWinNT() As Boolean
Dim myOS As OSVERSIONINFO
myOS.dwOSVersionInfoSize = Len(myOS)
GetVersionEx myOS
IsWinNT = (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT)
End Function

'----------------------------------------------------------------------------------------------------------------------------'/// t quyn Shutdown cho ng dng


Private Sub EnableShutDown()
Dim hProc As Long
Dim hToken As Long
Dim mLUID As LUID
Dim mPriv As TOKEN_PRIVILEGES
Dim mNewPriv As TOKEN_PRIVILEGES
hProc = GetCurrentProcess()
OpenProcessToken hProc, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken
LookupPrivilegeValue "", "SeShutdownPrivilege", mLUID
mPriv.PrivilegeCount = 1
mPriv.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
mPriv.Privileges(0).pLuid = mLUID
'/// Cho php ng dng hin hnh Shutdown my tnh
AdjustTokenPrivileges hToken, False, mPriv, 4 + (12 * mPriv.PrivilegeCount), mNewPriv, 4 + (12 *
mNewPriv.PrivilegeCount)
End Sub
'//// Shut Down my tnh
Public Sub ShutDownNT(Force As Boolean)
Dim Ret As Long
Dim Flags As Long
Flags = EWX_SHUTDOWN
If Force Then Flags = Flags + EWX_FORCE
If IsWinNT Then EnableShutDown
ExitWindowsEx Flags, 0
End Sub
'/// Khi ng li my tnh
Public Sub RebootNT(Force As Boolean)
Dim Ret As Long
Dim Flags As Long
Flags = EWX_REBOOT
If Force Then Flags = Flags + EWX_FORCE
If IsWinNT Then EnableShutDown
ExitWindowsEx Flags, 0

Trang 61

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

End Sub

'----------------------------------------------------------------------------------------------------------------------------'/// Log off khi h thng


Public Sub LogOffNT(Force As Boolean)
Dim Ret As Long
Dim Flags As Long
Flags = EWX_LOGOFF
If Force Then Flags = Flags + EWX_FORCE
ExitWindowsEx Flags, 0
End Sub

Form.frm
Private Sub cmdThucHien_Click()
If optLogoff.Value = True Then LogOffNT optFore.Value
If optRestart.Value = True Then RebootNT optFore.Value
If optShutdown.Value = True Then ShutDownNT optFore.Value
End Sub
d. Ghi ch:

Phn khai bo cc hm API (Application Programming Interface Giao din


lp trnh ng dng) trn xin bn c g y phn khai bo ca tng hm
(C th m tin ch API Text Viewer trong : Start->Programs-> Visual Studio
6.0-> Microsoft Visual Studio 6.0 Tools -> API Text Viewer, sau g hm
cn tham chiu v copy & paste vo trong VB).

Mun to ra nhiu nhm la chn ( trn l 2 nhm) th mi nhm cn t


trong mt Frame.

Bi 12
a. Thit k giao din

Hnh 2.37 - t thuc tnh cho cc iu khin Label v Form


b. Hng dn

Trc ht, b thanh tiu ca Form cn t 2 thuc tnh nh sau: Thuc


tnh Caption trng (xo i), thuc tnh th hai l ControlBox = False
Trang 62

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Sau , trong s kin di chuyn nhn (label) ta s dng hm ReleaseCapture


gii phng cc s kin chut khi s theo di (Capture) ca Form v thay
vo l gi mt thng ip (Message) n cho Form rng : "Ngi dng
ang di chuyn thanh tiu ", nh th Form s di chuyn khi ngi dng
click v di chut trn Label.

c. Chng trnh mu
'/// Khai bo hm API
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As
Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Sub ReleaseCapture Lib "user32" ()
Const WM_NCLBUTTONDOWN = &HA1
Const HTCAPTION = 2

'----------------------------------------------------------------------------------------------------------------------------'/// Khi ngi dng click v di chut trn Label th "bo" vi Form l "Ngi dng an di chuyn
'/// thanh tiu " Form c di chuyn.
Private Sub lblTitle_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lngReturnValue As Long
Call ReleaseCapture

'/// Khng cho Form nhn (X l) s kin Click chut

lngReturnValue = SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)


End Sub

'----------------------------------------------------------------------------------------------------------------------------'/// Thot khi chng trnh khi ngi dng click vo nt thot
Private Sub cmdThoat_Click()
End
End Sub

'----------------------------------------------------------------------------------------------------------------------------'/// Thot khi chng trnh khi ngi dng click vo nt trn Form
Private Sub cmdClose_Click()
End
End Sub

d. Ghi ch:

Hm SendMessage c chc nng gi mt thng ip -Message (c th coi l


mt lnh) n mt i tng no trong mt ng dng (nh Command,
textbox, listbox, Form, label v.v). Cc i tng ny c i din bi mt
s hiu Handle duy nht (c sch cn gi l "th", "cn" ). S hiu ny
do Window qun l v thng c lu trong thuc tnh c tn l HWND. V
d, handle ca Command1 v Form1 ln lt l Command1.HWND,
Form1.HWND. Cc tham s tip theo ca hm SendMessage l cc tham s
c t cho bit l lnh thc hin trn i tng l lnh g (tham s th 2 v
th 3) v mc nh th no (nm trong tham s th 4). Hm SendMessage
rt thng c s dng khi lp trnh mc thp v rt hu ch trong mt s
trng hp. do vy, cn phi nm v vn dng tt hm ny.

Vic thay i tiu chun bng mt Label gip cho ng dng c th t Font
ch theo nh mun m khng b l thuc vo font h thng mc nh. Tuy
nhin c mt s hn ch l : Khi Form c h thng menu bar v thanh cng
c (Toolbar) v.v th vic thay th ny khng cn ngha v vic hin th khi
s b sai lch. Ni chung, ch nn thay th khi Form ng dng n gin,
cn i vi nhng form phc tp th nn s dng cc k thut khc.
Trang 63

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 13
a. Thit k giao din

Hnh 2.38 - t tn v thit lp thuc tnh cho cc iu khin


b. Hng dn
y, vic "cun" dng vn bn cha trong Label thc cht l vic di chuyn lin
tc Label ln pha trn sau mi khong thi gian nht nh (v d 50 ms). Tuy nhin,
cho vic cun vn bn ch nm trong mt khung nht nh th cn phi t trong
mt Frame. Vic dng hay tip tc cng nh tc di chuyn c iu khin bi
cc nt lnh "Bt u" v "Dng cun". Mun dng cun th n gin ch vic t
thuc tnh Enable ca Timer thnh False, cn mun tip tc th t thnh True.
c. Chng trnh mu
Option Explicit
Private Sub Form_Load()
'/// Lu mt s ni dung trong Label cun

lblMain.Caption = "Khoa Cng ngh thng tin - i hc s phm K thut Hng Yn. "
lblMain.Caption = lblMain.Caption & "Bi tp mn Lp trnh Hng s kin vi VB"
lblMain.Caption = lblMain.Caption & "Hng dn s dng Label kt hp vi iu khin Frame "
lblMain.Caption = lblMain.Caption & " v iu khin Timer. Hy click vo nt "
lblMain.Caption = lblMain.Caption & "Bt u v Dng cun v quan st !. "
lblMain.Caption = lblMain.Caption & vbCrLf & "C th thay i tc cun bng cch t li "
lblMain.Caption = lblMain.Caption & "thuc tnh Interval. Gi tr ny cng nh th tc cun cng nhanh."
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// C sau 50 miligiy th cun Label ln trn 5 twips. Trong khi cun cn kim tra v t li v tr ca Label

Private Sub tmr50ms_Timer()


lblMain.Top = lblMain.Top - 5
If lblMain.Top + lblMain.Height <= fraMain.Top Then lblMain.Top = fraMain.Top + fraMain.Height
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Mun thc hin cun, ch cn bt timer ln (t thuc tnh Enable = True)

Private Sub cmdBatDau_Click()


tmr50ms.Enabled = True
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Mun thc hin cun, ch cn bt timer ln (t thuc tnh Enable = True)

Private Sub cmdDungCuon_Click()


tmr50ms.Enabled = False
End Sub

Trang 64

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

d. Ghi ch:

C th lm n thanh Frame i bng cch t thuc tnh BorderStyle = 0, khi


chng trnh trng s p hn.
Khi to nhn th phi v nhn trong Frame (to frame trc).
Mu nn ca Label trn ch t cho d quan st, cn thc t th nn
mu mc nh.

Bi 14
a. Thit k giao din

Hnh 2.39 - t tn v thuc tnh cho cc iu khin


b. Hng dn
Tng t nh bi 13, tuy nhin tc cun (ph thuc vo gi tr ca thuc tnh
Interval) c th thay i trc quan thng qua iu khin Vscrollbar.
c. Chng trnh mu
Option Explicit
Private Sub Form_Load()
'/// Lu mt s ni dung trong Label cun

lblMain.Caption = "Khoa Cng ngh thng tin - i hc s phm K thut Hng Yn. "
lblMain.Caption = lblMain.Caption & "Bi tp mn Lp trnh Hng s kin vi VB"
lblMain.Caption = lblMain.Caption & "Hng dn s dng Label kt hp vi iu khin Frame "
lblMain.Caption = lblMain.Caption & " v iu khin Timer. Hy click vo nt "
lblMain.Caption = lblMain.Caption & "Bt u v Dng cun v quan st !. "
lblMain.Caption = lblMain.Caption & vbCrLf & "C th thay i tc cun bng cch t li "
lblMain.Caption = lblMain.Caption & "thuc tnh Interval. Gi tr ny cng nh th tc cun cng nhanh."
'///t mt s thuc tnh cho VscollBar. (Th tc s kin Change s c kch hot sau cc lnh ny)

vsbMain.Min = 5
vsbMain.Max = 200
vsbMain.SmallChange = 1
vsbMain.LargeChange = 5
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Khi ngi dng thay i gi tr trn ScrollBar th gn tr li gi tr ny cho Timer.

Private Sub vsbMain_Change()


tmrMain.Interval = vsbMain.Value
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Thc hin di chuyn Label ln pha trn sau mi khong thi gian. Trong qu trnh di chuyn cn
'//// kim tra v tr ca Label xem c vt qu Frame khng ? Nu vt qu th t v v tr di Frame

Trang 65

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Private Sub tmrMain_Timer()


lblMain.Top = lblMain.Top 5
'/// Mi ln s di chuyn ln pha trn 5 Twips
If lblMain.Top + lblMain.Height <= fraMain.Top Then lblMain.Top = fraMain.Top + fraMain.Height
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Tip tc cun

Private Sub cmdBatDau_Click()


tmrMain.Enabled = True
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Dng cun

Private Sub cmdDungCuon_Click()


tmrMain.Enabled = False
End Sub

Bi 15
a. Thit k giao din (thm vo 1 Label v 4 ng thng Line vo form)

Hnh 2.40 - t tn cho cc iu khin


b. Hng dn

Khi chut di chuyn vo trong Label (s kin MouseMove) th t li thuc


tnh ca Label v 4 ng Line to hiu ng.
Khi chut di chuyn ra khi Label (cng c ngha l chut ang di chuyn
trong Form) th t cc thuc tnh v gi tr ban u.

c. Chng trnh mu
Option Explicit
'///Khi chut di chuyn trong form Chut di chuyn ra ngoi Label th t nh ban u
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

l3.BorderColor = &HFFFFFF
l4.BorderColor = &HFFFFFF
l1.BorderColor = 0
l2.BorderColor = 0
End Sub

'----------------------------------------------------------------------------------------------------------------------------'/// Khi chut di chuyn vo trong Label th t hiu ng cho cc ng L1, L2, L3, L4
Private Sub lblThoat_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

l3.BorderColor = 0
l4.BorderColor = 0
l1.BorderColor = &HFFFFFF
l2.BorderColor = &HFFFFFF
End Sub

'----------------------------------------------------------------------------------------------------------------------------'/// Khi click chut ln Label th thc hin thot


Private Sub lblThoat_Click()
End
End Sub

Trang 66

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

d. Ghi ch:

Khi v cc ng thng cn phi v cho st vi 4 mp ca Label


C th pht trin thay Label bng Image v vit c vi nhng s kin
MouseDown, MouseUp thay i nh ca nt v.v..

Bi 16
a. Thit k giao din

Hnh 2.41 - t tn cho cc iu khin


b. Hng dn: cho ch chy (cun), ta ch vic ct k t u tin ca xu v
chn vo cui sau mi khong thi gian nht nh. Khong thi gian ny cng nh
th tc cun cng nhanh.
c. Chng trnh mu (Vit trong Form code)
Private Sub Form_Load()
Me.Caption = "Trng HSPKT Hng Yn - Khoa Cng ngh thng tin.
tmrScroll.Interval = 100
'/// Sau mi 100 ms th kch hot mt ln
tmrScroll.Enabled = False
End Sub

"

'/// Ct k t u tin v chn vo cui mi khi th tc ny c gi

Private Sub tmrScroll_Timer()


Me.Caption = Mid(Me.Caption, 2) & Left(Me.Caption, 1)
End Sub
Private Sub cmdBatDau_Click()
tmrScroll.Enabled = True
End Sub
Private Sub cmdDung_Click()
tmrScroll.Enabled = False
End Sub

Bi 17
a. Thit k giao din (tn ca cc iu khin c vit ch m bn cnh)

Hnh 2.42 - t tn cho cc iu khin


Trang 67

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

b. Hng dn: S dng mt Timer lin tc ly gi hin ti trong my tnh v em


so snh vi gi - pht c hn bo thc. Nu thy bng nhau th thc hin chi
file nhc ch nh trong Textbox.
c. Chng trnh mu
'/// Khai bo hm API m mt file bt k

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal


hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters
As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
'----------------------------------------------------------------------------------------------------------------------------Private Sub Form_Load()
tmrBaoThuc.Interval = 100
'/// C sau 100 ms th thc hin kim tra 1 ln
'/// Chn mt s mc vo hp Combo Gi v Pht

Dim i As Integer
For i = 0 To 23
cboGio.AddItem i
Next
For i = 0 To 59
cboPhut.AddItem i
Next
End Sub
'----------------------------------------------------------------------------------------------------------------------------Private Sub tmrBaoThuc_Timer()
Dim T As Date
T = Now '/// Ly gi hin ti ca h thng v so snh. Nu bng th m file nhc
If (Hour(T) = cboGio.Text) And (Minute(T) = cboPhut.Text) Then
ShellExecute Me.hwnd, "open", txtTenFile.Text, vbNullString, "C:\", 1 '/// M file
tmrBaoThuc.Enabled = False
End If
'/// Thng tin v gi, pht hin ti hin th trn thanh tiu

Me.Caption= "By gi l: " & Hour(T) & "h:" & Minute(T) & "':" & Second(T) & "''"
End Sub
'----------------------------------------------------------------------------------------------------------------------------Private Sub cmdDongY_Click()
tmrBaoThuc.Enabled = True
End Sub

d. Ghi ch:

Hm ShellExecute rt hay c dng m mt file bt k trong ng dng


c h tr file . V d: khi ShellExecute mt file c ui l .doc th hm ny
s gi MS Word m file ny.

Hm Now lun tr v ngy, thng, nm v gi, pht, giy hin ti trong my


tnh. Cn trch ring cc thnh phn ra th cn phi cc hm x l tng
ng l Year, Month, Hour, Minute .

Nn s dng iu khin Timer Check (kim tra) gi ca h thng sau


thc hin cc cng vic cn thit. Khng nn s dng n vo mc ch m
gi, v ng h ny s thng xuyn b "chy chm" hn so vi my tnh.
Trang 68

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 18
a. Thit k giao din: Cn 4 Label, 1 Shape (Shape=3-circle), 1 timer v mt Line.

Hnh 2.43 - t tn v thuc tnh cho cc iu khin


b. Hng dn
Lin tc ly thi gian hin ti v cp nht v tr ca ng thng (Kim giy).
c. Chng trnh mu
Option Explicit
Dim BanKinh As Single, Goc As Single
Private Sub Form_Load()
With linKimGiay
BanKinh = Sqr((.X2 - .X1) ^ 2 + (.Y2 - .Y1) ^ 2)
End With
tmrCapNhatKimGiay.Enable = True
tmrCapNhatKimGiay.Interval = 10
End Sub
'-----------------------------------------------------------------------------------------------------------------------------

Private Sub tmrCapNhatKimGiay_Timer()


Goc = (Second(Now)) * 6 / 180 * 3.14 '/// i ra Radian
With linKimGiay
.X2 = .X1 + BanKinh * Sin(Goc)
.Y2 = .Y1 - BanKinh * Cos(Goc)
End With
End Sub
d. Ghi ch:

C th cho kim giy chy "mn" hn (nh ng h analog) th cn tnh ton li


v c tnh n Miligiy.

C th s dng t kho WithEnd with trnh phi nhc li tn i tng


khi truy cp vo cc thuc tnh ca n.

C th ci tin tr thnh chic ng h hon chnh vi 3 kim


Trang 69

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 19
a. Thit k giao din

Hnh 2.44 - t tn v thit lp cc thuc tnh cho cc iu khin


b. Hng dn
Hm API GetasyncKeyState(n) cho ta bit trng thi ca phm c m l n c c
nhn hay khng (d nhn bt k ng dng no), do vy ta c th s dng mt
Timer lin tc kim tra ton b cc phm v nu thy trng thi ca phm no c
nhn th ghi nhn li vo trong mt Textbox.
c. Chng trnh mu
Option Explicit
Private Declare Function GetasyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Dim PrevKey As String, i As Integer '///PrevKey lu trng thi ca phm nhn trc
Private Sub Form_Load()
tmrLogger.Interval = 10
tmrLogger.Enabled = False
End Sub

'/// C 10 ms li kim tra phm nhn 1 ln


'/// Khi ngi dng click "bt u" th mi bt phm

'/// Hm ny kim tra v ly v phm c nhn

Function GetPressedKey() As String


Dim i As Integer
For i = 32 To 128
'/// Kim tra tng phm xem c c nhn hay khng.

If GetasyncKeyState(i) <> 0 Then '/// Phm c m l i c nhn


GetPressedKey = Chr$(i)
'///Chuyn sang xu v gn cho hm
Exit For
End If
Next i
End Function
'----------------------------------------------------------------------------------------------------------------------------'/// Lin tc kim tra trng thi phm nhn, nu xut hin th lu vo Textbox

Private Sub tmrLogger_Timer()


Dim Key As String
Key = GetPressedKey
If Key <> PrevKey Then
txtKeys.Text = txtKeys.Text & Key
PrevKey = Key
End If
End Sub
'-----------------------------------------------------------------------------------------------------------------------------

Trang 70

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

'/// Bt u cho ng h chy theo di phm nhn

Private Sub cmdBatDau_Click()


tmrLogger.Enabled = True
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Kt thc : Ghi cc phm nhn lu trong Textbox vo file c:\Keys.txt

Private Sub cmdKetThuc_Click()


tmrLogger.Enabled = False
Dim F As Long
F = FreeFile
Open "c:\Keys.txt" For Output As #F
Print #F, txtKeys.Text
Close #F
MsgBox "Cc phm c lu trong tp c:\Keys.txt", vbInformation, "Saved"
End Sub

d. Ghi ch

C th bt c chut v bn phm mt cch hiu qu hn bng k thut Hook.


Tuy nhin y cng l mt cch n gin nht bt cc phm nhn trong
cc ng dng khc.

Cc phm nhn nhn v lun dng ch HOA d ta c bt Caplock hay k0?

Kt qu nhn c c th b sai mt s k t u tin nu nh khi chy ng


dng vn cn mt s k t trong b m.

Bi 20
a. Thit k giao din: cn 4 nt v

vi tn c t nh hnh sau y.

Hnh 2.45 - t tn cho cc iu khin


b. Hng dn

S dng hm FileLen ly kch thc file

Hm ShellExecute m file

Th tc Kill xo file

t li ng dn (Path) mi cho cc iu khin Dir v File mi khi Drive1 v


Dir1 tng ng thay i (trong s kin change).

Trang 71

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

c. Chng trnh mu
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal
hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters
As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
'----------------------------------------------------------------------------------------------------------------------------'/// Khi ni dung trong Drive1 thay i th cng thay i li ng dn trong Dir1

Private Sub Dir1_Change()


File1.Path = Dir1.Path
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Khi ni dung trong Dir1 thay i th cng thay i li ng dn trong File1

Private Sub Drive1_Change()


Dir1.Path = Drive1.Drive
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Xem kch thc ca file ang c chn

Private Sub cmdKichThuoc_Click()


On error Goto Err
MsgBox "Kch thc file l : " & FileLen(File1.Path & "\" & File1.FileName) & " bytes"
Exit Sub
Err:
Msgbox "Li xut hin ! m li l : " & Err.Number
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// M file ang c chn bng hm ShellExecute

Private Sub cmdMoFile_Click()


On error resume Next
ShellExecute Me.hwnd, "open", File1.Path & "\" & File1.FileName, vbNullString, "C:\", 1
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Thc hin xo file ang c chn

Private Sub cmdXoaFile_Click()


On error Goto Err
If MsgBox("Xo file """ & File1.FileName & """ ?", vbYesNo, "Confirm") = vbYes Then
Kill File1.Path & "\" & File1.FileName
File1.Refresh
'/// Cp nht li ni dung trong File1
End If
Exit Sub
'/// Cn phi c, nu khng lnh MsgBox di s c thc hin
Err:
Msgbox "C li xut hin. " & Err.Description
End Sub
'----------------------------------------------------------------------------------------------------------------------------Private Sub cmdThoat_Click()
End
End Sub

d. Ghi ch

Khi lm vic vo ra vi File, c th xut hin li. Do vy, m bo khng b


li runtime th cn phi bt li bng lnh On error goto v On error Resume

Lnh On error Goto <Nhn> th khi gp li, chng trnh s nhy n nhn
c ch nh trc. Cn i vi lnh On error Resume Next th chng trnh
vn c tip tc chy cu lnh tip theo, b qua cu lnh gy li.

Thuc tnh Path ca iu khin File ch tr v th mc cha file hin hnh,


cn thuc tnh FileName th tr v tn file nhng khng cha ng dn.
Trang 72

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 21
a. Thit k giao din (nh bi tp 20).
b. Hng dn: Np biu tng (icon) cho iu khin ngun thng qua thuc tnh
DragIcon. Tip theo vit lnh cho th tc s kin Drop ca iu khin ch. Vic ko
th thc s ch din ra khi gi phng thc Drag ca iu khin ngun (thng gi
trong th tc s kin MouseDown)
c. Chng trnh mu
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd
As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String,
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
'--------------------------------------------------------------------------------------------------------------------------'/// Th tc ny s c gi khi ngi dng th (drop) 1 file t iu khin File1
'/// Tham s Source lc ny chnh l iu khin File1, v nh vy ly tn file v ng
'/// dn m ngi dng va "th" th s dng thuc tnh Path v FileName nh i vi
'/// iu khin file

'--------------------------------------------------------------------------------------------------------------------------Private Sub cmdXoaFile_DragDrop(Source As Control, X As Single, Y As Single)


If MsgBox("Xo """ & Source.FileName & """ ?", vbYesNo, "Confirm") = vbYes Then
Kill Source.Path & "\" & Source.FileName '/// Kill l lnh xo file
Source.Refresh
'/// cp nht li s thay i va to ra i vi File1
End If
End Sub
'----------------------------------------------------------------------------------------------------------------------------Private Sub Dir1_Change()
File1.Path = Dir1.Path '/// Cc file hin th trong File1 by gi l Dir1.Path .
End Sub
'----------------------------------------------------------------------------------------------------------------------------Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive '/// Th mc hin th trong Dir1 by gi l a Drive1.Drive
End Sub
'----------------------------------------------------------------------------------------------------------------------------Private Sub Form_Load()
Dim F As String
F = "C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Office\folder03.ico"
File1.DragIcon = LoadPicture(F) '/// Np biu tng khi ko file trong File1

End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Thc hin ko th i vi file va c chn

Private Sub File1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)


File1.Drag
End Sub
'///-----------------------------------------------------------------------------------------------------------------------'/// M file va chn khi ngi dng th mt file vo nt cmdMoFile. Tham s Source by gi
'/// chnh l iu khin File1. Nn c th s dng thuc tnh Path v FileName !
'///-------------------------------------------------------------------------------------------------------------------------

Private Sub cmdMoFile_DragDrop(Source As Control, X As Single, Y As Single)


ShellExecute Me.hwnd, "open", Source.Path & "\" & Source.FileName, vbNullString, "C:\", 1

End Sub
'----------------------------------------------------------------------------------------------------------------------------Private Sub cmdMoFile_Click()
ShellExecute Me.hwnd, "open", File1.Path & "\" & File1.FileName, vbNullString, "C:\", 1
End Sub

Trang 73

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Private Sub cmdXoaFile_Click()


If MsgBox("Xo """ & File1.FileName & """ ?", vbYesNo, "Confirm") = vbYes Then
Kill File1.Path & "\" & File1.FileName
File1.Refresh
End If
End Sub
Private Sub cmdKichThuoc_DragDrop(Source As Control, X As Single, Y As Single)
On Error GoTo Err
MsgBox "Kch thc l : " &FileLen(Source.Path & "\" & Source.FileName) &" bytes"
Exit Sub
Err:
MsgBox "C li xut hin !"
End Sub
Private Sub cmdKichThuoc_Click()
On Error Resume Next
MsgBox "Kch thc l : " & FileLen(File1.Path & "\" & File1.FileName) & " bytes"
End Sub

d. Ghi ch
C th tham kho thm v Drag v Drop trong b tr gip MSDN vi topic
"Drag Method" v chn thm phn Sample.
Khi thao tc vi tp, th mc c nhiu trng hp xy ra li do vy cn phi
bt li vi pht biu "On error goto err" hoc "On error resume Next" (Xin
tham kho thm trong MSDN).
3 iu khin DriveListBox, DirListBox v FileListBox khng nht thit lc no
cng phi i cng vi nhau. Thc t nu mun hin th ni dung ca mt a
no trong iu khin DirListbox th ta ch vic gn tn a cho thuc tnh
Path, v d: Dir1.Path = "e:" th lp tc ni dung ca a E: s c hin th
trong DirListbox. Tuy nhin, v thuc tnh Drive ca iu khin DriveListbox tr
v tn a m ngi dng chn nn ta thng gn gi tr ny cho thuc tnh
Path ca DirListbox. Tng t vi iu khin FileListbox.
Khi s kin "Drop" ca i tng ch xut hin th tham s Source ca th
tc s kin s tr n (hay chnh l) iu khin ngun. Nn ta c th gi
cc thuc tnh v phng thc ca i tng ngun thng qua Source.
Bi 22
a. Thit k giao din nh hnh 46 (Tn ca cc iu khin c t trong trn)

Hnh 2.46 - t tn cho cc iu khin


Trang 74

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

b. Hng dn
V chng trnh cho php ngi dng la chn nhiu file (Multiselect) nn cn t
thuc tnh MultiSelect ca iu khin File l True. Sau tnh tng kch thc cc
file bng hm FileLen.
c. Chng trnh mu
Option Explicit
Private Sub cmdThem_Click()
Dim i As Integer, TongKichThuoc As Long
'/// Thm tn cc file ang c chn (Selected = true) vo danh sch

For i = 0 To File1.ListCount - 1
If File1.Selected(i) = True Then lstDanhSachFile.AddItem File1.Path & "\" & File1.List(i)
Next
'/// Tnh tng kch thc cc file cho vo danh sch (Listbox)

TongKichThuoc = 0
For i = 0 To lstDanhSachFile.ListCount - 1
TongKichThuoc = TongKichThuoc + FileLen(lstDanhSachFile.List(i))
Next
'/// hin th kt qu tnh ton ra Label

lblSL.Caption = "Tng s file : " & lstDanhSachFile.ListCount


lblKT.Caption = "Tng kch thc : " & TongKichThuoc & " bytes"
End Sub
'----------------------------------------------------------------------------------------------------------------------------Private Sub Dir1_Change()
File1.Path = Dir1.Path

'/// Phn nh s thay i ca Dir1 vo File1

End Sub
'----------------------------------------------------------------------------------------------------------------------------Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive

'/// Phn nh s thay i ca Drive1 vo Dir1

cmdThem.ToolTipText = "Thm file vo danh sch"


End Sub

d. Ghi ch:

Thuc tnh Selected(i) cho bit mc c ch s i c chn hay khng?


Thuc tnh Selected ny cng c trong rt nhiu iu khin khc v cng c
cch s dng tng t.
Khi thc hnh th c th cn phi kim tra cc file xem c trong danh sch
(Listbox) pha bn phi hay cha ? Nu cha c th mi thm.
Biu tng trong nt cmdThem trn ch c ngha minh ho, khng nht
thit phi c, do vy bn c th a vo hoc khng.
Khi chn mt biu tng (Icon) vo iu khin Command button chun th
trc tin cn phi t thuc tnh Style = 1-Graphical.

Trang 75

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 23
a. Thit k giao din

Hnh 2.47 - t tn v thuc tnh cho cc iu khin


b. Hng dn

t thuc tnh Stretch ca Image l True c th ko gin nh.


Khi Form thay i (S kin Form_Resize) th t li kch thc ca Image
ng bng kch thc ca Form.

c. Chng trnh mu
Option Explicit
'/// M hp thoi chn file (nhng ch hin th nhng file nh)

Private Sub cmdChonFile_Click()


dlgChonFile.Filter = "Tt c (*.*)|*.*|File nh (BMP, JPG, GIF)|*.bmp;*.GIF;*.JPG|"

dlgChonFile.ShowOpen
On Error GoTo Err
imgBack.Picture = LoadPicture(dlgChonFile.FileName) '///Np file va chn
Exit Sub
Err:
MsgBox "C li khi np file : " & Err.Description, vbCritical, "Thng bo."
End Sub
'----------------------------------------------------------------------------------------------------------------------------'///Hm LoadPicture() khng tham s c ngha l np file rng.

Private Sub cmdHuyBo_Click()


imgBack.Picture = LoadPicture()
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Cp nht kch thc ca image bng vi kch thc ca form mi khi form thay i

Private Sub Form_Resize()


imgBack.Top = 0
imgBack.Left = 0
imgBack.Width = Me.ScaleWidth
imgBack.Height = Me.ScaleHeight
End Sub
d. Ghi ch

Nn s dng cch thc ny khi cn t nh nn cho Form, bi v nu t


ngay thuc tnh Picture ca Form th trong mt s trng hp kch thc ca
Form v ca nh s b chnh nhau khi cc my tnh c phn gii cao.

Trang 76

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Khi mun hu b nh trong iu khin Image (hoc cc iu khin khc c


thuc tnh Picture) th ch vic gn thuc tnh ny gi tr : LoadPicture().

Bi 24
a. Thit k giao din

Hnh 2.48 - To Menu v t tn cho iu khin PictureBox


b. Hng dn : Thm vo Form mt iu khin PictureBox v to mt Menu nh
hnh trn. C th tham kho v system tray trong trang http://www.allapi.net.
c. Chng trnh mu
Option Explicit
'/// nh ngha cu trc lu tr thng tin v Icon di khay h thng

Private Type NOTIFYICONDATA


cbSize As Long
hwnd As Long
uId As Long
uFlags As Long
ucallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
Private Const NIM_ADD = &H0
Private Const NIM_DELETE = &H2
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
'/// nh ngha cc hng

Private Const WM_LBUTTONDBLCLK = &H203


Private Const WM_LBUTTONDOWN = &H201

Trang 77

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Private Const WM_RBUTTONUP = &H205


'/// Khai bo hm API x l Icon trong khay h thng

Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As
Long, pnid As NOTIFYICONDATA) As Boolean
Dim TrayI As NOTIFYICONDATA
Dim Msg As Long
'----------------------------------------------------------------------------------------------------------------------------Private Sub Form_Load()
TrayI.cbSize = Len(TrayI)
'///t Hangle ca ca s

TrayI.hwnd = Picture1.hwnd
'///t nh danh cho khay biu tng

TrayI.uId = 1&
'///Thit lp cc c

TrayI.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE


'///Thit lp Message CallBack

TrayI.ucallbackMessage = WM_LBUTTONDOWN
'///t biu tng cho khay (Phi l mt biu tng)

TrayI.hIcon = Picture1.Picture
'///t dng nhc khi chut di chuyn qua biu tng di Khay h thng

TrayI.szTip = "Faculty of Information Technology - UTE Hung Yen" & Chr$(0)


'///To biu tng va thit lp

Shell_NotifyIcon NIM_ADD, TrayI


'/// Np mt biu tng vo Picture (C th t ngay cho thuc tnh Picture lc thit k)

Dim DuongDan As String


DuongDan = "C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Misc\FACE02.ICO"
picIcon.Picture = LoadPicture(DuongDan)
'///n form (Ch hin th Icon trn khay h thng)

Me.Hide
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Th tc xo (Remove) biu tng trong khay h thng

Sub Deletetray()
TrayI.cbSize = Len(TrayI)
TrayI.hwnd = Picture1.hwnd
TrayI.uId = 1&
Shell_NotifyIcon NIM_DELETE, TrayI
End Sub
'----------------------------------------------------------------------------------------------------------------------------Private Sub mnuAbout_Click()
MsgBox "To menu di System tray !. ", vbInformation
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// X l khi ngi dng Click chut ln biu tng trong khay h thng

Private Sub picIcon_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)


Msg = X / Screen.TwipsPerPixelX

Trang 78

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

If Msg = WM_LBUTTONDBLCLK Then


MsgBox "X l cng vic khi ngi dng click p chut"
ElseIf Msg = WM_RBUTTONUP Then
'///X l khi ngi dng click phi chut ln Icon

Me.PopupMenu mnuMain
'//// Hin th menu mnuMain ca Form
End If
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Xo biu tng v thot khi ngi dng chn mc Exit

Private Sub mnuExit_Click()


Call Deletetray
End
End Sub

d. Ghi ch

Phng thc PopupMenu ca Form c dng hin th mt menu ngay


v tr click chut m khng nht thit phi trn thanh menu. Do vy, c th
p dng cch thc ny khi xy dng cc ng dng i hi c menu x ln
(Menu popup).

C th nghin cu thm cc hm API nh GetMenu, GetSubMenu,


GetMenuItemID, ModifyMenu tu bin v a cc biu tng vo cc
mc menu.

C- BI TP T GII
Bi 1. Vit chng trnh "ng h bo thc". Chic ng h ny s thc hin "Reo
chung" (Chi i chi li mt file nhc ting) cho n khi no ngi dng tt ng
dng th thi.
Bi 2: To chic ng h c y 3 Kim (Gi, pht, giy). Mt ng h l mt bc
nh tht.
Bi 3: Vit chng trnh Son tho vn bn n gin.
Bi 4: Vit chng trnh qun l v xem cc file hnh nh.
Bi 5: Vit li chng trnh KeyLogger thu c ni dung chun m ngi dng
g, tc l nu ngi dng nhn phm xo () th ni dung cng phi xo .
Bi 6: Vit chng trnh qun l im cho mt lp. Thng tin c th c lu v np
t file.
Bi 7: Vit chng trnh "my tnh b ti", c kh nng thc hin cc php ton
cng, tr, nhn, chia, bnh phng, chuyn i gia cc h c s.
Bi 8: S dng iu khin FlexGrid hoc iu khin Grid, vit tr chi xp ch. Tr
chi ny nh sau: Mt bn c kch thc n x n , trong c n x n -1 cha cc s
t 1 n n x n 1 v mt trng. Cc c t cc v tr ngu nhin v
nhim v ca ngi chi l xp cc s theo ng th t t 1 n n x n 1.
Bi 9: Vit chng trnh nh dng font cho cc t kho ca mt chng trnh ngun
vit trn ngn ng Visual Basic (c th m rng sang cc ngn ng khc). D liu
vo l chng trnh ngun cha trong tp vn bn RTF. HD: S dng iu khin
Richtext v s dng cc phng thc Find tm v t SelText = Bold v.v..

Trang 79

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Chng iiI

S DNG HP THOI CHUN & MENU


MC TIU: SAU KHI HON THNH CC BI TP, NGI HC C TH
Xy dng c cc h thng menu mt cp nhiu cp, menu Popup
Xy dng c cc h thng thanh cng c - Toolbar.
S dng thnh tho cc thuc tnh v phng thc ca iu khin Dialog
Phn bit c gia ng dng a ca s v n ca s.
Vit c mt ng dng son tho vn bn n gin vi a ca s.

A - BI TP
Bi 1: Xy dng chng trnh son tho vn bn s dng iu khin RichText.

Hnh 3.1 giao din chng trnh


Yu cu:
Chng trnh h tr cc phm tt (Ctrl-O m, Ctrl-S lu v.v)
C th nh dng ch m, nghing, gch chn bng cch nhn t hp phm
tt tng ng l Ctrl-B, Ctrl-I, Ctrl-U.
Vng son tho (Textbox) c th thay i kch thc khi Form thay i.
Khi mt mc trn thanh menu c chn th mc s c nh du " "
Bi 2: Xy dng chng trnh nh bi 1 nhng c thm menu "Mu ch" cho
php ngi dng t mu ch cho ni dung vn bn.

Hnh 3.2 Giao din chng trnh (C thm mc chn "Mu ch")

Trang 80

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 3: Xy dng chng trnh nh bi 2, nhng thm kh nng hin th menu


ng cnh nh sau: Khi ngi dng chn mt on vn bn v click chut phi trong
Richtextbox th hin th (Popup) menu "nh dng" cn khi ngi dng khng chn
on vn bn no nhng click chut phi th hin th Menu "File". Tuy nhin, vic
nh dng font ch y l nh dng ring cho phn c bi en.

Hnh 3.3 - Hin th menu cm ng cnh


Bi 4: Xy dng chng trnh nh bi 3 nhng s dng c ch a ca s
(Multi documents). Tc l chng trnh cho php son tho nhiu tp tin trong nhiu
ca s khc nhau.

Hnh 3.4 - H thng a ca s (MultiDocuments)


Bi 5: Xy dng chng trnh nh bi 4, nhng thm mt s mc trn thanh
Menu ca FormMDI bng cc nt lnh trn thanh cng c (ToolBar).

Hnh 3.5 - H thng son tho a ca s vi thanh cng c


Trang 81

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 6 : Nh bi 5 nhng chng trnh c thm thanh trng thi (status bar) trong
form chnh (Xem hnh 6). Trong thanh trng thi c 3 , th nht cho bit tng s
k t trong Richtextbox, th hai hin th thi gian, th 3 hin th ngy trong my
tnh.

Hnh 3.6 - B sung thm thanh trng thi

Trang 82

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

B. HNG DN - GII MU
Bi 1
a. Thit k giao din

Hnh 3.10 Giao din chng trnh

Hnh 3.11 - t tn cho mc Menu


Ngoi ra, trong lc thit k t thuc tnh Scrollbar ca Richtextbox l 3- Both
b. Hng dn:

Kt hp s dng iu khin Common Dialog m, lu File


S dng phng thc LoadFile, SaveFile np, lu file ang son tho

c. Chng trnh mu
Option Explicit
'/// X l khi ngi dng click vo mc ""t Font ch" trn menu

Private Sub mnuFont_Click()


dlgMain.Flags = cdlCFBoth Or cdlCFEffects '/// Phi c trc khi ShowFont
dlgMain.ShowFont
'/// Hin th hp thoi chn font
'/// t font ch ca Richtext theo nh thng tin ngi dng chn

rtfNoiDung.Font.Name = dlgMain.FontName
Trang 83

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

rtfNoiDung.Font.Bold = dlgMain.FontBold
rtfNoiDung.Font.Italic = dlgMain.FontItalic
rtfNoiDung.Font.Underline = dlgMain.FontUnderline
rtfNoiDung.Font.Size = dlgMain.FontSize
End Sub
'/// o li trng thi trc : Nghing

Khng nghing, Chn

Khng chn

Private Sub mnuItalic_Click()


mnuItalic.Checked = Not mnuItalic.Checked
'/// Hin / n du tch ( )
rtfNoiDung.Font.Italic = Not rtfNoiDung.Font.Italic '///Nghing Khng nghing
End Sub
'/// X l cp nht li nh dng v trng thi chn khi ngi dng chn "Ch nghing"

Private Sub mnuUnderline_Click()


mnuUnderline.Checked = Not mnuUnderline.Checked
rtfNoiDung.Font.Underline = Not rtfNoiDung.Font.Underline
End Sub
'/// X l cp nht li nh dng v trng thi chn khi ngi dng chn "Ch m"

Private Sub mnuBold_Click()


mnuBold.Checked = Not mnuBold.Checked
rtfNoiDung.Font.Bold = Not rtfNoiDung.Font.Bold
End Sub
'/// To mi ti liu khi ngi dng chn mc "New

Ctrl-N"

Private Sub mnuNew_Click()


rtfNoiDung.TextRTF = ""
End Sub
'/// X l m file s dng iu khin Dialog.

Private Sub mnuOpen_Click()


dlgMain.Filter = "Cc file RTF |*.rtf|Cc file TXT|*.txt|Tt c cc file (*.*)|*.*|"
dlgMain.DialogTitle = "M file"
dlgMain.ShowOpen
rtfNoiDung.LoadFile dlgMain.FileName
End Sub
'/// Lu ni dung ang son ra a, s dng phng thc SaveFile ca Richtext

Private Sub mnuSave_Click()


dlgMain.Filter = "Cc file RTF |*.rtf|Cc file TXT|*.txt|Tt c cc file (*.*)|*.*|"
dlgMain.DialogTitle = "Lu vn bn ra file"
dlgMain.ShowSave
rtfNoiDung.SaveFile dlgMain.FileName, rtfRTF
End Sub
'/// Thay i kch thc ca Richtext n lun bng Form mi khi ko gin Form

Private Sub Form_Resize()


rtfNoiDung.Top = 0
rtfNoiDung.Left = 0
rtfNoiDung.Height = Me.ScaleHeight
rtfNoiDung.Width = Me.ScaleWidth
End Sub
d. Ch :

C th gn t hp phm tt cho cc mc menu trong khi son Menu

Trang 84

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Hp thoi Common Dialog khng t lu file hay m file m n ch cung cp


mt hp thoi ngi dng chn hay g tn file m thi.
C th thay i phn m rng mc nh khi hp Dialog m ra
Khi hp thoi Dialog m ra, rt c th ngi dng s nhn Cancel. Khi , tn
file nhn c s l tn c m trc . Nh vy, thc t cn phi bit
c ngi dng nhn "Open" hay nt "Cancel" c x l ph hp.
Font ch trong menu thng l font h thng do vy, nhn chung l s khng
hin th ng trn cc my tnh khc nhau khi chng ta s dng Ting vit.
Khi lu tp vn bn bng phng thc SaveFile, c mt tham s cho bit l
lu di dng tp vn bn (Text) hay tp Richtext. Gi tr ca tham s ny
tng ng l rtfText v rtfRTF.

Bi 2
a. Giao din nh bi 1 nhng c thm mc "Mu ch" vi tn l mnuForeColor.
b. Hng dn: S dng phng thc ShowColor ca iu khin Dialog
c. Chng trnh mu: (Chn thm on lnh x l s kin mnuForeColor_Click vo
phn Code ca bi 1)
'///chn phn chng trnh ngun ca bi 1 vo y .

Private Sub mnuForeColor_Click()


dlgMain.ShowColor
rtfNoiDung.SelStart = 0
rtfNoiDung.SelLength = Len(rtfNoiDung.Text)
rtfNoiDung.SelColor = dlgMain.Color
rtfNoiDung.SelLength = 0
End Sub
d. Ghi ch
iu khin Richtext khng c phng thc cho php ta t mu ch ca ton
b ni dung m ch cho php t mu ch ca phn vn bn c bi en
thng qua thuc tnh SelColor (Selected Color).
C th chn (bi en) mt on vn bn bng cch thit lp cc thuc tnh
SelStart (Selected Start - v tr bt u bi en) v SelLength (Selected Length
Bi en bao nhiu k t). iu ny c th p dng cho c Textbox.
Bi 3
a. Thit k giao din (Nh bi tp s 2)

Hin th menu "File" khi cha bi en

Hin th menu "nh dng" khi bi en

Hnh 3.12 - Kt qu khi chy chng trnh

Trang 85

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

b. Hng dn

S dng phng thc PopupMenu hin th menu ti v tr con chut


t thuc tnh ch m, nghing, mu cho cc thuc tnh SelBold, SelItalic,
SelColor tng ng ca iu khin RichtextBox.
Mun bit ngi dng c bi en on vn bn no hay khng th ch vic
kim tra d liu trong thuc tnh SelText (nu c th di ca s ln hn 0)

c. Chng trnh mu (Chng trnh ngun ging nh bi tp s 2 nhng sa i cc


th tc s kin c tn sau y )
Private Sub mnuItalic_Click()
mnuItalic.Checked = Not mnuItalic.Checked
rtfNoiDung.SelItalic = Not rtfNoiDung.SelItalic
End Sub
'-----------------------------------------------------------------------------------------------------------------------------

Private Sub mnuUnderline_Click()


mnuUnderline.Checked = Not mnuUnderline.Checked
rtfNoiDung.SelUnderline = Not rtfNoiDung.SelUnderline
End Sub
'-----------------------------------------------------------------------------------------------------------------------------

Private Sub mnuBold_Click()


mnuBold.Checked = Not mnuBold.Checked
rtfNoiDung.SelBold = Not rtfNoiDung.SelBold
End Sub
'-----------------------------------------------------------------------------------------------------------------------------

Private Sub mnuForeColor_Click()


dlgMain.ShowColor
rtfNoiDung.SelColor = dlgMain.Color
End Sub
'----------------------------------------------------------------------------------------------------------------------------Sub rtfNoiDung_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)

If Button = 2 Then
'/// Nu click chut phi (nt chut tri l 1)
If Len(rtfNoiDung.SelText) = 0 Then Me.PopupMenu mnuFile
If Len(rtfNoiDung.SelText) > 0 Then Me.PopupMenu mnuFormat
End If
End Sub
d. Ghi ch: Khi lm vic vi iu khin Richtext, nu cc thuc tnh ca iu khin
ny c tin t l "Sel", v d SelText, SelColor, SelBold th ta hiu l ang lm vic
vi phn c bi en (hay ch phn c bi en b tc ng)
Bi 4
a. Thit k giao din

Vi loi ng dng a ca s ny th trc tin ta cn phi to ra mt form


dng "MDI Form". to menu dng ny, hy vo menu Project v chn mc:
. Sau , cc form v sau khi thm th cn t thuc
tnh MDIChild l True:
nu mun l con ca Form
MDI ban u.
Trong bi tp ny, to 2 form, mt form loi MDI vi tn l frmMain v mt
form thng c tn l frmDocument. Trong frmDocument, thm mt Richtext
vi tn l rtfNoiDung. Trong frmMain, to h thng menu nh sau:

Trang 86

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Hnh 3.13 Giao din ca Form MDI

Hnh 3.14 Giao din ca frmDocument (cn t thuc tnh MDIChild = True)
b. Hng dn

S dng t kho New to mt th hin form mi.


S dng hm ActiveForm tr ti form ang c kch hot.

c. Chng trnh mu (Vit cho form: frmDocument v MDI: frmMain)


frmDocument.frm
Option Explicit
'/// Khi ngi dng ko gin Form th t li kch thc ca Richtext bng vi Form

Private Sub Form_Resize()


rtfNoiDung.Top = 0
rtfNoiDung.Left = 0
rtfNoiDung.Height = Me.ScaleHeight
rtfNoiDung.Width = Me.ScaleWidth
End Sub
frmMain.frm
Option Explicit
Dim SoTT As Integer

'/// Bin dng lu s lng Form to ra

'/// Ngi dng click chn menu : "Ti liu mi"

Private Sub mnuNew_Click()


Dim F As New frmDocument
'///To mt th hin mi ca frmDocument
SoTT = SoTT + 1
F.Caption = "Ti liu th " & SoTT '/// t tiu cho ca s (form) mi
F.Show
'/// Hin th form va to
End Sub

Trang 87

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

'/// Ngi dng click chn mc "m ti liu"

Private Sub mnuOpen_Click()


Dim TenFile As String
dlgMain.Filter = "Tt c cc file vn bn |*.rtf;*.txt|Tt c cc file|*.*|"
dlgMain.ShowOpen
TenFile = dlgMain.FileName
Dim FormMoi As New frmDocument '///To 1 th hin mi ca frmDocument
FormMoi.Caption = TenFile
'/// t caption l tn ca file va m
FormMoi.rtfNoiDung.LoadFile TenFile '/// Np file vo iu khin Richtext
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Lu ni dung trong Richtext ca ca form ang kch hot ra file

Private Sub mnuSave_Click()


Dim TenFile As String
Dim FormDangSoanThao As frmDocument

'/// Khai bo bin Form

dlgMain.Filter = "Tt c cc file vn bn|*.txt|File RTF|*.rtf|Tt c cc file|*.*|"


dlgMain.ShowSave
TenFile = dlgMain.FileName
Set FormDangSoanThao=ActiveForm '///Gn bin file cho form ang kch hot
FormDangSoanThao.rtfNoiDung.SaveFile TenFile, rtfRTF
'/// Lu ra file
FormDangSoanThao.Caption = TenFile '/// Cp nht li tiu ca form
End Sub
d. Ghi ch

Trong khi chng trnh ang chy, nu mun to ra mt form mi c y


tnh cht nh mt form c th s dng t kho :
Dim <Bin> As New <Tn form ang tn ti>, nh v d trn. Ngoi ra cn
c mt cch khc, v d:
Dim F As frmDocument
Set F = New frmDocument
Trong trng hp mt ng dng c nhiu form cng tn ti th ActiveForm s
tr v (tr ti) form ang c kch hot.
C th thay i mu nn ca form MDI bng cch t li thuc tnh
BackColor, hay cng c th t vo mt file nh qua thuc tnh picture.
Mun mt form dng MDIChild th t thuc tnh MDIChild = True.
Nu form con c h thng menu th menu ca form MDI s b n i.
Nu cc form c ng ht v ngi dng click chn mc "Lu file ra
a" th s c li xut hin. y c 2 gii php : th nht l "Disable" mc
ny. th hai l cn kim tra gi tr tr v t hm ActiveForm. Nu gi tr ny l
Nothing th thot ngay, c th l: If ActiveForm Is Nothing Then Exit Sub

Bi 5
a. Thit k giao din
H thng giao din ging nh bi tp 4, nhng thm thanh cng c (Toolbar) v i
tng cha nh ImageList. (Tn ca cc iu khin c in m bn cnh)

Trang 88

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Hnh 3.15 Giao din form MDI v t tn cho cc iu khin


Lu : Thanh cng c nm trong th vin: Microsoft Window Common Control 6.0
Tip theo, cn t thuc tnh cho 2 iu khin ImageList v Toolbar nh sau:
b1. M trang Property (click chut phi v chn Properties) ca iu khin ImageList
nh trong hnh 16.

Hnh 3.16 - Chn kch thc Icon l 16x16 cho ImageList

thuc tnh Key


chnh l tn.

Hnh 3.17 Chn v t tn cho cc biu tng ca ImageList


- Cc biu tng y ch mang ngha minh ho cho sinh ng, thc t bn c th
chn cc biu tng khc theo s thch.
- Cc biu tng nn c t tn, nh trong bi tp ny, 3 biu tng trn c
cc tn (Key) ln lt l icoBold, icoItalic, icoUnderline. Khi t tn th v sau ta c

Trang 89

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

th tham chiu ti n thng qua tn ny. Cng xin ni thm y l vic t tn


bng ch thng v ch HOA l quan trng.
B2. Thm cc nt vo Toolbar v thit lp cc thng s.

Hnh 3.19 - Gn kt Toolbar vi iu khin ImageList

Hnh 3.20 Thm cc nt vo Toolbar v t thuc tnh cho mi nt


b. Hng dn: Phn vit lnh trong bi tp ny tng t nh bi tp trc, tuy nhin
cn phi chn thm vo cc s kin Click chn trn thanh cng c. Khi ngi dng
click mt nt trn thanh cng c th s kin ButtonClick s xut hin.
c. Chng trnh mu
frmDocument.frm
'/// Khi ngi dng ko gin Form th t li kch thc ca Richtext bng vi Form

Private Sub Form_Resize()


rtfNoiDung.Top = 0
rtfNoiDung.Left = 0
rtfNoiDung.Height = Me.ScaleHeight
rtfNoiDung.Width = Me.ScaleWidth
End Sub
on lnh sau vit trong Form frmMain:
frmMain.frm
Dim SoTT As Integer

'/// Bin dng lu s lng Form to ra

'/// Ngi dng click chn menu : "Ti liu mi"

Private Sub mnuNew_Click()


Dim F As New frmDocument
'///To mt th hin mi ca frmDocument
SoTT = SoTT + 1
F.Caption = "Ti liu th " & SoTT '/// t tiu cho ca s (form) mi
F.Show
'/// Hin th form va to
Trang 90

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Ngi dng click chn mc "m ti liu"

Private Sub mnuOpen_Click()


Dim TenFile As String
dlgMain.Filter = "Tt c cc file vn bn |*.rtf;*.txt|Tt c cc file|*.*|"
dlgMain.ShowOpen
TenFile = dlgMain.FileName
Dim FormMoi As New frmDocument '///To 1 th hin mi ca frmDocument
FormMoi.Caption = TenFile
'/// t caption l tn ca file va m
FormMoi.rtfNoiDung.LoadFile TenFile '/// Np file vo iu khin Richtext
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Lu ni dung trong Richtext ca ca form ang kch hot ra file

Private Sub mnuSave_Click()


Dim TenFile As String
Dim FormDangSoanThao As frmDocument

'/// Khai bo bin Form

dlgMain.Filter = "Tt c cc file vn bn|*.txt|File RTF|*.rtf|Tt c cc file|*.*|"


dlgMain.ShowSave
TenFile = dlgMain.FileName
Set FormDangSoanThao=ActiveForm '///Gn bin file cho form ang kch hot
FormDangSoanThao.rtfNoiDung.SaveFile TenFile, rtfRTF
'/// Lu ra file
FormDangSoanThao.Caption = TenFile '/// Cp nht li tiu ca form
End Sub
'///--------------------------------------------------------------------------------------------------------------------------'/// S kin ny c kch hot khi ngi dng click mt nt trn thanh Toolbar
'/// Khi chn nh dng m, nghing, gch chn th o li gi tr trc (s dng php NOT)
'///---------------------------------------------------------------------------------------------------------------------------

Private Sub tbrMain_ButtonClick(ByVal Button As MSComctlLib.Button)


Dim F As frmDocument
Set F = ActiveForm
'/// Tr n Form ang c kch hot
Select Case Button.Key
Case "cmdBold"
F.rtfNoiDung.Font.Bold = Not F.rtfNoiDung.Font.Bold
If F.rtfNoiDung.Font.Bold = True Then Button.Value = tbrPressed
If F.rtfNoiDung.Font.Bold = False Then Button.Value = tbrUnpressed
Case "cmdItalic"
F.rtfNoiDung.Font.Italic = Not F.rtfNoiDung.Font.Italic
If F.rtfNoiDung.Font.Italic = True Then Button.Value = tbrPressed
If F.rtfNoiDung.Font.Italic = False Then Button.Value = tbrUnpressed
Case "cmdUnderline"
F.rtfNoiDung.Font.Underline = Not F.rtfNoiDung.Font.Underline
Button.Value=IIf(F.rtfNoiDung.Font.Underline=True, tbrPressed, tbrUnpressed)

End Select
End Sub

Trang 91

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

d. Ghi ch

Khi s kin ButtonClick xy ra th ta c th kim tra v bit c nt no


dc nhn (chn) thng qua tham s l Button. ngoi ra, ta cng c th cn
phi thay i lun trng thi ca nt va c nhn nh cc nt B, I, U. Khi
ta ch cn thay i thuc tnh Value ca Button thnh tbrPressed (trng thi
nhn = nt chm) v tbrUnPressed (trng thi khng nhn = nt ni).

Hm iif(<Biu thc logic L>, <GT1>, <GT2>) l mt hm rt hay v ngn gn,


hm ny s tr v gi tr l GT1 hoc GT2 tu vo Biu thc L l true hay
False. Nu Biu thc logic L l true th tr v GT1, tri li tr v GT2.

Bi 6
a. Thit k giao din. Ging nh bi s 5, nhng thm iu khin Statusbar (tn l
staMain) vi thuc tnh c thit lp nh hnh 21 di y:

Hnh 3.21 t thuc tnh cho iu khin StatusBar


Trong : Cn to ra 3 (Panel). Mi Panel c thuc tnh Style tng ng l N1, N2,
N3 nh ch dn trong hnh 21.
b. Hng dn: Vit lnh trong th tc s kin Change ca Richtext, sau t ni
dung vo panel u tin ca thanh trng thi theo c php: staMain.Panels(1).Text
c. Chng trnh mu: Nh bi tp 5 nhng chn thm s kin (on lnh) sau :
d. Ghi ch:

Panel u tin trong thanh trng thi c ch s l 1

C th m rng chng trnh trng thi ca cc nt nhn s thay i


tng ng vi nh dng vn bn ti v tr con tr. Cc lnh sau y minh ho
iu ny. (Ch : t trong th tc s kin KeyUp ca iu khin Richtext):
Dim F As frmDocument
Set F = frmMain.ActiveForm
If F.rtfNoiDung.SelBold=True Then F.tbrMain.Buttons("cmdBold").Value=1
Trang 92

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

If F.rtfNoiDung.SelBold=false Then F.tbrMain.Buttons("cmdBold").Value=0

(Gi tr 1 c ngha l nt c n Chm), 0 = khng nhn (ni))


Di y l kt qu minh ho khi chy chng trnh !

Hnh 3.22 - Kt qu chy chng trnh


Qui tc vng :

Lun lun tham kho v c thm ti liu tr gip trc tuyn MSDN, Internet

Hy th t cc gi tr khc nhau cho cc thuc tnh v chy kim nghim.

Lun lun tm mi cch v phng thc khc nhau gii cc bi ton.

Lun suy ngh v tm ra cc tng, ri lp trnh th nghim trn my tnh.

Lun phi quan nim rng: Kin thc vit trong mt cun sch ch mang
ngha dn dt ta lm cc bc lm c bn. Kin thc su sc nht chnh
l t thc tin ta lm !.

Khng nn ch hc nhng g sch v, thy c gio dy m hy ch ng tm


ti, t vit nhng phn mm m mnh yu thch, v: "Cng vic m ngi ta
lm tt nht l nhng cng vic m h thch nht !"

Rt ra kin thc t nhng ln th nghim .

V hy lun hc hi t nhng ngi xung quanh .

.. Nhng ri cng phi c lc th gin

Trang 93

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Chng iV

S dng cc iu khin nng cao


MC TIU: SAU KHI HON THNH CC BI TP, NGI HC C TH
S dng c hu ht cc iu khin nng cao i km vi Visual Basic v
mt s iu khin nng cao thng dng t cc hng th 3 Third party.
La chn c cc iu khin ph hp khi vit chng trnh.
Xy dng c mt s ng dng vi cc iu khin nng cao.

A - BI TP
Bi 1: Minh ho s dng iu khin Carlendar (Lch)
Gii thiu: iu khin Carlendar nm trong th vin
, c
chc nng hin th nh mt cun lch in t. ng thi cng c dng cho
php ngi dng chn trc quan ngy, thng, nm trong mt s ng dng.

Hnh 4.1 Giao din chng trnh


Yu cu:

Khi ngi dng click nt

th hin th lch ca thng trc.

Khi ngi dng click nt

th hin th lch ca thng tip theo

Khi ngi dng click nt

th hin th lch ca nm trc

Khi ngi dng click nt

th hin th lch ca nm tip theo

Khi ngi dng click nt

th tr v ngy hin ti

Khi ngi dng click nt


th thay ngy thng nm trong my
tnh bng ngy thng nm ang c chn trong Calendar.
Trang 94

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 2: Minh ho s dng iu khin truyn thng ni tip Comm Control


Gii thiu: iu khin MSComm nm trong th vin
, cung
cp cho ng dng kh nng truyn thng ni tip bng cch truyn v nhn d liu
thng qua cng ni tip (Serial Port).

Hnh 4.2 Giao din chng trnh v t tn cho cc iu khin


Yu cu:

Xy dng ng dng nh hnh 2.

Khi ngi dng click


khin

Khi click

Khi click

th m cng c s hiu trong iu

.
th ng cng hin hnh.
th gi lnh v d liu cha trong cboCommand

Bi 3 : Minh ho iu khin FlexGrid


Gii thiu: iu khin MSFlexGrid nm trong th vin
rol c
chc nng hin th v thao tc d liu dng bng (Tabular). N hon ton cho
php sp xp, trn v nh dng bng c cha xu k t v hnh nh. Khi gn kt vi
cc iu khin Data, MSFlexGrid ch hin th d liu ch Read-Only.

Hnh 4.3 Giao din v t tn cho cc iu khin (tn c in m)


Yu cu:

Khi click nt "Thm" th thm mt bn ghi trong cc Textbox vo FlexGrid


Khi click nt "Xo" th xo dng ang c chn trong FlexGrid

Trang 95

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Khi click nt "Cp nht" th t ni dung ca dng hin hnh bng ni dung
trong cc hp Text tng ng.
Khi click nt "Lu ra File" th lu ni dung FlexGrid ra file Text, mi bn ghi
trong FlexGrid c ghi trn mt dng ca file.

Bi 4 : Minh ho s dng iu khin Web brower v HTML Object Library.


Gii thiu : iu khin Web Browser ng vai tr nh mt trnh duyt IE, do vy cho
ta php nhng vo trong ng dng m v thao tc vi trang web bng cc lnh
ca VB. truy cp (c / ghi) ni dung cha trong cc i tng ca trang web
(nt nhn, textbox...) th cn phi c th vin HTML Object Library. Trong trng
hp ng dng ch m cc trang web th khng cn n th vin ny.
Hai thnh phn ny nm trong

Hnh 4.4 Giao din chng trnh


Yu cu:

Khi chng trnh bt u, mt trang web trng (Blank) s c m.


Khi click nt "M" th m trang c a ch nm trong txtURL
Khi click nt "To nt nhn v Textbox" th to ra mt hp text v mt nt
nhn trong trang Web.
Khi click nt "Ghi gi tr vo Text" th cho ngi dng nhp mt xu k t v
chn xu ny vo hp Text va to ra trong trang web
Khi click nt "c gi tr trong Textbox" th c ni dung trong hp Text va
to ra v hin th ra mn hnh bng hm Msgbox.
Khi click nt "Thm "Hello"" th thm mt dng "Hello" c mu xanh vo trong
trang web.

Bi 5: Minh ho s dng Internet Control


Gii thiu: iu khin Internet
ci t 2 giao thc
c s dng rng ri nht l giao thc HyperText Transfer Protocol (HTTP) v
File Transfer Protocol (FTP).
S dng giao thc HTTP, chng ta c th ly v cc trang Web t Internet, cn giao
thc FTP cho php ng nhp vo my ch FTP Download (ly v) v Upload

Trang 96

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

(Gi ln) cc file. Ngoi ra, cc lnh trong giao thc FTP nh SEND, PUT, PWD.
cng c iu khin ny h tr.
Yu cu: Xy dng mt chng trnh cho php ngi dng Download cc file t
Internet v my tnh cc b. Cc file ny sau c th m theo yu cu.

Hnh 4.5 Giao din v t tn cho cc iu khin


Bi 6. S dng iu khin Multimedia MCI chi cc file nhc v hnh
) c dng ghi
Gii thiu: iu khin Multimedia MCI (
v chi cc file nhc v hnh. Cc dng file m iu khin ny h tr l cc file Wav
(WaveAudio), cc file trn a CD (CDAudio), cc file hnh (DAT), file hnh AVI..

Hnh 4.6 Giao din chng trnh v tn cho cc iu khin


Yu cu:

Xy dng chng trnh vi giao din nh hnh 6

Khi ngi dng click nt

th m hp thoi chn file v chi file ny.

Bi 7: S dng Script Control tnh ton biu thc bt k c nhp t bn


phm trong khi chng trnh chy.
) cho php nh gi (Eval)
Gii thiu: iu khin Script (
mt biu thc bt k khi chng trnh ang chy. N khc phc c hn ch trong
cc chng trnh trc y l biu thc cn tnh ton phi c nhp trc v khi
dch ra file exe ri th khng th thay i c. Mun thay i biu thc tnh ton
th phi sa i chng trnh ngun sau dch li ra file EXE. Ngoi kh nng nh
gi (tnh) mt biu thc, Script control cn c kh nng rt mnh khc l c th thm
cc lnh (nh khai bo bin, khai bo th tc, cc lnh r nhnh v.v ca VB) trong
khi chng trnh chy. y ch xin gii thiu kh nng th nht.
Yu cu:

Xy dng giao din nh hnh 7

Khi ngi dng nhp mt biu thc trong textbox v click nt "Hin th" th
hin th kt qu tnh ton c bng hm MsgBox.
Trang 97

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Hnh 4.7 Giao din chng trnh v kt qu chy chng trnh


Bi 8: S dng iu khin SSTab v vit chng trnh c CARO n gin
Gii thiu: SSTab nm trong th vin
l mt iu
khin hot ng ging nh mt i tng cha (tc cho cc cc iu khin khc t
ln). Cc iu khin c th t trong nhiu trang (cn gi l Page hay TAB) khc
nhau ca SSTab, do vy gip chng ta khng phi to ra nhiu Form. Trong bi tp
ny, chng ta s s dng SSTab kt hp vi iu khin FlexGrid vit mt chng
trnh chi c Caro n gin. (C th kt hp vi bi tp 37 - Chng 1 s c
chng trnh hon chnh hn)

Hnh 4.8 Giao din v tn ca cc iu khin


Yu cu:

Chng trnh cho php 2 ngi dng s dng chut chi


Khi ngi dng click vo mt trong Flexgrid th t vo cc k hiu l "X"
hoc "O".
Th t ngi i trc c th thay i.
S cng c th thay i.
Khi ngi dng click vo "Vn mi" th xo bn c v bt u chi vn mi.

Bi 9: S dng thanh tin trnh (Progressbar)


Gii thiu: Thanh tin trnh nm trong th vin
thng c s dng hin th mt cch trc quan tin trnh mt cng vic, gip
cho ngi dng thy c trc quan cng vic thc hin c bao nhiu %.

Trang 98

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Hnh 4.9 Giao din chng trnh khi chy


Yu cu: Copy ni dung t file ngun v lu sang file ch. Trong qu trnh copy c
hin th tin trnh copy v % dung lng copy c bng Pgrogressbar.
Bi 10: S dng iu khin ImageCombo box
Gii thiu: iu khin ImageCombo nm trong
l
mt phin bn ca iu khin ComboBox chun nhng c thm kh nng hin th
nh (biu tng) vi tng mc trong danh sch. Ngoi ra, ImageCombo u vit hn
ComboBox ch, ComboBox th ch c thuc tnh List lu tr cc mc d liu
trong khi

Hnh 4.10 Giao din khi chy chng trnh.


Yu cu:

Np mt s mc vo ImageCombo c km thm biu tng.


Khi ngi dng click nt "Gi thng bo" th gi thng bo trong hp Text n
my tnh c chn trong ImageCombo s dng dch v Net Send ca h
iu hnh Windows 2K, XP.

Bi 11 : S dng iu khin Listview


Gii thiu: iu khin ListView nm trong
c
s dng hin th mt danh sch cc mc d liu, trong mi mc li c nhiu
thuc tnh i cng (v d mi mc thng tin v sinh vin c th gm h tn, ngy sinh,
qu qun...). iu khin ListView h tr 4 cch hin th khc nhau l Icon, SmallIcon,
List v Report. Bi tp sau y s hng dn bn cch s dng iu khin ny vi
cc thao tc "Chn thm" v "c" gi tr ca cc mc. Ngoi ra, cn gii thiu mt
s thuc tnh hay dng ca iu khin ListView ny.

Trang 99

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Hnh 4.11 Giao din v kt qu chy chng trnh mu


Yu cu:

Thit k giao din nh hnh 11 (Tn cc iu khin c t bn cnh)

Cho php thm mt hng (mc) mi vo Listview khi click nt "Thm bn ghi"

Hin th ra mn hnh gi tr ca nhiu mc c chn khi click nt "c cc


hng ang chn" (Khi ch Chn nhiu hng c
) bng hm
Debug.Print. Mi hng trn mt dng, mi trng cch nhau 1 du TAB.

c v hin th gi tr ca hng ang c chn bng hm MsgBox khi click


nt "c hng hin ti".

Cho ngi dng chn 1 trong 4 ch hin th.

Bi 12: S dng iu khin TreeView


Gii thiu: iu khin TreeView nm trong
s dng trnh by d liu di dng phn cp (Hnh cy).

Bi tp sau y minh ho cc thao tc chn (Add), Xo (Remove), Duyt (c gi


tr) cc nt trong cy v x l s kin click chut khi click ln 1 nt ca cy.
Yu cu:

Xy dng giao din nh hnh 12 (c th c biu tng hoc khng)

Thc hin cc chc nng khi ngi dng click vo cc nt tng ng. Vic
c gi tr ca mi nt bao gm gi tr ca trng "Key" v trng "Text".

Khi ngi dng click vo mt nt trn cy th hin th gi tr ca trng "Key"


v trng "Text" ca nt trong mt thanh trng thi (staThongTinThem).

Trang 100

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Hnh 4.12 Giao din khi chy chng trnh mu & t tn cc iu khin
Bi 13: S dng DateTimePicker nhp trc quan ngy/thng/nm.
Gii thiu

Hnh 4.13 Giao din chng trnh khi chy v tn ca cc iu khin


Bi 14: S dng iu khin Window Media Player, vit chng trnh chi nhc
Gii thiu: WMP l mt iu khin cho php lp trnh xy dng cc ng dng a
phng tin (Chi cc file nhc hnh, nhc ting)

Hnh 4.14 Giai din ca form : frm4_14


Trang 101

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Hnh 4.15 Giao din chng trnh ca form: frm4_14_Setting

B- HNG DN - GII MU
Bi 1
a. Hng dn: Tn cc thuc tnh v phng thc ca iu khin ny bn thn n
ni ln chc nng ca chng. Do vy chng ta c th tra cu v iu khin
Calendar trong b MSDN. (Cch tra cu nhn: Trong khi lp trnh, click vo iu
khin Calendar v nhn phm F1).
b. Chng trnh mu:
Form1.frm
Option Explicit
'/// Chuyn sang thng tip theo

Private Sub cmdNextMonth_Click()


Calendar1.NextMonth
End Sub
'----------------------------------------------------------------------------------------------------------------------------/// Chuyn sang nm tip theo

Private Sub cmdNextYear_Click()


Calendar1.NextYear
End Sub
'----------------------------------------------------------------------------------------------------------------------------'//// Chuyn sang thng trc thng hin ti

Private Sub cmdPrevMonth_Click()


Calendar1.PreviousMonth
End Sub
'----------------------------------------------------------------------------------------------------------------------------//// Chuyn sang nm trc nm hin ti

Private Sub cmdPrevYear_Click()


Calendar1.PreviousYear
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// t li ngy thng nm bng vi ngy thng nm va chn (v d 15/1/2006)

Private Sub cmdSetdate_Click()


Date = Calendar1.Value
End Sub
'-----------------------------------------------------------------------------------------------------------------------------

Trang 102

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

'/// Hin th ngy thng hin hnh trong my tnh

Private Sub cmdToday_Click()


Calendar1.Today
End Sub

c. Ch :

iu khin Calendar thng c s dng trong cc chng trnh ngi


dng nhp vo ngy, thng v nm.

Khi mun nhn v c ngy/thng/nm th ly thuc tnh Value, cn nu mun


nhn tng thnh phn ring l th ly thuc tnh Day, month, year

Bi 2
a. Hng dn: iu khin COM c th c s dng truyn thng (Giao tip) vi
bt k thit b no c ni v tng thch vi cng ny. Vit thit lp cc thng s
kt ni tng i n gin, ch cn t s hiu cng (Com 1, 2, 3) sau m kt
ni bng cch t thuc tnh PortOpen = True. Ring i vi mt s trng hp c
bit th cn t li mt s thng s khc.
Khi lm vic, iu khin Com ny c 2 cch ly d liu do cc thit b khc gi
n Cng Com, cch th nht l lun lun thm d (Polling) cng v nhn d liu
v; cch th 2 l khi d liu c gi n th s kin OnComm xut hin v ta ly
d liu v thng qua thuc tnh Input. Chng trnh mu di y s dng cch
nhn d liu th 2 v thc hin giao tip vi Modem.
C th tham kho thm
trong MSDN.
b. Chng trnh mu (Giao tip vi Modem):
Form1.frm
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'///--------------------------------------------------------------------------------------------------------------------------------'/// Thc hin m cng COM khi ngi dng click nt Open

Private Sub cmdOpen_Click()


On Error GoTo err
'/// S dng c ch bt li
comModem.CommPort = Val(cboPort.Text) '/// t cng giao tip
comModem.PortOpen = True
'/// m cng
cmdClose.Enabled = True
'/// t trng thi cho cc nt
cmdOutput.Enabled = True
'/// (C th b qua)
cmdOpen.Enabled = False
Exit Sub
err:
If cboPort.Text = "" Then
MsgBox "Hy chn cng COM cn m!", vbInformation, "Chn COM Port"
Else
MsgBox "Khng th m cng COM " & cboPort.Text, vbCritical, "Failed"
End If
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// ng cng COM ang m

Private Sub cmdClose_Click()


On Error GoTo err
comModem.PortOpen = False
cmdOutput.Enabled = False
cmdClose.Enabled = False

Trang 103

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

cmdOpen.Enabled = True
Exit Sub
err:
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Gi lnh ra cng COM khi click nt OutPut

Private Sub cmdOutput_Click()


On Error GoTo err
Dim Buffer As String
comModem.Output = cboCommand.Text & Chr$(13)
Exit Sub
err:
lstReceived.AddItem err.Description, 0
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// S kin ny c kch hot mi khi c d liu gi n cng COM

Private Sub comModem_OnComm()


Sleep 200
'///ch 200 ms. (Cn phi c v Modem thng b tr)
Dim Buffer As String
Buffer = comModem.Input
Buffer = "onCom : " & Buffer
lstReceived.AddItem Buffer, 0
End Sub
'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub Form_Load()


'/// Bn cn xem thit b ni vi cng Com c s hiu l Com my v t cho ph hp
cboPort.Text = "1"
'/// Gi s l cng Com1
'/// Thm mt s lnh c bn v Modem (C th tham kho tp lnh ca Modem)
cboCommand.Text = "AT"
'/// Lnh kim tra modem

cboCommand.AddItem "AT"
cboCommand.AddItem "AT VCID = 1"
cboCommand.AddItem "AT# CID"
cboCommand.AddItem "ATDT 0912068582"
cboCommand.AddItem "ATDT 713319"
cboCommand.AddItem "ATDT 713153"
End Sub

'/// Quay (gi) in n s 713319

Bi 3
a. Hng dn: S dng thuc tnh Row, Col chuyn n cn tham chiu, v d
cn chuyn n c ch s hng l 10, ct l 20 th ch cn t Row = 10, Col = 20.
Mun ly hoc thay i gi tr ca mt hng i, ct j th vit theo c php:
TextMaTrix(i,j).
b. Chng trnh mu.
Form1.frm
Option Explicit
Dim SL_BanGhi As Integer

'/// Bin lu s lng bn ghi thm vo

'/// Khi ngi dng click vo no th bin Row v Col s lu ch s hng v ct ca


'/// Hm Round(X,N) tr v gi tr lm trn s X n n ch s sau du chm.

Private Sub cmdCapnhat_Click()


Dim DongHienTai As Integer
DongHienTai = flxDanhSach.Row

'/// Ly dng hin ti ang c chn

Trang 104

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

'/// s dng t kho with trnh vit li tn


With flxDanhSach
.TextMatrix(DongHienTai, 1) = txtHoVaTen.Text
.TextMatrix(DongHienTai, 2) = txtPascal.Text
.TextMatrix(DongHienTai, 3) = txtC.Text
.TextMatrix(DongHienTai, 4) = txtVB.Text
.TextMatrix(DongHienTai,5)=(Val(txtPascal.Text)+Val(txtC.Text)+Val(txtVB.Text)) / 3

.TextMatrix(DongHienTai, 5) = Round(.TextMatrix(DongHienTai, 5), 1)


End With
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Ghi danh sch nhp vo FlexGrid ra mt file vn bn. Mi bn ghi trn mt dng

Private Sub cmdLuu_Click()


Dim F As Long, i As Integer, S As String
F = FreeFile
'/// xin mt th file cn trng
Open "c:\FlexGrid.txt" For Output As #F
'/// m ghi (output = ghi)
For i = 1 To SL_BanGhi
With flxDanhSach
S= .TextMatrix(i, 0) & vbTab & .TextMatrix(i, 1) & vbTab & .TextMatrix(i, 2)
S= S & .TextMatrix(i, 3) & vbTab & .TextMatrix(i, 4) & .TextMatrix(i, 5)
Print #F, S
'/// hm Print ghi gi tr S vo file F
End With
Next
Close #F
'/// ng file vi th file F
MsgBox " lu d liu ra tp C:\FlexGrid.txt !", vbInformation
End Sub
'----------------------------------------------------------------------------------------------------------------------------'/// Thm mt bn ghi mi vo FlexGrid

Private Sub cmdThem_Click()


SL_BanGhi = SL_BanGhi + 1

'/// tng s lng bn ghi mi khi thm

'//// Xin thm dng mi nu FlexGrid b y

If flxDanhSach.Rows = SL_BanGhi Then flxDanhSach.Rows = SL_BanGhi + 1


With flxDanhSach
.TextMatrix(SL_BanGhi, 0) = SL_BanGhi
.TextMatrix(SL_BanGhi, 1) = txtHoVaTen.Text
.TextMatrix(SL_BanGhi, 2) = txtPascal.Text
.TextMatrix(SL_BanGhi, 3) = txtC.Text
.TextMatrix(SL_BanGhi, 4) = txtVB.Text
.TextMatrix(SL_BanGhi,5)=(Val(txtPascal.Text)+Val(txtC.Text)+Val(txtVB.Text)) / 3

.TextMatrix(SL_BanGhi, 5) = Round(.TextMatrix(SL_BanGhi, 5), 1)


End With
txtHoVaTen.Text = ""
txtPascal.Text = ""
txtC.Text = ""
txtVB.Text = ""
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Xo bn ghi (dng) hin hnh bng phng thc RemoveItem. Cn bt li y.

Private Sub cmdXoa_Click()


On Error Resume Next
flxDanhSach.RemoveItem flxDanhSach.Row '/// Xo dng hin ti (Row)
SL_BanGhi = SL_BanGhi - 1

Trang 105

BI TP LP TRNH HNG S KIN

If err Then MsgBox err.Description


End Sub

Bin son: B mn CNPMHSPKT HY 2005


'/// Hin th thng bo khi c li xy ra

'///--------------------------------------------------------------------------------------------------------------------------------'/// Hin th gi tr ca dng hin ti trong FlexGrid mi khi ngi dng Click ln dng

Private Sub flxDanhSach_Click()


Dim DongHienTai As Integer
DongHienTai = flxDanhSach.Row
txtHoVaTen.Text = flxDanhSach.TextMatrix(DongHienTai, 1)
txtPascal.Text = flxDanhSach.TextMatrix(DongHienTai, 2)
txtC.Text = flxDanhSach.TextMatrix(DongHienTai, 3)
txtVB.Text = flxDanhSach.TextMatrix(DongHienTai, 4)
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// t mt s thuc tnh khi u cho FlexGrid. (Bn cng c th t n trong lc thit k)

Private Sub Form_Load()


With flxDanhSach
.Font.Name = ".vnArial"
.Font.Size = 12
.Rows = 2
.Cols = 6
.FixedCols = 0
.AllowUserResizing = flexResizeBoth
.TextMatrix(0, 0) = "S TT"
.TextMatrix(0, 1) = "H v tn"
.TextMatrix(0, 2) = "Pascal"
.TextMatrix(0, 3) = "C++"
.TextMatrix(0, 4) = "VB"
.TextMatrix(0, 5) = "Trung bnh chung"
End With
SL_BanGhi = 0
End Sub

'/// S lng hng


'/// S lng ct
'/// S ct c nh (c Mu xm)
'/// Cho php ko gin hng / ct
'/// t tiu cho cc ct

c. Ghi ch:

FlextGrid cng quan nim ma trn hng v ct cng c th coi nh mt mng,


khi c th truy cp tng phn t ca mng thng qua ch s,
V d : <Tn Flex>.Array(i) s tr v phn t th i.

Cng c th chn mt nh vo cc ca Flex. V d t nh trong iu


khin Picture1 vo hin hnh th vit:
flxDanhSach.PictureType = flexPictureColor
Set flxDanhSach.CellPicture = Picture1.Picture

Bi 4
a. Hng dn:

Mun m mt trang Web th s dng phng thc Navigate hoc Navigate2


ca iu khin Web Browser.

Ngoi ra, nu c nhu cu truy cp trc tip ti tng phn t trong trang web
ang c m th cn phi khai bo mt i tng HTMLDocument (i
tng ny nm trong th vin HTML Object Library). Trong dng phng
thc getElementById tham chiu n i tng trn trang web thng qua
tn ca i tng y. v dng phng thc getAttribute ly gi tr mt thuc
tnh no ca i tng tham chiu bi getAttribute.

Trang 106

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

bit r hn v cc i tng trn trang Web, cn nm r m hnh DOM.

b. Chng trnh mu
Form1.frm
Option Explicit
Dim Doc As HTMLDocument

'/// Bin tr n i tng ti liu (Document) ang m

'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub Form_Load()


webMain.Navigate "about:blank"
cmdGhiGiaTri.Enabled = False
cmdDocGiaTri.Enabled = False
End Sub

'/// M mt trang web trng - Blank


'/// tm thi cm nt ny

'///--------------------------------------------------------------------------------------------------------------------------------'///Phng thc getElementById ("HopBox") s tham chiu n i tng c tn l "HopBox"


'/// Phng thc getAttribute("value") s c gi tr ca thuc tnh "value" ca i tng

Private Sub cmdDocGiaTri_Click()


MsgBox Doc.getElementById("HopBox").getAttribute("value")
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Phng thc setAttribute("value", S) s gn gi tr S vo thuc tnh c tn l "value"

Private Sub cmdGhiGiatri_Click()


Dim S As String
S = InputBox("Nhp mt xu ch lu textbox")
Call Doc.getElementById("HopBox").setAttribute("value", S)
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Phng thc Navigate ca iu khin Webbrowser dng m mt trang Web

Private Sub cmdMo_Click()


webMain.Navigate txtURL.Text
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Ton b ni dung ca trang Web c lu trong thuc tnh innerHTML.
'/// Do vy thm ni dung vo trang Web th ta ch vic ghp thm vo thuc tnh ny

Private Sub cmdTaoNut_Click()


Doc.body.innerHTML=Doc.body.innerHTML &"<input Name='HopBox' value='DHSPKTHY'>"
Doc.body.innerHTML=Doc.body.innerHTML &"<input type=Button value='Click here'>"

cmdGhiGiaTri.Enabled = True '/// thm nt ri nn cho php c v ghi gi tr vo.


cmdDocGiaTri.Enabled = True
cmdTaoNut.Enabled = False
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Ghp ni dung cn thm vo thuc tnh innerHTML. bit r v cch t chc ni dung
'/// ca trang Web, hy vo Internet bit r v m hnh i tng ti liu DOM.

Private Sub cmdThemHello_Click()


Doc.body.innerHTML = Doc.body.innerHTML & "<h2 style = 'color:blue'>Hello </h2>"

End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Khi trang web m xong mt trang th s kin ny xut hin. Khi ta mi cho
'/// bin i tng Doc "tr" n i tng Document ny (Phi s dng cu lnh Set).

Private Sub webMain_DocumentComplete(ByVal pDisp As Object, URL As Variant)


Set Doc = webMain.Document
End Sub

Trang 107

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

c. Ghi ch:

y l vn cc k quan trng khi chng ta mun thao tc (c/ ghi) n ni


dung ca mt trang Web thng qua mi trng VB.
Hiu r bn cht ca m hnh i tng ti liu (DOM) trong trang web gip ta
c th xy dng c rt nhiu ng dng, v d : C th xy dng cc
chng trnh h tr download hng lot nh TeleportPro, WebZip, Chat.
Bn c cng c th tham kho sch v HTML, DHTML & JavaScript ti
Trung tm Aptech bit r hn v m hnh DOM, v innerHTML .

Bi 5
a. Hng dn: Internet control c th ly d liu t my ch v thng qua 2 giao
thc l HTTP v FTP. Phng thc OpenURL l cch n gin ly d liu v,
ng thi c th lu ngay vo file. Phng thc ny cng c gi l phng thc
hot ng ng b (synchronous), c ngha l vic ly d liu v phi c hon tt
th cc lnh tip sau mi c thc hin. Cng c th nhn d liu bng phng
thc khc nh Execute, nhng phng thc Execute li hot ng ch khng
ng b (Asynchronous), tc l cu lnh tip theo lnh ny s c thc hin khng
ph thuc vo vic d liu ly v hay cha (Thng s dng trong ng dng
phc tp). Trong trng hp ny, xin s dng phng thc OpenURL ly d liu
v. C php ca phng thc ny nh sau:
OpenURL url [, <Kiu d liu ly v>]. Trong , url l a ch ca trang Web (v
d http:///www.myweb.com/index.htm hay ftp://home.com/default.html), Cn kiu d
liu ly v cho bit l d liu ly v xem nh mt mng xu (hng icString) hay mt
mng byte (hng icByteArray). Mc nh xem nh mt mng xu.
b. Chng trnh mu
Form1.frm
Option Explicit
'/// Cc hm API nn copy t API Text Viewer

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd
As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As
String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
'/// Thc hin download trang web khi click nt Download

Private Sub cmdDownload_Click()


Dim bData() As Byte
'/// Mng Byte cha d liu Download v
Dim F As Long
F = FreeFile()
'///Kt qu ca phng thc OpenURL s c lu vo mt mng Byte v c lu ra a

bData() = Inet1.OpenURL(txtURL.Text, icByteArray)


Open "c:\Tam001.htm" For Binary Access Write As #F
Put #F, , bData()
'/// ghi vo file
Close #F
'/// ng file
If MsgBox(" lu ra a. Bn c mun m khng ?", vbYesNo) = vbYes Then
ShellExecute Me.hWnd, "open", "c:\Tam001.htm", vbNullString, "c:\", 1
End If
End Sub

Trang 108

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

c. Ghi ch:

Nhiu ng dng c th ly v v hin th trn mt iu khin no , v d


Richtext th c th vit nh sau:
Private Sub Form_Load()
Inet1.AccessType = icUseDefault
RichTextBox1.Text = Inet1.OpenURL (InputBox("URL", ,"ftp://ftp.microsoft.com"))
End Sub

Phng thc Execute cho php ta thc hin rt nhiu lnh FTP chun nh
LS, DIR, CDUP, CD, PUT, GET, SEND v.vdo vy c th d dng vit cc
ng dng FTP Client (nh CuteFTP chng hn)

iu khin ny cng c th s dng rt tt vo vic gi (Upload) mt file ln


Server thng qua giao thc FTP. Thc t c th c s dng chuyn file
ln cc my Server cc b.
Cc v d v phng thc Execute, OpenURL, GetChunk ca iu khin
ny rt nhiu v rt hay, c gii thiu rt k trong MSDN.

Bi 6

a. Hng dn: Ch cn s dng 2 thuc tnh c bn l FileName v Command.


bit r hn, c th tham kho thm trong MSDN.
b. Chng trnh mu
Form1.frm
Option Explicit
Private Sub cmdOpenFile_Click()
'/// Ch hin th cc file c ui wav, avi v *.*

dlgOpenFile.Filter = "Cac file Wav va AVI (wav,avi)|*.wav;*.avi| Tat ca |*.*|"


dlgOpenFile.ShowOpen
mmcPlayer.FileName = dlgOpenFile.FileName
Select Case LCase(Right(dlgOpenFile.FileName, 3)) '/// Kim tra phn ui
Case "wav"
mmcPlayer.DeviceType = "WaveAudio"
Case "avi"
mmcPlayer.DeviceType = "AVIVideo"
Case "cda"
mmcPlayer.DeviceType = "CDAudio"
'..............................................................................
End Select
mmcPlayer.Command = "open"
End Sub

'/// bt u Play

'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub Form_Load()


'/// t mt s thuc tnh cho iu khin (Xin tham kho ngha trong MSDN).

mmcPlayer.Notify = False
mmcPlayer.Wait = True
mmcPlayer.Shareable = False
End Sub
'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub Form_Unload(Cancel As Integer)


mmcPlayer.Command = "Close"
'/// Gii phng ti nguyn trc khi thot

Trang 109

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

End Sub

c. Ghi ch:

y l iu khin rt hay c dng trc kia, tuy nhin hin nay c cc


iu khin mnh m hn rt nhiu, nh iu khin Window Media Player hay
Window Active Movie chng hn (s c gii thiu trong bi 14). Do vy, bi
ny ch gii thiu vi mc ch tham kho thm.

mt nt (Command button) c th hin th c biu tng trn th cn


t thuc tnh Style = Graphical trong lc thit k.

Bi 7
a. Hng dn:
iu khin ny rt hay trong mt s bi ton m gi tr hay thm ch l cu lnh c
nhp vo khi chng trnh ang chy. Do vy n s v cng hu ch cho nhng bi
ton m gi tr v cng thc tnh ton a vo l khng bit trc. Trong bi tp ny
ly v d v vic ngi dng nhp vo mt biu thc ton hc bt k v chng trnh
s tnh v cho ra kt qu s dng iu khin Script.
b. Chng trnh mu
Form1.frm
Option Explicit
'/// Phng thc Eval s tr v gi tr tnh ton c (trong trng hp khng c li).

Private Sub cmdketqua_Click()


MsgBox scrMain.Eval(txtBieuThucToanHoc.Text)
End Sub

c. Ghi ch: iu khin Script cn h tr kh nng a v thc thi cc cu lnh ca


VB ngay khi chng trnh ang chy. V d sau y s gi mt th tc t Script:
Private Sub Form_Load()
Dim S As String
S = "Private Sub Hello()" & vbCrLf
S = S & "Msgbox ""Hello World. Ti n t Script Control !""" & vbCrLf
S = S & "End Sub"
'/// Thm m lnh vo Script
scrMain.AddCode S
scrMain.ExecuteStatement "Call Hello()"
'/// Thc thi m lnh
End Sub
Cng xin ni thm rng : Trong VB, v du nhy kp l mt k hiu dng bao mt
hng xu, do vy khi mun thm chnh k hiu vo trong mt xu th cn thm
vo trc mt du nhy kp na (tc 2 du nhy kp th c mt du).

Bi 8
a. Hng dn: Thc t th iu khin TAB rt hay c dng, tuy nhin li rt n
gin. Do vy bi ny s s dng thm mt iu khin c gii thiu l FlexGrid
vit mt chng trnh chi c CARO cho thm phn th v. ( chng trnh c
th kim tra c ai thng ai thua th bn c c th tham kho thm thut ton
phn chng trc hon thin hn). Vi vic chi c ca 2 ngi, tng chnh
ca chng ta l dng mt bin theo di hin trng l ai ang i, ngi 1 hay

Trang 110

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

ngi 2 chng ta c th in c cc k hiu tng ng l "X" hay "O". Trong


qu trnh in cng cn phi kim tra xem in ri th thi.
b. Chng trnh mu
Form1.frm
Option Explicit
Dim KichThuoc As Integer
Dim NguoiDi As Integer
Dim Nguoi1 As String, Nguoi2 As String

'/// Lu kch thc ca bn c


'/// Cho bit l ai ang i
'/// Lu k hiu "X" v "O" ca 2 ngi chi

'/// To mt bn c mi vi kch thc bn c l KichThuoc x KichThuoc

Sub BanCoMoi()
flxBanCo.Rows = KichThuoc
flxBanCo.Cols = KichThuoc
Dim i As Integer
'/// t kch thc mi thnh vung, v t co gin theo rng ca FlexGrid

For i = 0 To flxBanCo.Rows - 1
flxBanCo.RowHeight(i) = flxBanCo.Height \ flxBanCo.Rows
flxBanCo.ColWidth(i) = flxBanCo.RowHeight(i)
Next
'/// Xo trng cc trn bn c. (TextArray s xem Grid nh mt mng)

For i = 0 To flxBanCo.Rows * flxBanCo.Cols - 1


flxBanCo.TextArray(i) = ""
Next
'/// Cho ngi 1 c i trc
NguoiDi = 1
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Mi khi click chut th tu theo trc l ai i in k hiu "X" hay "O" cho ph hp
'/// Sau in xong th li " cho ngi sau i" bng cch o li gi tr ca NguoiDi 1 2.

Private Sub flxBanCo_Click()


'/// Nu ny c in ri th khng lm g (Exit Sub)

If flxBanCo.TextMatrix(flxBanCo.Row, flxBanCo.Col) <> "" Then Exit Sub


If NguoiDi = 1 Then flxBanCo.TextMatrix(flxBanCo.Row, flxBanCo.Col) = Nguoi1
If NguoiDi = 2 Then flxBanCo.TextMatrix(flxBanCo.Row, flxBanCo.Col) = Nguoi2

If NguoiDi = 1 Then
NguoiDi = 2
Else
NguoiDi = 1
End If
End Sub

'/// Nu Ngi 1 i ri
'/// ngi 2 i
'/// ngi 1 i

'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub Form_Load()


sstMain.Tabs = 2
sstMain.TabCaption(0) = "Bn c Caro"
sstMain.TabCaption(1) = "Cu hnh"
KichThuoc = 8

'/// To 2 trang (TAB)


'/// t caption cho tab th 1
'/// t caption cho tab th 2
'/// Mc nh kch thc bn c l 8x8

'/// Cc thuc tnh ny c th t trong ca s Properties.

flxBanCo.BorderStyle = flexBorderNone
flxBanCo.BackColorBkg = &HFFFFFF

Trang 111

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

flxBanCo.Width = flxBanCo.Height
flxBanCo.FixedCols = 0
flxBanCo.FixedRows = 0
NguoiDi = 1
Nguoi1 = "X"
Nguoi2 = "O"

'/// Cho ngi 1 i trc


'/// K hiu nc i ca ngi 1 l "X"
'/// K hiu nc i ca ngi 2 l "O"

Call BanCoMoi
End Sub

'/// V bn c

'///--------------------------------------------------------------------------------------------------------------------------------'/// Nu ngi 1 i trc th ta t k hiu Nguoi1 = "X" tri li ta t Nguoi1 = "O"

Private Sub cmdThietLap_Click()


If Val(txtKichThuoc.Text) = 0 Then Exit Sub
KichThuoc = Val(txtKichThuoc.Text)

'///Nu khng l s th thot

If optNguoi1.Value = True Then


Nguoi1 = "X"
Nguoi2 = "O"
Else
Nguoi1 = "O"
Nguoi2 = "X"
End If
BanCoMoi
End Sub

'/// V li bn c

'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub cmdVanMoi_Click()


Call BanCoMoi
End Sub

c. Ghi ch:

C th chn hnh nh vo cc thay v k t cho chng trnh thm sinh


ng hn. Hy tham kho bi s 3 v cch chn nh vo trong mt (Cell).

Kt hp vi bi ton kim tra 5 cng s 1 thng hng chng trc


kim tra xem ai thng sau mi nc i.

C th p dng cho tr chi Line.

Bi 9
a. Hng dn: i vi thanh tin trnh th ta cn quan tm n cc thuc tnh sau:

Min : Gi tr nh nht ca thanh tin trnh

Max : Gi tr ln nht ca thanh tin trnh

Value : Gi tr hin thi ca thanh ca thanh

Trong qu trnh lm vic, ta c th thay i cc gi tr ny cho ph hp !

Hnh 4.16 - Minh ha 3 thuc tnh quan trng ca thanh tin trnh
b. Chng trnh mu
Trang 112

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Form1.frm
Option Explicit
'/// Khi m file ch, dng hm Dir kim tra tp c tn ti hay khng.

Private Sub cmdMoFileDich_Click()


dlgMain.Filter = "Tt c cc file (*.*)|*.*|"
dlgMain.DialogTitle = "Nhp vo tn file lu"
dlgMain.ShowOpen
txtFileDich.Text = dlgMain.FileName
If Dir(txtFileDich.Text) <> "" Then MsgBox "File ch s b ghi !", vbCritical
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Cho ngi dng chn tn file ngun cn copy

Private Sub cmdMoFileNguon_Click()


dlgMain.Filter = "Tt c cc file (*.*)|*.*|"
dlgMain.ShowOpen
txtFileNguon.Text = dlgMain.FileName
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// y thy c thanh tin trnh chy, ta copy tng byte mt.
'/// Tuy nhin, trong thc hnh gi tr ca Buffer cng ln th tc cng nhanh.

Private Sub cmdCopy_Click()


Dim F1 As Long, F2 As Long
Dim Buffer As String * 1
F1 = FreeFile
Open txtFileNguon.Text For Binary As #F1

'/// Vng m 1 byte.

'/// c/ ghi ch nh phn

F2 = FreeFile
Open txtFileDich.Text For Binary As #F2
pgrCopyFile.Value = 0
pgrCopyFile.Max = FileLen(txtFileNguon.Text) + 1
Do While Not EOF(F1)
Get #F1, , Buffer
Put #F2, , Buffer

'/// (Get) c mt byte t file ngun


'/// (Put) Ghi vo file ch

pgrCopyFile.Value = pgrCopyFile.Value + Len(Buffer)


lblPhanTram.Caption = Round(pgrCopyFile.Value/pgrCopyFile.Max * 100) & " %"

DoEvents '/// cho CPU x l cc ng dng khc, trnh chim dng ti nguyn
Loop
Close #F1
Close #F2
MsgBox " copy xong !", vbInformation
End Sub

c. Ch :

Trong khi thao tc phi m bo gi tr Value khng c vt qu Max.


C th thay i cch hin th khc bng vic t li thuc tnh "Scrolling"
Mun hin th c nh trn cc nt chun (Command button) th cn t
thuc tnh Style = 1 Graphical.
Trang 113

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 10
a. Hng dn: Vic thao tc ging nh iu khin ComboBox. Tuy nhin cn lu l
ImageCombo cn phi (Bind) gn kt vi mt iu khin ImageList c th ly nh
(Icon) t ra hin th. Vic gn kt c th s dng cu lnh Set nh chng
trnh mu di y, hoc cng c th t trong lc thit k (vo Properties). Ngoi
ra, iu khin ImageCombo c "2 ni" (trng) lu d liu cho mt mc l Key v
Text. Mi mt phn t (item) thng c mt gi tr chng trnh thao tc (thng
ngn gn - Key) v mt gi tr hin th cho ngi dng quan st (thng tin Ting
vit c du - Text). Thuc tnh ComboItems s qun l v thao tc vi cc mc ny.
Mun truy cp n mc i, ta vit: ComboItems (i). Mi mc i l mt i tng
ComboItemvi rt nhiu thuc tnh. (Xin tham kho thm trong MSDN) .
b. Chng trnh mu
Form1.frm
Option Explicit
Private Sub cmdGui_Click()
Shell "Net.exe Send " & cboComputer.Text & " " & txtThongBao.Text, vbHide
End Sub
'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub Form_Load()


Dim i As Integer
Set cboComputer.ImageList = imlBieuTuong
'/// Chn tn ca 5 my tnhvo Combobox

For i = 1 To 5
cboComputer.ComboItems.Add , ,"My " & i, "icoComputer"
Next
End Sub

c. Ch : chy c chng trnh trn th trc ht bn cn phi thm mt


ImageList vo form vi tn l imlBieuTuong v trong imlBieuTuong phi c mt biu
tng c t vi tn (Key) l icoComputer.

Hnh 4.17- Khi thm biu tng vo ImageList cn t mt tn thay v ch s mc nh

Trang 114

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 11
a. Hng dn: i vi listview, iu khin ny c rt nhiu tp hp con bn trong n
v nhiu ngi rt d b nhm ln gia cc khi nim nh, ListItem, SubItems v.v
Trc tin xin gii thiu vi bn c mt cch trc quan v cc khi nim trn.

Nh vy:

Mun thm cc ct th tham kho n thuc tnh ColumnHeaders

Mun thm cc hng (mi hng gm 3 trng thng tin) nh trn th tham
kho n thuc tnh ListItems. Thuc tnh ListItems l mt tp hp, do vy
mun thm mt mc (ListItem) th c th s dng phng thc Add. Phng
thc ny tr v mt ListItem. Khi mt hng (listItem) c to ra th ta c th
in d liu cho cc mc con i (i>= 2) thng qua thuc tnh SubItems tng
ng.

Vic truy cp n tng phn t (tng hng) c th vit ListItems(i), trong i


l ch s ca hng cn tham chiu n. Tip theo mun in ni dung vo ct
u tin ca hng i th vit : ListItems(i).Text = "Ct u tin, hng th i".
Cn
mun
in
tip
vo
ct
th
2
v
3
th
vit,
v d: ListItems(i).SubItems(1) = "Hng i ct 2"
ListItems(i).SubItems(2) = "Hng i ct 3"

Thuc tnh ColumnHeaders qun l phn tiu ca mi ct, ListItems qun


l tt c cc hng v SubItems qun l cc ct trong cng mt hng.

b. Chng trnh mu
Form1.frm
Option Explicit
'/// Mc nh khi ngi dng 2 ln click ln mt mc th Listview s cho sa i.
'/// Ta c th khng cho php iu ny bng cch t li thuc tnh LabelEdit.

Private Sub chkEditLabel_Click()


lvwDSSV.LabelEdit = chkEditLabel.Value
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Listview cng h tr kh nng la chn nhiu mc ng thi (Click chut + Ctrl)

Trang 115

BI TP LP TRNH HNG S KIN


'/// Thuc tnh MultiSelect =True

Bin son: B mn CNPMHSPKT HY 2005

Cho php a la chn.

Private Sub chkMultiSelect_Click()


lvwDSSV.MultiSelect = (chkMultiSelect = 1)
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// FullRowSelect=true
khi ngi dng click mt th ton b s c chn (highlight)

Private Sub chkSelectRow_Click()


lvwDSSV.FullRowSelect = chkSelectRow.Value = 1
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'//// GridLines = True
S hin th li trong Grid

Private Sub chkShowGrid_Click()


lvwDSSV.GridLines = chkShowGrid.Value = 1
End Sub
'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub cmdThem_Click()


Dim Item As ListItem
Set Item = lvwDSSV.ListItems.Add
Item.SmallIcon = "icoFace"
Item.Icon = "icoFace"

'/// Thm mt dng mi v Item tr n mc ny


'/// Biu tng khi hin th ch Report
'/// Khi hin th ch Icon

Item.Text = txtHoVaTen.Text
'/// ct th nht lu H v tn
Item.SubItems(1) = txtNgaySinh.Text '/// ct th 2 cha ngy sinh
Item.SubItems(2) = txtQueQuan.Text '/// ct th 3 cha qu qun
End Sub
'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub cmdDocHangHT_Click()


If lvwDSSV.SelectedItem Is Nothing Then Exit Sub
Debug.Print "Text (Ct 1) = " & lvwDSSV.SelectedItem.Text
Debug.Print "Text ca ct 2 = " & lvwDSSV.SelectedItem.SubItems(1)
Debug.Print "Text ca ct 3 = " & lvwDSSV.SelectedItem.SubItems(2)
End Sub
'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub cmdDocNhieuHang_Click()


Dim i As Integer
For i = 1 To lvwDSSV.ListItems.Count
If lvwDSSV.ListItems(i).Checked = True Then
Debug.Print "Gi tr Text Ct 1 = " & lvwDSSV.ListItems(i).Text
Debug.Print "Gi tr Text Ct 2 = " & lvwDSSV.ListItems(i).SubItems(1)
Debug.Print "Gi tr Text Ct 3 = " & lvwDSSV.ListItems(i).SubItems(2)
End If
Next
'/// Cch 2
Dim obj As ListItem
For Each obj In lvwDSSV.ListItems
If obj.Selected = True Then
Debug.Print "Gi tr Text Ct 1 = " & obj.Text
Debug.Print "Gi tr Text Ct 2 = " & obj.SubItems(1)
Debug.Print "Gi tr Text Ct 3 = " & obj.SubItems(2)
End If
Next
End Sub
'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub Form_Load()


Dim P As ListImage

Trang 116

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

'/// 3 dng ny c th b qua nu bn thm vo imlBieuTuong 1 biu tng tn l "icoFace"


'/// trong lc thit k (vo phn Properties). y xin thm bng m lnh.

imlBieuTuong.ImageHeight = 16
imlBieuTuong.ImageWidth = 16
imlBieuTuong.ListImages.Add , "icoFace", LoadPicture("C:\Program Files\Microsoft Visual
Studio\Common\Graphics\Icons\Misc\FACE02.ICO")

lvwDSSV.Icons = imlBieuTuong
'/// Biu tng khi hin th ch Icons
lvwDSSV.SmallIcons = imlBieuTuong
'/// ch SmallIcon (Report)
lvwDSSV.ColumnHeaderIcons = imlBieuTuong '/// Hin th ct tiu (Header)
lvwDSSV.ColumnHeaders.Add , "hoten", "H v tn", , , "icoFace"
lvwDSSV.ColumnHeaders.Add , "ngaysinh", "Ngy sinh"
lvwDSSV.ColumnHeaders.Add , "quequan", "Qu qun"
lvwDSSV.View = lvwReport
End Sub

'/// Cho hin th ch Report

'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub optIcon_Click()


lvwDSSV.View = lvwIcon
End Sub

'/// Hin th ch Icon

'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub optList_Click()


lvwDSSV.View = lvwList
End Sub

'/// Hin th ch danh sch

'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub optReport_Click()


lvwDSSV.View = lvwReport
End Sub

'/// Hin th ch bo co (Report)

'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub optSmallIcon_Click()


lvwDSSV.View = lvwSmallIcon
End Sub

'/// Hin th ch biu tng nh

c. Ghi ch: ListView c rt nhiu thuc tnh do vy cng khng th a ht vo y


c. V vy, cch tt nht bn hiu r hn v n l hy t thay i cc tham s
sau chy chng trnh v quan st. T t rt ra nhng thng tin b ch.
Bi 12
a. Hng dn: V mt trnh din (Hin th) th iu khin ny gip ta hin th cc mc
theo mt cu trc cy. Tuy nhin v bn cht ci t th cc mc trong cy u nm
trong mt tp hp l Nodes. Tp hp nodes l mt thuc tnh ca cy. N c y
cc phng thc v thuc tnh ca mt tp hp nh : Add, Count, Items,
RemoveItem, Clear v.v
i vi TreeView, cn quan tm n mt s thuc tnh, phng thc v s kin sau
y:

Thuc tnh SelectedItem : Tr v nt ang c chn, nu khng c nt no


c chn th tr v gi tr l "nothing"

Trong tp hp Nodes: Phng thc Add dng thm mt nt vo cy. Lu


l trng Kho (Key) ca mi nt l duy nht khi Add, nu khng chng
trnh s b li. Khi thm vo th ta c th thm vo mt nt con, mt nt anh
em.Phng thc RemoveItem(i) dng xo nt i khi cy (khi cc con
ca i cng s b xo). Phng thc Nodes.Clear dng xo ton b cc nt
Trang 117

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

trong cy. Thuc tnh Nodes.Items(i) cng tr v nt i. Thuc tnh


Nodes.Count cho bit hin ti ang c bao nhiu nt thuc cy.

Ngoi ra cn mt s thuc tnh qui nh dng v hin th ca cy nh Hover,


HideSelection, LabelEdit v.vCc thuc tnh ny c th t bng m lnh
hoc t trong khi thit k.

Th tc s kin Click s c kch hot khi ngi dng click vo mt nt


trong cy. Khi ta thng tham chiu n thuc tnh SelectedItem.

b. Chng trnh mu
Form1.frm
Option Explicit
Dim STT As Integer '/// Bin ghi s lng phn t. S t ng tng khng xung t.
'///---------------------------------------------------------------------------------------------------------------'/// c gi tr ca nt hin ti (nt c chn) v hin th 2 trng l Key v Text ra mn hnh
'///Thuc tnh SelectedItem tr v nt ang c chn. Nu khng c nt no c chn th
'/// thuc tnh ny c gi tr l NOTHING. Do vy cn kim tra bng cu lnh If is nothing
'///---------------------------------------------------------------------------------------------------------------------------

Private Sub cmdDocGiaTri_Click()


Dim NutHienTai As Node
Set NutHienTai = tvwDSSV.SelectedItem
If NutHienTai Is Nothing Then Exit Sub
MsgBox "Key = " & NutHienTai.Key & ". Text = " & NutHienTai.Text
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Xin gii thiu 2 cch c (Duyt) cy. Dng cu trc cy v tp hp

Private Sub cmdDocTatCa_Click()


Dim Nut As Node
For Each Nut In tvwDSSV.Nodes
Debug.Print "Key = " & Nut.Key & vbTab & vbTab & " Text = " & Nut.Text
Next
'/// Cch 2 (S dng khi nim tp hp (Collection).

Dim i As Integer
For i = 1 To tvwDSSV.Nodes.Count
Debug.Print tvwDSSV.Nodes.Item(i).Key &",Text=" & tvwDSSV.Nodes.Item(i).Text

Next
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Th tc in tt c cc nt anh em lin k (Cng mc) trong cy

Private Sub cmdPrintAnhEm_Click()


Dim Nut As Node
If tvwDSSV.SelectedItem Is Nothing Then Exit Sub
Set Nut = tvwDSSV.SelectedItem.FirstSibling '/// Tr n nt "anh c"
'/// sau Print cc nt, t v tr "Anh c" cho n ht

Do While Not (Nut Is Nothing)


Debug.Print "Key = " & Nut.Key & vbTab & " Text = " & Nut.Text
Set Nut = Nut.Next
'/// Tr n nt ngay cnh
Loop
End Sub

Trang 118

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

'///--------------------------------------------------------------------------------------------------------------------------------'/// In nt cha ca nt ang c chn. y SelectedItem tr v nt hin ti


'/// Thuc tnh Parent tr v nt cha. (Cn kim tra xem c tn ti trc khi thao tc)

Private Sub cmdPrintCha_Click()


Dim NutCha As Node
If tvwDSSV.SelectedItem Is Nothing Then Exit Sub
Set NutCha = tvwDSSV.SelectedItem.Parent
If Not (NutCha Is Nothing) Then
MsgBox "Gi tr Key = " & NutCha.Key & vbTab & "Text=" & NutCha.Text
End If
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Th tc thm mt nt vo trong cy. C php ca phng thc thm nt nh sau:

'/// V d: tvwDSSV.Nodes.Add "NUT_GOC", tvwChild, "Con1", "Con th 1", "icoFace" s


'/// thm mt nt c tn (Key) l Con1, nhn hin th l "con th 1", biu tng hin th l icoFace
'/// (nm trong imageList).
'/// Cn lnh : tvwDSSV.Nodes.Add "Con1", tvwNext, "Em1", "Con th 2", "icoFace"
'/// s thm vo mt nt l anh em (cng mc) ca nt "Con1" (tc l con ca "NUT_GOC")

Private Sub cmdThem_Click()


Dim NutHienTai As Node
Set NutHienTai = tvwDSSV.SelectedItem
If NutHienTai Is Nothing Then Exit Sub
tvwDSSV.Nodes.Add NutHienTai.Key, tvwChild, txtMaSV.Text, txtHoVaTen.Text, "icoFace"
NutHienTai.Expanded = True
'/// M (Expend) nt ra

STT = STT + 1
txtMaSV.Text = "SV" & STT
End Sub

'/// m bo cc Key khng trng nhau

'///--------------------------------------------------------------------------------------------------------------------------------'/// Xo nt ang chn. Phng thc Remove cn ch s ca nt cn xo.


'/// Ch s ny t ng c lu trong thuc tnh Index

Private Sub cmdXoaNut_Click()


If tvwDSSV.SelectedItem Is Nothing Then Exit Sub '/// Nu khng c nt th thot
tvwDSSV.Nodes.Remove tvwDSSV.SelectedItem.Index
End Sub
'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub cmdXoaTat_Click()


tvwDSSV.Nodes.Clear '/// Phng thc Clear dng xo mt tp hp ni chung
End Sub
'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub cmdPrintNutCon_Click()


Dim X As Node, N As Node

Trang 119

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Set X = tvwDSSV.SelectedItem
If X Is Nothing Then Exit Sub
If X.children = 0 Then Exit Sub
Set X = X.Child
Do While Not (X Is Nothing)
Debug.Print "Key = " & X.Key & vbTab & "Text = " & X.Text
Set X = X.Next
Loop
End Sub
'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub Form_Load()


'/// 3 dng ny c th b qua nu bn thm vo imlBieuTuong 1 biu tng tn l "icoFace"
'/// trong lc thit k (vo phn Properties). y xin thm bng m lnh.

imlBieuTuong.ImageHeight = 16
imlBieuTuong.ImageWidth = 16
imlBieuTuong.ListImages.Add , "icoFace", LoadPicture("C:\Program Files\Microsoft
Visual Studio\Common\Graphics\Icons\Misc\FACE02.ICO")
tvwDSSV.HideSelection = False
tvwDSSV.LabelEdit = tvwManual
tvwDSSV.ImageList = imlBieuTuong

'/// Lun t sng mc c chn


'/// Khng cho sa i nhn ca nt
'/// S ly biu tng cha trong imlBieuTuong

'/// Thm mt nt gc vo cy
tvwDSSV.Nodes.Add , , "NUT_GOC", "Trng HSPKTHY"
'/// Thm mt s nt con (mc 1) vo sau nt gc

tvwDSSV.Nodes.Add "NUT_GOC", tvwChild, "Khoa CNTT", "Khoa CNTT"


tvwDSSV.Nodes.Add "NUT_GOC", tvwChild, "Khoa CK", "Khoa C Kh"
tvwDSSV.Nodes.Add "NUT_GOC", tvwChild, "Khoa CB", "Khoa C bn"
tvwDSSV.Nodes.Add "NUT_GOC", tvwChild,"Khoa CKDL","Khoa C kh ng lc"
tvwDSSV.Nodes.Add "NUT_GOC", tvwChild, "Khoa D-DT", "Khoa in - in t"
tvwDSSV.Nodes.Add "NUT_GOC", tvwChild, "Khoa MayTKTT", "Khoa May & TKTT"
tvwDSSV.Nodes.Add "NUT_GOC", tvwChild, "Khoa SPKT", "Khoa SPKT"
tvwDSSV.Nodes("NUT_GOC").Expanded = True

'/// M rng nt gc

STT = 1
txtMaSV.Text = "SV" & STT
txtMaSV.Enabled = False
'/// Thm mt na trong Panel (Mc nh mi Panel ch c mt )

staThongTinThem.Panels.Add , , "Gi tr Text ca nt c chn"


staThongTinThem.Panels(1).Text = "Gi tr key ca nt c chn"
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Hin th thng tin ca nt va c chn khi ngi dng click chut

Private Sub tvwDSSV_Click()


staThongTinThem.Panels(1).Text = "Key = " & tvwDSSV.SelectedItem.Key
staThongTinThem.Panels(2).Text = "Text = " & tvwDSSV.SelectedItem.Text
End Sub

c. Ghi ch: Ti mi mt nt bt k, ta c th chuyn n cc nt cha, nt con, nt


anh em lin k v "Anh c", "em t" mt cch d dng thng qua cc thuc tnh
tng ng. Hnh di y s minh ho r nt hn :

Trang 120

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Hnh 4.18 - Mi lin quan gia cc nt vi nt hin ti (SelectedItem)


Bi 13
a. Hng dn: S dng thuc tnh CustomFormat nh dng theo khun dng
mong mun. C th dng cc hm Month, Year v,v trch ring tng thnh phn.
b. Chng trnh mu
Form1.frm
Option Explicit
Private Sub cmdHienThiGiaTri_Click()
With dtpNgayThang
MsgBox "Ngy " & .Day &" Thng " & .Month & " Nm " & .Year
End With
End Sub
'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub Form_Load()


dtpNgayThang.Format = dtpCustom
End Sub

'/// Cho php tu bin nh dng ngy thng

'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub optMy_Click()


dtpNgayThang.CustomFormat = "MM/dd/yyyy"
End Sub

'/// nh dng ngy kiu M

'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub optNhatBan_Click()


dtpNgayThang.CustomFormat = "yyyy/MM/dd"
End Sub
'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub optVietNam_Click()


dtpNgayThang.CustomFormat = "dd/MM/yyyy"
End Sub

Bi 14
a. Hng dn: tng chnh gii quyt bi ny nh sau:

Dng mt form ch cha duy nht mt iu khin l Window Media Player


chuyn thc hin chi cc file hnh v ting. form ny c tn l: frm4_14

Trang 121

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Dng form th hai thc hin iu khin cc thng s ca Window Media


Player trong form th nht. Form ny t tn l : frm4_14_Setting

b. Chng trnh mu
Frm4_14.frm
Option Explicit
Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal
hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal
cy As Long, ByVal wFlags As Long)
'----------------------------------------------------------------------------------------------------------------------------Private Sub Form_Load()
wmpMain.uiMode = "none"
'/// Khng hin th cc iu khin trn WM Player
frm4_14_Setting.Show
'/// M form frm4_14_Setting
SetWindowPos frm4_14_Setting.hWnd, -1,0,0,0,0,83 '/// t ln trn cng (Topmost)
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Khi thay i kch thc form th ta cng ko gin kch thc ca wmpMain bng vi form

Private Sub Form_Resize()


wmpMain.Top = 0
wmpMain.Left = 0
wmpMain.Height = Me.ScaleHeight
wmpMain.Width = Me.ScaleWidth
End Sub
'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub Form_Unload(Cancel As Integer)


MsgBox "Bn khng th ng ca s ny", vbExclamation
'/// Cancel = True
khng cho php ng
Cancel = True
End Sub
'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub wmpMain_PlayStateChange(ByVal NewState As Long)


Static OldState As Integer
If (NewState = wmppsTransitioning) And (OldState = wmppsMediaEnded) Then
If frm4_14_Setting.lstSongList.ListIndex< frm4_14_Setting.lstSongList.ListCount-1 Then
frm4_14_Setting.lstSongList.ListIndex=frm4_14_Setting.lstSongList.ListIndex + 1

Else
frm4_14_Setting.lstSongList.ListIndex = 0
End If
wmpMain.URL=frm4_14_Setting.lstSongList.List(frm4_14_Setting.lstSongList.ListIndex)
'/// Chi file ny
wmpMain.Controls.Play

End If
'/// Cp nht li gi tr Max ca thanh cun gi lp trong frm4_14_Setting
'/// Gi tr Duration cho bit di ca bi ht (cun film)

If (NewState = wmppsPlaying) Then


frm4_14_Setting.scrSeekBar.Max = Round(wmpMain.currentMedia.duration)
End If
OldState = NewState
End Sub

c. Ghi ch:

Khi mun m mt Form no th theo c php : <Tn Form>.Show. cn khi


mun n th gi <Tn Form>.Hide. mun np vo b nh nhng cha mun

Trang 122

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

hin th th vit : Load <Tn Form>. Mun xo khi b nh th vit :


Unload <Tn Form>.
Nu mun truy cp vo mt iu khin mt form khc th ta cn thm phn
tn ca Form cha iu khin cn truy nhp, v d: Form1.Text1.Text,
Form2.txtHoVaTen.text v.v)
Hm SetWindowPos trn l lun t frm4_14_Setting lun lun ni
trn tt c cc ca s khc ! (Bn c th b qua cng c)

Vit code cho Form: frm4_14_Setting


a. Hng dn: Trong Form ny s thc hin iu khin ton b cng vic lin quan
n iu khin Window Media Player form trc, bao gm: Tt loa, tng/gim
volume, bt, tt, tm dng bi ht, di chuyn thanh trt bo hiu thi lng chi
file nhc v.v
b. Chng trnh mu
frm4_14_Setting.frm
Option Explicit
Dim FileHienTai As Integer
'----------------------------------------------------------------------------------------------------------------------------'/// hin th ch ton mn hnh hay khng ? True

c, False

Khng

Private Sub chkFullScreen_Click()


frm4_14.wmpMain.FullScreen = (chkFullScreen.Value = 1)
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Bt / Tt loa. True
Tt, False
Bt

Private Sub chkMute_Click()


frm4_14.wmpMain.Settings.mute = (chkMute.Value = 1)
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Xo mt file khi danh sch

Private Sub cmdLoai_Click()


If lstSongList.ListIndex >= 0 Then lstSongList.RemoveItem lstSongList.ListIndex
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Dng / Tip tc chi file hin hnh

Private Sub cmdPause_Click()


If cmdPause.Caption = "Pause" Then
cmdPause.Caption = "Resume"
frm4_14.wmpMain.Controls.pause
Else
cmdPause.Caption = "Pause"
frm4_14.wmpMain.Controls.Play
End If
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Chi mt file ang c chn trong danh sch

Private Sub cmdPlay_Click()


If lstSongList.Text = "" Then Exit Sub
frm4_14.wmpMain.URL = lstSongList.Text
frm4_14.wmpMain.Controls.Play
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Stop chi file hin hnh.

Private Sub cmdStop_Click()

Trang 123

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

frm4_14.wmpMain.Controls.Stop
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// B sung thm mt file vo danh sch cc bi ht.

Private Sub cmdThemFile_Click()


Dim i As Integer
dlgOpenFile.Filter = "Cc file nhc ting (wav, mp3, wma)|*.wav;*.mp3;*.wma|"
dlgOpenFile.ShowOpen
lstSongList.AddItem dlgOpenFile.FileName
End Sub
'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub Form_Load()


Dim F As Long, BaiHat As String
'/// Np tn cc file lu trong tp vn bn vo danh sch

If Dir("c:\SongList.txt") <> "" Then


F = FreeFile
Open "c:\SongList.txt" For Input As #F
Do While Not EOF(F)
Line Input #F, BaiHat
lstSongList.AddItem BaiHat
Loop
Close #F
End If
FileHienTai = -1
'/// ng h c chc nng lin tc cp nht thi gian chi ca file hin ti

tmrUpdate.Interval = 1000
sldVolume.Max = 100
sldVolume.LargeChange = 10
sldVolume.SmallChange = 5
sldVolume.Value = frm4_14.wmpMain.Settings.volume
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Khi ngi dng thot khi chng trnh th lu li danh sch cc bi ht

Private Sub Form_Unload(Cancel As Integer)


Dim F As Long, i As Integer
F = FreeFile
Open "c:\SongList.txt" For Output As #F
For i = 0 To lstSongList.ListCount - 1
Print #F, lstSongList.List(i)
Next
Close #F
End
End Sub
'///---------------------------------------------------------------------------------------------------------------------------------

Private Sub lstSongList_Click()


FileHienTai = lstSongList.ListIndex
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Thay i tng ng n v tr m ngi dng thay i thanh gt gi lp

Private Sub scrSeekBar_Scroll()


frm4_14.wmpMain.Controls.currentPosition = scrSeekBar.Value
End Sub
'///---------------------------------------------------------------------------------------------------------------------------------

Trang 124

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

'/// iu chnh volume ca loa

Private Sub sldVolume_Click()


frm4_14.wmpMain.Settings.volume = sldVolume.Value
End Sub
'///--------------------------------------------------------------------------------------------------------------------------------'/// Cp nht lin tc thi gian chi file trn thanh gt gi lp

Private Sub tmrUpdate_Timer()


scrSeekBar.Value = Round(frm4_14.wmpMain.Controls.currentPosition)
End Sub

C- BI TP T GII
Bi 1. Vit li chng trnh nghe nhc cho hon chnh hn (Nn tham kho cc chc
nng qun l bi ht ca Winnamp v JetAudio.
Bi 2. S dng iu khin TreeView hin th cu trc cy th mc ca a C:\,
(gi lp iu khin DirListbox). HD: kt hp s dng hm API FindFirst, FindNext
ly danh sch cc file v th mc ca th mc hin hnh, sau chn vo cy.
Bi 3: Vit chng trnh to cy "Gia ph", trong cho php ngi dng c th
thm cc th h con chu (nt con ca nt gc). Sau thc hin m xem mt
ngi (nt) c bao nhiu con chu (nt con).
Bi 4: Vit chng trnh to cy v thc hin vic duyt cy theo nhiu cch khc
nhau (theo cu trc cy nhiu phn thng thng) v duyt s dng khi nim tp
hp (tc duyt tp hp c tn l Nodes ca cy).
Bi 5: Vit chng trnh cho php ngi dng to cy s dng TreeView nhng khi
xo mt nt bt k th cc nt con ca n khng b xo m c y ln mc trn.
Bi 6: Vit chng trnh cho php ngi dng nhp danh sch cc file (c c ng
dn) vo mt ListView. Trong , tu thuc vo file nhp vo c phn m rng l
exe, dll, txt, doc, xls, ppt ... th hin th vi mt biu tng tng ng. V khi ngi
dng click p chut vo mt mc th m file .
Bi 7: S dng iu khin ScriptControl vit chng trnh v th ca hm s,
trong hm s c th nhp vo t bn phm khi chng trnh ang chy.
Bi 8: S dng iu khin Inet, vit chng trnh FTP vi mt s lnh FTP n gin
(HD: Tham kho mt s lnh v v d mu trong MSDN, tra phn Inet control)
Bi 9: Xy dng chng trnh Website Download Manager, chng trnh ny cho
php Download v my tnh mt danh sch cc a ch trang web ch nh. (HD: Xem
bi tp mu trong cng chng ny v xem trong MSDN)
Bi 10: Xy dng chng trnh Download tng t nh trnh Download Webzip.
HD: Xem li m hnh ti liu DOM Document Object Model v s dng iu khin
Webbrowser + th vin HTML Object Library truy cp ni dung (cc links) bn
trong mt trang WEB.

Trang 125

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

chng v

kt ni v thao tc vi csdl
MC TIU: SAU KHI HON THNH CC BI TP, NGI HC C TH
Kt ni n CSDL bng iu khin ADO Data Control v Connection
Truy cp (Select, Update, Delete, Insert) d liu s dng Connection
Gn kt d liu gia cc iu khin vi i tng Connection
Vit c mt s ng dng qun tr CSDL n gin
To v trnh by bo co (Report) in ra my in.

A - BI TP
Qui c
Cc bi tp trong chng ny u lin quan n vic kt ni v thao tc vi mt C
s d liu (CSDL) nht nh, do vy m bo s thng nht cng nh trnh hiu
sai trong mt s tnh hung, y chng ta ch yu s dng c s d liu sn c
khi ci b Visual Studio 6.0, c tn l : Nwind.mdb. S d chng ta chn CSDL ny
lm mu trong hu ht cc bi tp v my l do sau:
Sn c trong my tnh khi ci Visual Basic.
y l mt c s d liu c xy dng thc t t qun l bn hng ca
hng North Wind, do vy cc bi tp lin quan s st vi thc tin hn.
S lng bn ghi trong CSDL ny tng i nhiu, minh ho trong rt
nhiu trng hp, do khng phi mt cng sc li.
Trong CSDL ny c nhiu bng v c chun ho.
C y cc mi quan h 1-nhiu, nhiu-nhiu c th thc hnh vi cc
truy vn nng cao, truy vn trn nhiu bng ng thi.
C s d liu Nwind.mdb thng c lu trong th mc cng vi th mc VB:
C:\Program Files\Microsoft Visual Studio\VB98\NWIND.MDB.
Vi ng dn rt di nh trn, ni chung l khng c thun tin trong khi vit
chng trnh. Ta s gi thit rng, vi mi chng trnh, tp Nwind.mdb s c
Copy vo trong cng th mc vi tp d n. V d, nu ta c mt d n tn l :
QLHSSV.VBP, t trong th mc C:\Projects\QLHSSV th tp Nwin.mdb cng phi
c t trong th mc ny:

Hnh 5.1 Qui c v vic copy v lu tp CSDL Nwind.mdb


Trang 126

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

y cng xin c cung cp danh sch tt c 8 bng v mi quan h gia cc


bng ny chng ta tin theo di v tham kho trong qu trnh lm bi tp.

Hnh 5.2 Cc bng v s lin kt gia chng trong CSDL Nwind.mdb


Kiu d liu ca mi trng trong tng bng cng xin c cung cp ti y:
Hy lu l chi tit ca tng kiu d liu ( rng) trong mi bng c th tham kho
bng cch m trc tip bng ch Design View.

Hnh 5.3 - Bng Suppliers (Nh cung cp)

Trang 127

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Hnh 5.4 - Bng Products (Sn phm)

Hnh 5.5 - Bng Order Details (Chi tit n hng)

Hnh 5.6 - Bng Orders (n hng)

Hnh 5.7 - Bng Customers (Khch hng)

Trang 128

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Hnh 5.8 - Bng Categories (Chng loi sn phm)

Hnh 5.9 - Bng Employees (Nhn vin bn hng)

Hnh 5.10 - Bng Shippers (Cng ty vn chuyn)

Cc bi tp (t 1-11) s dng iu khin ADO Data


Bi 1: Vit chng trnh xem thng tin v khch hng (Version 1).
a. Giao din:

Hnh 5.11 Xem thng tin v khch hng bng ADO Data control v Textbox
b. Yu cu:

Xy dng giao din chng trnh nh hnh 11


C th xem thng tin v khch hng (gm m, h tn, a ch, s in thoi)
bng cch click vo cc nt trn iu khin ADO Data control.
Trang 129

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 2: Vit chng trnh xem thng tin v khch hng (Version 2)


a. Giao din

Hnh 5.12 Xem thng tin v khch hng s dng cc phng thc ca ADO
b. Yu cu

Xy dng giao din nh hnh 12


Chng trnh c th di chuyn n cc bn ghi thng qua cc nt nhn
C cp nht trng thi (Enable/Disable) cc nt khi n BOF, EOF ca bng.
Ni dung trong cc textbox khng c php thay i.

Bi 3: Vit chng trnh xem thng tin v khch hng (Version 3)


a. Giao din

Hnh 5.13 Danh sch khch hng hin th trong Data Grid Control
b. Yu cu : Hin th tt c cc bn ghi trong bng Customers trong mt DataGrid
Bi 4: Vit chng trnh xem thng tin v khch hng (Version 4)
a. Giao din

Hnh 5.14 Thng tin hin th ch gm 4 trng


b. Yu cu: Nh bi 3 nhng thng tin hin th ch gm 4 trng
Trang 130

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 5: Vit chng trnh xem mt bng CSDL bt k trong CSDL NWind


a. Giao din

Hnh 5.15 Np mt bng bt k trong CSDL NWind vo Data Grid


b. Yu cu: Khi ngi dng chn tn bng v click vo nt "Xem bng ny" th
chng trnh np v hin th bng va c chn trong mt Data Grid.
Bi 6: Vit chng trnh np tt c m nh cung cp vo mt hp Combo
a. Giao din

Hnh 5.16 -Np cc m nh cung cp vo mt ComboBox


b. Yu cu: Np tt c cc M nh cung cp (SupplierID) trong bng Suppliers vo
mt hp Combo nh hnh 16
Bi 7: Vit chng trnh lit k cc sn phm do 1 cng ty cung cp (ver 1)
a. Giao din

Hnh 5.17 - Ch hin th cc sn phm ng vi m NCC c chn

Trang 131

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

b. Yu cu:

Np tt c cc m nh cung cp (Supplier) vo hp Combo (Nh bi s 6)

Khi ngi dng chn mt m nh cung cp trong Hp Combo v click nt


"Lit k cc sn phm ca NCC ny" th hin th tt c cc sn phm m nh
cung cp ny cung ng (Nh hnh 17).

Bi 8: Vit chng trnh lit k cc sn phm do 1 cng ty cung cp (ver 2)


a. Giao din

Hnh 5.18 Lit k cc sn phm s dng TreeView v DataGrid


b. Yu cu

Np M (SupplierID) v tn Cng ty (CompanyName) trong bng Suppliers


vo mt cy (TreeVIew), trong M c lu trong trng Key v Tn cng
ty c lu trong trng Text ca mi nt thuc cy.

Khi ngi dng click chut ln mt nt (tn cng ty) trong cy th hin th tt
c cc sn phm m cng ty cung cp (Hin th tt c cc trng trong
bng Products) trong mt Datagrid control nh hnh 18.

Bi 9: Nh bi 8 nhng cc sn phm c hin th trong mt ListView. (


cho ngn gn, hy lit k 3 trng l ProductName,CategoryID,UnitPrice) nh H.19.
a. Giao din:

Hnh 5.19 - Hin th sn phm trong ListView

Trang 132

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

b. Yu cu: Khi ngi dng click vo tn nh cung cp th hin th SP trong ListView


Bi 10: Xy dng cy nhiu mc xem thng tin v nhng sn phm bn
a. Giao din:

Hnh 5.20 Xem thng tin bn hng ca mi sn phm


b. Yu cu:

Np tn cc cng ty cung cp sn phm vo cy (Np vo mc 1, sau gc)


ng vi mi cng ty, np cc sn phm m cng ty sn xut
Khi ngi dng click vo tn mt sn phm (nh hnh 20) th hin th cc ho
n c xut hin sn phm ny. Thng tin hin th gm M, gi, s lng.

Bi 11: B sung thm mt trng mi trong cu lnh SELECT

Hnh 5.21 Thm mt ct (trng) trong cu lnh SELECT


Yu cu: Nh bi 10 nhng thng tin hin th c thm trng "Gi tr", trng ny
c dn xut t vic tnh : Gi tr = Gi * S lng.

Trang 133

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Cc bi tp s dng i tng connection v Recordset


-------------------------------------Bi 12: Thc hin yu cu nh bi tp 5 nhng ch s dng i tng
Connection v i tng Recordset thao tc vi CSDL.
Bi tp 13: Lm li bi 10 vi s dng i tng Connection v Recordset
Bi tp 14: Thao tc CSDL trn nhiu Form
a. M t chng trnh
Trong chng trnh ny, chng ta s xy dng mt ng dng gm 3 Form minh
ho vic s dng i tng kt ni Connection. i tng Connection s c s
dng chung trong tt c cc form (khng ging vi iu khin ADO Data trc y).
ng dng ny s c 3 Form v mt Module:

Form th nht c tn l frmNhapNCC: nhp thm cc nh cung cp vo


bng Suppliers.

Form th hai c tn l frmNhapSP nhp cc sn phm m mt Nh cung


cp sn xut.

Form chnh: Tn l frmMain. Form ny s hin th danh sch cc nh cung


cp v sn phm (nh bi tp s 9). Ngoi ra, trong form ny c 2 nt lnh l
"Nhp NCC" v "Nhp sn phm", khi click vo nt th nht th hin th
frmNhapNCC, khi Click vo nt th hai th hin th frmNhapSP.

Module c tn l modKetNoi: Trong module ny s khai bo bin ton cc l


i tng Connection tn l Cn. i tng Cn ny s c s dng chung
trong cc form.

b. Giao din khi chy chng trnh (Hnh 22,23,24)

Hnh 5.22 Giao din ca form : frmMain

Trang 134

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Hnh 5.23 Giao din form: frmNhapNCC

Hnh 5.24 Giao din form: frmNhapSP


Bi 15: Thit k bo co v kt xut ra my in danh sch cc sn phm (ver 1)

Hnh 5.25 Bo co danh sch cc sn phm in ra my in

Trang 135

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 16: Thit k bo co v kt xut ra my in danh sch cc sn phm (ver 2)

Hnh 5.26 Bo co c thm khung vin (Border)

B- HNG DN - GII MU
Bi 1: Vit chng trnh xem thng tin v khch hng (Version 1).
a. Thit k giao din

Hnh 5.27 - t tn cho cc iu khin trn Form


b. Hng dn : S dng t kho SET gn kt cc Textbox vi ADO data Control.
C 2 cch gn kt, l gn kt trong lc thit k hoc gn kt thng qua m lnh.
gn kt, ch cn t 2 thuc tnh l DataSource v DataField. Datasource cho bit
l ly d liu t ngun no cn Datafield cho bit l ly (hin th) trng no ?
c. Chng trnh mu
Option Explicit
Private Sub Form_Load()
Dim strConn As String
strConn = "Provider=Microsoft.jet.oledb.4.0; Data Source=" & App.Path & "\Nwind.mdb"
adoDSKH.ConnectionString = strConn
adoDSKH.CommandType = adCmdTable
'/// S ly mt bng
adoDSKH.RecordSource = "Customers"
'/// Bng c tn l Customers
adoDSKH.Refresh
Set txtMaKH.DataSource = adoDSKH
txtMaKH.DataField = "CustomerID"

'/// Ngun d liu ly t adoDSKH


'/// Trng hin th l CustomerID

Set txtHoTenKH.DataSource = adoDSKH

Trang 136

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

txtHoTenKH.DataField = "ContactName"
Set txtDiaChiKH.DataSource = adoDSKH
txtDiaChiKH.DataField = "Address"
Set txtDienThoaiKH.DataSource = adoDSKH
txtDienThoaiKH.DataField = "Phone"
End Sub

d. Ghi ch: Nu thuc tnh CommandType ca adoDSKH l adCmdTable th thuc tnh


RecourceSource phi cha tn ca bng, cn nu thuc tnh adCmdTable l adCmdText th
thuc tnh RecordSource phi l mt cu lnh SQL (v d Select, Update, Delete, Insert...)
Bi 2: Vit chng trnh xem thng tin v khch hng (Version 2)
a. Thit k giao din

Hnh 5.28 t tn cho cc iu khin trn Form


b. Hng dn : S dng cc phng thc di chuyn bn ghi c sn ca i tng
con Recordset trong iu khin ADO Data. Tuy nhin cn kin tra trc khi di
chuyn (thng qua vic kim tra thuc tnh EOF v BOF)
c. Chng trnh mu
Option Explicit
Private Sub Form_Load()
Dim strConn As String
strConn="Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path & "\Nwind.mdb"
adoDSKH.ConnectionString = strConn
adoDSKH.CommandType = adCmdTable
adoDSKH.RecordSource = "Customers"
adoDSKH.Refresh
Set txtMaKH.DataSource = adoDSKH
txtMaKH.DataField = "CustomerID"
Set txtHoTenKH.DataSource = adoDSKH
txtHoTenKH.DataField = "ContactName"
Set txtDiaChiKH.DataSource = adoDSKH
txtDiaChiKH.DataField = "Address"
Set txtDienThoaiKH.DataSource = adoDSKH
txtDienThoaiKH.DataField = "Phone"

Trang 137

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Dim Cmd As Object


For Each Cmd In Controls
If TypeOf Cmd Is TextBox Then Cmd.Locked = True
Next
'/// n iu khin ADO Data, s dng nt nhn
adoDSKH.Visible = False
End Sub
'-----------------------------------------------------------------------------------------------------------------------'/// Cp nht li trng thi (Enable/Disable) ca cc nt nht khi ht bn ghi (EOF v BOF)

Sub CapNhatNutNhan()
cmdPrevious.Enabled = (adoDSKH.Recordset.BOF = False)
cmdNext.Enabled = (adoDSKH.Recordset.EOF = False)
End Sub
'-----------------------------------------------------------------------------------------------------------------------'/// Tr v bn ghi u tin

Private Sub cmdFirst_Click()


adoDSKH.Recordset.MoveFirst
Call CapNhatNutNhan
End Sub
'-----------------------------------------------------------------------------------------------------------------------'/// Tr v bn ghi cui cng

Private Sub cmdLast_Click()


adoDSKH.Recordset.MoveLast
Call CapNhatNutNhan
End Sub
'-----------------------------------------------------------------------------------------------------------------------'/// Tr v bn ghi tip theo

Private Sub cmdNext_Click()


If adoDSKH.Recordset.EOF = False Then adoDSKH.Recordset.MoveNext
Call CapNhatNutNhan
End Sub
'-----------------------------------------------------------------------------------------------------------------------'/// Tr v bn ghi ng trc

Private Sub cmdPrevious_Click()


If adoDSKH.Recordset.BOF = False Then adoDSKH.Recordset.MovePrevious
Call CapNhatNutNhan
End Sub

Bi 3: Vit chng trnh xem thng tin v khch hng (Version 3)


a. Thit k giao din

Hnh 5.29 Giao din v tn cc iu khin


b. Hng dn: S dng cu lnh SET gn kt Datagrid vi ADO Data
c. Chng trnh mu:
Trang 138

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Option Explicit
Private Sub Form_Load()
Dim strConn As String
strConn="Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path & "\Nwind.mdb"
adoDSKH.ConnectionString = strConn
adoDSKH.CommandType = adCmdTable
adoDSKH.RecordSource = "Customers"
adoDSKH.Refresh
Set dgrDSKH.DataSource = adoDSKH
adoDSKH.Visible = False
End Sub

'/// (gn) Hin th d liu trong adoDSKH


'/// n iu khin adoDSKH

d. Ghi ch: Khi gn kt DataGrid vi ADO v thuc tnh CommandType ca ADO


Data l adcmdTable th ngi dng c th sa, thm bn ghi trc tip trn DataGrid.
(Vi iu kin thuc tnh AllowUpdate, AllowAddNew). Ni chung, khng nn cho
php iu ny bi v khi ngi dng cp nht trc tip nh vy, chng ta rt kh c
th kim sot c d liu nhp vo ny.
Bi 4: Vit chng trnh xem thng tin v khch hng (Version 4)
a. Thit k giao din: Ging nh bi s 3
b. Hng dn: V y ch hin th 3 trng ch khng phi tt c, do vy phi s
dng n cu lnh SQL. Nh vy cn t li thuc tnh CommandType=adcmdTable
v thuc tnh Recordsource l cu lnh SELECT.
c. Chng trnh mu
Option Explicit
Private Sub Form_Load()
Dim strConn As String, strSQL As string
strConn="Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path & "\Nwind.mdb"
adoDSKH.ConnectionString = strConn
strSQL = "SELECT Customerid,ContactName, Address, Phone from Customers"
adoDSKH.CommandType = adCmdText
adoDSKH.RecordSource= strSQL
adoDSKH.Refresh
Set dgrDSKH.DataSource = adoDSKH
adoDSKH.Visible = False
End Sub

d. Ghi ch: Khi s dng cu lnh SELECT ly d liu v th ngi dng khng
th sa i d liu trc tip trn DataGrid.

Trang 139

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 5: Vit chng trnh xem mt bng CSDL bt k trong CSDL NWind


a. Thit k giao din

Hnh 5.30 Giao din chng trnh


b. Hng dn: Vn s dng cch trc y l thay i tn bng cho thuc tnh
Recordsource. Tuy nhin, v mt ADO Data c s dng nhiu ln v m nhiu
bng do vy trc khi m bng mi cn kim tra v ng li.
c. Chng trnh mu
Option Explicit
Private Sub cmdXem_Click()
If Not (adoBang.Recordset Is Nothing) Then adoBang.Recordset.Close
adoBang.RecordSource = "[" & cboDSBang.Text & "]"
'/// cn t trong [ ]
adoBang.Refresh
Set dgrHienThi.DataSource = adoBang
End Sub
'-----------------------------------------------------------------------------------------------------------------------Private Sub Form_Load()
Dim strConn As String
strConn="Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path & "\Nwind.mdb"
adoDSKH.ConnectionString = strConn
adoBang.CommandType = adCmdTable
adoBang.RecordSource = "Customers"
adoBang.Refresh
Set dgrHienThi.DataSource = adoBang
cboDSBang.AddItem "Customers"
cboDSBang.AddItem "Products"
cboDSBang.AddItem "Employees"
cboDSBang.AddItem "Categories"
cboDSBang.AddItem "Suppliers"
cboDSBang.AddItem "Orders"
cboDSBang.AddItem "Order details"
cboDSBang.AddItem "Shippers"

'/// Tn ca bng ny cha du cch

cboDSBang.Text = "Customers"
adoBang.Visible = False
End Sub

d. Ghi ch:
Trang 140

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

C th s dng cu lnh dng ... Is Nothing ... kim tra xem mt i tng
c rng hay khng (tc cha tr ti i tng no trc ).
Tn bng trong Access c th cha du cch, khi khng b li th tn
bng phi t trong cp ngoc [ ] trc khi gn cho thuc tnh
Recordsource, ging nh trong bi ny. Vi cc bng m tn khng cha du
cch th bn c th thm vo hoc khng.
Khi thit k CSDL, khng nn t tn bng cha du cch.

Bi 6: Vit chng trnh np tt c m nh cung cp vo mt hp Combo


a. Thit k giao din

Hnh 5.31 Giao din chng trnh


b. Hng dn: S dng vng lp duyt cc bn ghi trong Recordset
c. Chng trnh mu
Option Explicit
Private Sub Form_Load()
Dim strConn As String
strConn="Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path & "\Nwind.mdb"
adoDSKH.ConnectionString = strConn
adoMaNCC.CommandType = adCmdTable
adoMaNCC.RecordSource = "Suppliers"
adoMaNCC.Refresh
Do While adoMaNCC.Recordset.EOF = False
cboMaNCC.AddItem adoMaNCC.Recordset!SupplierID
adoMaNCC.Recordset.MoveNext
Loop
End Sub

d. Ghi ch: y l cng vic rt hay gp phi, do vy chng ta nn nm r.


Bi 7: Vit chng trnh lit k cc sn phm do 1 cng ty cung cp (ver 1)
a. Thit k giao din

Hnh 5.32 Giao din chng trnh

Trang 141

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

b. Hng dn: Do phi np d liu vo 2 ni (Combo v DataGrid) nn cn 2 iu


khin ADO Data.
c. Chng trnh mu
Option Explicit
Private Sub cmdLietKe_Click()
Dim strSQL As String, strConn As String
strConn="Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path & "\Nwind.mdb"
adoDSKH.ConnectionString = strConn
adoSanPham.CommandType = adCmdText
If Not (adoSanPham.Recordset Is Nothing) Then adoSanPham.Recordset.Close
strSQL = "Select * FROM Products WHERE SupplierID =" & cboMaNCC.Text
adoSanPham.RecordSource = strSQL
adoSanPham.Refresh
Set dgrSanPham.DataSource = adoSanPham
End Sub
'-----------------------------------------------------------------------------------------------------------------------Private Sub Form_Load()
Dim strConn As String
strConn="Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path &"\Nwind.mdb"
adoMaNCC.ConnectionString = strConn
adoMaNCC.CommandType = adCmdText
adoMaNCC.RecordSource = "SELECT SupplierID FROM Suppliers"
adoMaNCC.Refresh
cboMaNCC.Clear
Do While adoMaNCC.Recordset.EOF = False
cboMaNCC.AddItem adoMaNCC.Recordset!SupplierID
adoMaNCC.Recordset.MoveNext
Loop
adoMaNCC.Visible = False
adoSanPham.Visible = False
End Sub

d. Ghi ch : y l dng bi ton rt hay gp phi l : Click vo mt mc th s hin


th thng tin v cc con ca mc .
Bi 8: Vit chng trnh lit k cc sn phm do 1 cng ty cung cp (ver 2)
a. Thit k giao din:

Hnh 5.33 Giao din v tn cc iu khin


Trang 142

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

b. Hng dn: Np thng tin v nh cung cp (SupplierID v CompanyName) vo


cc nt ca cy. Trong SupplierID np vo thuc tnh Key v Company np vo
thuc tnh Text. Tuy nhin, cn lu rng, Thuc tnh Key ca mi nt trn cy phi
khng c l s, trong khi thuc tnh SupplierID l mt s (Autonumber). Do
vy, khi thm ta s ghp thm mt xu k t - v d "M1" vo thuc tnh Key.
Khi ngi dng click vo mt nt th ta phi xem c phi l click vo Tn mt
cng ty no hay khng ? Nu ng th ly cc sn phm tng ng vi cng ty
ny v cho hin th trong DataGrid. Lu l : trc , mi nt ta thm "M1", nn
khi chn trong bng CSDL cn phi b xu ny trc khi so snh.
c. Chng trnh mu
Option Explicit
Sub NapMaNhaCC()
Dim strConn As String
strConn="Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path & "\Nwind.mdb"
adoDSKH.ConnectionString = strConn
adoMaNCC.CommandType = adCmdText
adoMaNCC.RecordSource = "SELECT SupplierID, CompanyName FROM Suppliers"
adoMaNCC.Refresh
tvwNhaCC.Nodes.Clear
'/// Xo cy
tvwNhaCC.LabelEdit = tvwManual
'/// Khng cho sa i nhn ca nt
tvwNhaCC.Nodes.Add , , "NUT_GOC", "Tn cc nh cung cp"
'/// To nt gc
Do While adoMaNCC.Recordset.EOF = False
tvwNhaCC.Nodes.Add "NUT_GOC", tvwChild, "M1" &
adoMaNCC.Recordset!SupplierID, adoMaNCC.Recordset!CompanyName
adoMaNCC.Recordset.MoveNext
Loop
'/// M rng nt gc
tvwNhaCC.Nodes("NUT_GOC").Expanded = True
End Sub
'-----------------------------------------------------------------------------------------------------------------------Private Sub Form_Load()
Call NapMaNhaCC
'/// Np cc nh cung cp vo cc nt ca Cy
adoMaNCC.Visible = False
'/// n adoMaNCC
adoSanPham.Visible = False '/// n adoSanPham
End Sub
'-----------------------------------------------------------------------------------------------------------------------'/// S kin ny xut hin khi ngi dng click ln mt nt ca cy

Private Sub tvwNhaCC_NodeClick(ByVal Node As MSComctlLib.Node)


If Node.Key = "NUT_GOC" Then Exit Sub
'/// Nu l nt gc th thot
Dim MaNCC As String
MaNCC = Mid(Node.Key, 3)

'///B xu k t "M1" u i, ch ly phn M NCC thi

'/// Cn phi kim tra nu adoSanPham ang m 1 bng th cn phi ng li

If Not (adoSanPham.Recordset Is Nothing) Then adoSanPham.Recordset.Close


adoSanPham.ConnectionString = "Provider=Microsoft.jet.oledb.4.0; Data Source=" &
App.Path & "\Nwind.mdb"
adoSanPham.CommandType = adCmdText
adoSanPham.RecordSource = "SELECT * FROM Products WHERE SupplierID=" &

Trang 143

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

MaNCC
adoSanPham.Refresh
Set dgrSanPham.DataSource = adoSanPham
End Sub

'/// Hin th cc sn phm

Bi 9: S dng vi TreeView
a. Thit k giao din

Hnh 5.34 - Hin th sn phm trong ListView


b. Hng dn: Tham kho chng IV, phn Listview, TreeView. Trong ,
lvwSanPham.ListItems.Add thm mt hng (bn ghi) mi. Sau tr ti bn ghi
ny v thm ni dung ca cc ct 2, ct 3,..)
c. Chng trnh mu
Option Explicit
'-----------------------------------------------------------------------------------------------------------------------'/// Th tc Np m nh cung cp vo Cy.

Sub NapMaNhaCC()
Dim strConn As String
strConn="Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path & "\Nwind.mdb"
adoDSKH.ConnectionString = strConn
adoMaNCC.CommandType = adCmdText
adoMaNCC.RecordSource = "SELECT SupplierID, CompanyName FROM Suppliers"
adoMaNCC.Refresh
tvwNhaCC.Nodes.Clear
tvwNhaCC.LabelEdit = tvwManual
tvwNhaCC.Nodes.Add , , "NUT_GOC", "Tn cc nh cung cp"
Do While adoMaNCC.Recordset.EOF = False
tvwNhaCC.Nodes.Add "NUT_GOC", tvwChild, "M1" & adoMaNCC.Recordset!SupplierID,

adoMaNCC.Recordset!CompanyName
adoMaNCC.Recordset.MoveNext
Loop
tvwNhaCC.Nodes("NUT_GOC").Expanded = True
End Sub
'-----------------------------------------------------------------------------------------------------------------------'/// Khi to ListView, to 3 ct vi cc nhn tng ng.

Sub KhoiTaoListView()
lvwSanPham.ColumnHeaders.Add , , "Tn sn phm"
lvwSanPham.ColumnHeaders.Add , , "M loi"
lvwSanPham.ColumnHeaders.Add , , "n gi"

Trang 144

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

lvwSanPham.View = lvwReport
lvwSanPham.GridLines = True
End Sub
Private Sub Form_Load()
Call NapMaNhaCC
Call KhoiTaoListView

'/// Np m nh cung cp
'/// Khi to ListView

adoMaNCC.Visible = False
'/// n 2 iu khin ny i v khng dng n.
adoSanPham.Visible = False
End Sub
'-----------------------------------------------------------------------------------------------------------------------'/// Th tc ny c kch hot khi ngi dng click vo mt nt trn cy

Private Sub tvwNhaCC_NodeClick(ByVal Node As MSComctlLib.Node)


If Node.Key = "NUT_GOC" Then Exit Sub
'/// Nu l nt gc th khng x l
Dim MaNCC As String, Nut As ListItem
If Not (adoSanPham.Recordset Is Nothing) Then adoSanPham.Recordset.Close
MaNCC = Mid(Node.Key, 3) '///B xu k t "M1" u i, ch ly phn M NCC thi
adoSanPham.ConnectionString= "Provider=Microsoft.jet.oledb.4.0;Data Source=" & _
App.Path & "\Nwind.mdb"

adoSanPham.CommandType = adCmdText
adoSanPham.RecordSource = "SELECT * FROM Products WHERE SupplierID=" & MaNCC

adoSanPham.Refresh
lvwSanPham.ListItems.Clear
Do While adoSanPham.Recordset.EOF = False
With adoSanPham
Set Nut=lvwSanPham.ListItems.Add(, "A" & .Recordset!ProductID, .Recordset!ProductID)

Nut.SubItems(1) = .Recordset!CategoryID
Nut.SubItems(2) = .Recordset!UnitPrice
.Recordset.MoveNext
End With
Loop
End Sub

Bi 10: Xy dng cy nhiu mc xem thng tin v nhng sn phm bn


a. Thit k giao din

Hnh 5.35 Tn ca cc iu khin trong chng trnh


b. Hng dn

Trang 145

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Thut ton y l : Np tng M nh cung cp v ng vi mi nh cung


cp th li np cc sn phm vo nt ca nh cung cp (Tc dng vng
lp lng nhau).
Lu vi iu khin Treeview: Khi thm mt nt vo cy th gi tr Key ca
mi nt khng c l S. Nhng trong CSDL, trng SupplierID li l mt
trng s (Autonumber), do vy gii quyt s bt tin ny th trc khi
thm mt nt th ta thm thuc tnh Key mt xu k t, v d "M1", "M2"..
tng ng vi cc mc. Chng hn vi nt gc (Mc 0) th ta thm xu "M0",
vi mc 1 th ta thm xu "M1". iu ny cng rt thun tin v sau, khi
ngi dng click vo mt nt th ch cn ly 2 k t u ca thuc tnh Key ta
s bit ngay l nt c click thuc mc my c x l ph hp !

c. Chng trnh mu
Option Explicit
Dim strConn As String
'-----------------------------------------------------------------------------------------------------------------------'//// Np M nh cung cp v cc sn phm ca nh cung cp khi np form

Private Sub Form_Load()


strConn = "Provider=Microsoft.jet.oledb.4.0;"
strConn = strConn & "Data source= " & App.Path & "\Nwind.mdb"
Call NapMaNhaCC
Call KhoiTaoListView
adoMaNCC.Visible = False
adoSanPham.Visible = False
adoCTDonHang.Visible = False
End Sub
'-----------------------------------------------------------------------------------------------------------------------'/// Np m nh cung cp vo cy. Khi np mt NCC th np cc sn phm ngay vo nt

Sub NapMaNhaCC()
Dim Key As String
adoMaNCC.ConnectionString = strConn
adoMaNCC.CommandType = adCmdText
adoMaNCC.RecordSource = "SELECT SupplierID, CompanyName FROM Suppliers"
adoMaNCC.Refresh
tvwNhaCC.Nodes.Clear
tvwNhaCC.LabelEdit = tvwManual
tvwNhaCC.Nodes.Add , , "M0NUT_GOC", "Tn cc nh cung cp"
Do While adoMaNCC.Recordset.EOF = False
Key = "M1" & adoMaNCC.Recordset!SupplierID
tvwNhaCC.Nodes.Add "M0NUT_GOC",tvwChild, Key,adoMaNCC.Recordset!CompanyName

NapSanPhamVaoNCC Key
adoMaNCC.Recordset.MoveNext
Loop
adoMaNCC.Recordset.Close
tvwNhaCC.Nodes("M0NUT_GOC").Expanded = True
End Sub

Trang 146

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

'----------------------------------------------------------------------------------------------------------------------'/// Np cc sn phm vo nt nh cung cp. Nt ny c m l MaNCC


'/// V trng Key ca mi nt cha xu "M1" & SupplierID, do vy khi Select cn phi b
'/// xu "M1" i bng cch vit Mid(MaNCC,3).
'/// Cng ging nh trng SupplierID, trng ProductID cng l trng s, do vy cn
'/// phi thm mt xu, v d "M2" vo thuc tnh Key.

'----------------------------------------------------------------------------------------------------------------------Sub NapSanPhamVaoNCC(MaNCC As String)


Dim MaSP As String, TenSP As String
adoSanPham.ConnectionString = strConn
adoSanPham.CommandType = adCmdText
adoSanPham.RecordSource = "Select * from Products where SupplierID=" & Mid(MaNCC,3)

adoSanPham.Refresh
Do While adoSanPham.Recordset.EOF = False
MaSP = adoSanPham.Recordset!ProductID
TenSP = adoSanPham.Recordset!ProductName
tvwNhaCC.Nodes.Add MaNCC, tvwChild, "M2" & MaSP, TenSP
adoSanPham.Recordset.MoveNext
Loop
adoSanPham.Recordset.Close
End Sub
'-----------------------------------------------------------------------------------------------------------------------'/// Khi to Listview: To ra 3 ct l OrderID, UnitPrice v Quantity

Sub KhoiTaoListView()
lvwCTDonHang.ColumnHeaders.Add , , "M n hng"
lvwCTDonHang.ColumnHeaders.Add , , "Gi ($)"
lvwCTDonHang.ColumnHeaders.Add , , "S lng"
lvwCTDonHang.View = lvwReport
lvwCTDonHang.GridLines = True
End Sub
'-----------------------------------------------------------------------------------------------------------------------'/// Hin th tt c cc ho n c xut hin mt hng va c click chn
'/// V nt ang c chn c MaSP = "M2" & ProductID, do vy ly ra m sn phm
'/// thc s cho cu lnh truy vn th cn phi b xu "M2", tc l vit : Mid(MaSP,3)

'-----------------------------------------------------------------------------------------------------------------------Sub CTDonHang(MaSP As String)


Dim MucMoi As ListItem
adoCTDonHang.ConnectionString = strConn
adoCTDonHang.CommandType = adCmdText
adoCTDonHang.RecordSource="Select *FROM [Order details] where ProductID=" &Mid(MaSP,3)

adoCTDonHang.Refresh
lvwCTDonHang.ListItems.Clear
Do While adoCTDonHang.Recordset.EOF = False
Set MucMoi = lvwCTDonHang.ListItems.Add(, , adoCTDonHang.Recordset!OrderID)

MucMoi.SubItems(1) = adoCTDonHang.Recordset!UnitPrice & " $"


MucMoi.SubItems(2) = adoCTDonHang.Recordset!Quantity
adoCTDonHang.Recordset.MoveNext
Loop
adoCTDonHang.Recordset.Close
End Sub
'-----------------------------------------------------------------------------------------------------------------------'/// Khi ngi dng click mt nt th cn trch 2 k t u bit l ngi dng click vo
'/// nt gc (M0), tn nh cung cp (M1) hay sn phm (M2) c x l ph hp.
'/// Thuc tnh Node s cho bit thng tin (tr n) nt c chn.

Private Sub tvwNhaCC_NodeClick(ByVal Node As MSComctlLib.Node)

Trang 147

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Select Case Left(Node.Key, 2)


'/// Ly 2 k t u
Case "M0"
'/// Click vo nt gc
Case "M1"
'/// Click vo Nh cung cp
Case "M2"
'/// Click vo sn phm
lblCTDonHang.Caption="Cc n hng c SP " &tvwNhaCC.SelectedItem.Parent.Text
CTDonHang Node.Key
End Select
End Sub

d. Ghi ch:

Khi thm mt nt vo cy th phi m bo thuc tnh Key l duy nht, nu


khng li runtime s xy ra.
C th truy cp n mt nt nu bit gi tr Key ca n. V d, nu thuc tnh
Key c gi tr l "K" th truy cp nh sau: tvwNhaCC.Nodes("K").
Nt ang c chn c tr bi : tvwNhaCC.SelectedItem, nu khng c
nt no c chn th n c gi tr l Nothing.
Xt cu lnh SELECT trn: adoSanPham.RecordSource = "Select * from
Products where SupplierID=" & Mid(MaNCC,3). y v trng SupplierID l
mt trng s nn ta khng phi km thm cp du nhy n. Trong trng
hp trng em so snh l trng text th phi km thm cp nhy n. V
d nu chn cc bn ghi c CompanyName = gi tr trong text1 th phi vit:
adoSanPham.RecordSource = "Select * from Products where CompanyName
= '" & text1.text & "'".
Trong cu lnh SQL, nu tn bng (hoc tn trng) c cha du cch (V d
bng "Order details") th cn phi t trong cp ngoc vung. V d phi vit:
SELECT * FROM [Order details]. Tng qut, trong nhiu trng hp, c th
gii quyt vn tn cha du cch bng vic thm cp ngoc [ ].

C 2 cch truy cp n gi tr ca mt trng. Cch vit

adoCTDonHang.Recordset!UnitPrice v
adoCTDonHang.Recordset.Fields("UnitPrice") l 2 cch vit tng ng. Tuy
nhin cch th nht c a dng hn v ngn gn.

Trong trng hp nu mi nh sn xut c nhiu sn phm th thi gian


np vo cy thc s khng hiu qu. Khi ngi ta x l bng cch :
"Nu ngi dng click vo mt nt th lc mi np cc nt con !".
Bi 11: B sung thm mt trng mi trong cu lnh SELECT
a. Thit k giao din : Nh bi tp 10
b. Hng dn : Trong cu lnh SELECT, chng ta hon ton c th b sung hoc
thm mi mt trng. Tn trng mi c th dn xut t cc trng c v c
t tn bi t kho AS. Khi ta truy cp n trng mi ny mt cch bnh thng
nh cc trng khc. Tuy nhin, trng ny khng thc s thm vo bng gc.
c. Chng trnh mu :
Option Explicit
Dim strConn As String
'-----------------------------------------------------------------------------------------------------------------------'//// Np M nh cung cp v cc sn phm ca nh cung cp khi np form

Private Sub Form_Load()


strConn = "Provider=Microsoft.jet.oledb.4.0;"
strConn = strConn & "Data source= " & App.Path & "\Nwind.mdb"
Call NapMaNhaCC

Trang 148

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Call KhoiTaoListView
adoMaNCC.Visible = False
adoSanPham.Visible = False
adoCTDonHang.Visible = False
End Sub
'-----------------------------------------------------------------------------------------------------------------------'/// Np m nh cung cp vo cy. Khi np mt NCC th np cc sn phm ngay vo nt

Sub NapMaNhaCC()
Dim Key As String
adoMaNCC.ConnectionString = strConn
adoMaNCC.CommandType = adCmdText
adoMaNCC.RecordSource = "SELECT SupplierID, CompanyName FROM Suppliers"
adoMaNCC.Refresh
tvwNhaCC.Nodes.Clear
tvwNhaCC.LabelEdit = tvwManual
tvwNhaCC.Nodes.Add , , "M0NUT_GOC", "Tn cc nh cung cp"
Do While adoMaNCC.Recordset.EOF = False
Key = "M1" & adoMaNCC.Recordset!SupplierID
tvwNhaCC.Nodes.Add "M0NUT_GOC",tvwChild, Key,adoMaNCC.Recordset!CompanyName

NapSanPhamVaoNCC Key
adoMaNCC.Recordset.MoveNext
Loop
adoMaNCC.Recordset.Close
tvwNhaCC.Nodes("M0NUT_GOC").Expanded = True
End Sub
'----------------------------------------------------------------------------------------------------------------------'/// Np cc sn phm vo nt nh cung cp. Nt ny c m l MaNCC
'/// V trng Key ca mi nt cha xu "M1" & SupplierID, do vy khi Select cn phi b
'/// xu "M1" i bng cch vit Mid(MaNCC,3).
'/// Cng ging nh trng SupplierID, trng ProductID cng l trng s, do vy cn
'/// phi thm mt xu, v d "M2" vo thuc tnh Key.

'----------------------------------------------------------------------------------------------------------------------Sub NapSanPhamVaoNCC(MaNCC As String)


Dim MaSP As String, TenSP As String
adoSanPham.ConnectionString = strConn
adoSanPham.CommandType = adCmdText
adoSanPham.RecordSource = "Select * from Products where SupplierID=" & Mid(MaNCC,3)

adoSanPham.Refresh
Do While adoSanPham.Recordset.EOF = False
MaSP = adoSanPham.Recordset!ProductID
TenSP = adoSanPham.Recordset!ProductName
tvwNhaCC.Nodes.Add MaNCC, tvwChild, "M2" & MaSP, TenSP
adoSanPham.Recordset.MoveNext
Loop
adoSanPham.Recordset.Close
End Sub
'----------------------------------------------------------------------------------------------------------------------------------'/// Khi to Listview: To ra 3 ct l OrderID, UnitPrice v Quantity

Sub KhoiTaoListView()
lvwCTDonHang.ColumnHeaders.Add , , "M n hng"
lvwCTDonHang.ColumnHeaders.Add , , "Gi ($)"
lvwCTDonHang.ColumnHeaders.Add , , "S lng"
lvwCTDonHang.View = lvwReport

Trang 149

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

lvwCTDonHang.GridLines = True
End Sub
'----------------------------------------------------------------------------------------------------------------------------------'/// Hin th tt c cc ho n c xut hin mt hng va c click chn
'/// V nt ang c chn c MaSP = "M2" & ProductID, do vy ly ra m sn phm
'/// thc s cho cu lnh truy vn th cn phi b xu "M2", tc l vit : Mid(MaSP,3)
'/// Trong cu lnh SELECT ta thm mt trng mi v t tn l GiaTri.
'-----------------------------------------------------------------------------------------------------------------------------------

Sub CTDonHang(MaSP As String)


Dim MucMoi As ListItem, strSQL As String
strSQL = "Select OrderID, UnitPrice, Quantity, (UnitPrice * Quantity) As [GiaTri] "
strSQL = strSQL & FROM [Order details] "
strSQL = strSQL & "Where ProductID = " & Mid(MaSP, 3)
adoCTDonHang.ConnectionString = strConn
adoCTDonHang.CommandType = adCmdText
adoCTDonHang.RecordSource = strSQL
adoCTDonHang.Refresh
lvwCTDonHang.ListItems.Clear
Do While adoCTDonHang.Recordset.EOF = False
Set MucMoi = lvwCTDonHang.ListItems.Add(, , adoCTDonHang.Recordset!OrderID)

MucMoi.SubItems(1) = adoCTDonHang.Recordset!UnitPrice
MucMoi.SubItems(2) = adoCTDonHang.Recordset!Quantity
MucMoi.SubItems(3) = adoCTDonHang.Recordset!GiaTri
adoCTDonHang.Recordset.MoveNext
Loop
adoCTDonHang.Recordset.Close
End Sub
'----------------------------------------------------------------------------------------------------------------------------------'/// Khi ngi dng click mt nt th cn trch 2 k t u bit l ngi dng click vo
'/// nt gc (M0), tn nh cung cp (M1) hay sn phm (M2) c x l ph hp.
'/// Thuc tnh Node s cho bit thng tin (tr n) nt c chn.
'-----------------------------------------------------------------------------------------------------------------------------------

Private Sub tvwNhaCC_NodeClick(ByVal Node As MSComctlLib.Node)


Select Case Left(Node.Key, 2)

'/// Ly 2 k t u

Case "M0"

'/// Click vo nt gc

Case "M1"

'/// Click vo Nh cung cp

Case "M2"

'/// Click vo sn phm

lblCTDonHang.Caption="Cc n hng c SP " &tvwNhaCC.SelectedItem.Parent.Text


CTDonHang Node.Key
End Select
End Sub

d. Ghi ch:

C th thay i tn trng trong kt qu nh sau:


Select OrderID As MaDonHang, UnitPrice AS DonGia v.v...

Hoc b sung thm gi tr vo trng trong kt qu, v d:


Select OrderID , (UnitPrice & ' $') As DonGia

Trang 150

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 12: Thc hin yu cu nh bi tp 5 nhng ch s dng i tng Connection


v i tng Recordset thao tc vi CSDL.
a. Thit k giao din

Hnh 5.36 Tn cc iu khin trn Form


b. Hng dn:
S dng i tng Connection v phng thc Execute ca i tng ny. Trc
khi khai bo bin Connection cn phi tham chiu n th vin Microsoft ActiveX
Data Control 2.x. C php gi phng thc Execute nh sau:

Set RS = Cn.Execute ("Cu lnh SQL") --> Nu mun ly kt qu tr v (Cch


ny thng p dng khi cu lnh SQL l mt cu lnh SELECT. Kt qu tr
v s l mt tp cc bn ghi (tng ng vi mt bng), do vy c th gn
kt qu ny hin th trong mt DataGrid control.

Cn.Execute "Cu lnh SQL" --> Nu ch mun thc thi mt cu lnh SQL m
khng cn ly kt qu tr v (V d cu lnh Delete, Insert, Update).

c. Chng trnh mu
Option Explicit
Dim Cn As New ADODB.Connection
'-----------------------------------------------------------------------------------------------------------------------------------

Private Sub Form_Load()


Dim strConn As String
On Error GoTo Err
strConn = "Provider=Microsoft.jet.oledb.4.0;"
strConn = strConn & "Data source= " & App.Path & "\Nwind.mdb"
Cn.ConnectionString = strConn
Cn.CursorLocation = adUseClient
Cn.Open
cboDSBang.AddItem "Customers"
cboDSBang.AddItem "Products"
cboDSBang.AddItem "Employees"
cboDSBang.AddItem "Categories"
cboDSBang.AddItem "Suppliers"
cboDSBang.AddItem "Orders"
cboDSBang.AddItem "Order details"
cboDSBang.AddItem "Shippers"
Exit Sub

'/// Bng ny cha du cch

Err:
Trang 151

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

MsgBox "Khng th m c CSDL ! " & Err.Description, vbCritical


End Sub
'-----------------------------------------------------------------------------------------------------------------------------------

Private Sub cmdXem_Click()


Dim RS As ADODB.Recordset
Set RS = Cn.Execute("SELECT * FROM " &cboDSBang.Text )
Set dgrHienThi.DataSource = RS
'/// Gn kt qu vo Grid hin th
End Sub
d. Ghi ch:

Trong mt ng dng (Cho d c mt hay nhiu form) nu khng c g c bit


th ch cn mt i tng Connection thao tc vi CSDL.

Phng thc Execute cho php ta thc hin bt k mt cu lnh SQL no


c trnh iu khin CSDL h tr, nhng chc chn l c lnh SELECT,
INSERT, UPDATE, DELETE. Tng ny lnh cng l qu i vi chng ta.

Phng thc Execute khi thc hin SELECT th ch tr v d liu l bn sao


ca bng gc nn sa i kt qu ny khng tc ng n bng gc.

bit kt ni n C s d liu c thnh cng hay khng, ch cn kim tra xem


thuc tnh State c bng 1 hay khng ? nu bng tc l kt ni thnh cng !.

Phng thc Open ch c gi khi hin ti bin i tng Connection cha m


n CSDL no, nu khng s b bo li !. Thng c gi trong Form_Load.

Bi tp 13: Lm li bi 10 vi s dng i tng Connection v Recordset


a. Thit k giao din : Nh bi tp 10

Hnh 5.37 Tn cc iu khin trn Form


b. Hng dn: S dng phng thc Execute ca i tng Connection
c. Chng trnh mu:
Option Explicit
Dim Cn As New ADODB.Connection
'/// Khai bo bin i tng Connection
'----------------------------------------------------------------------------------------------------------------------------------'//// Np M nh cung cp v cc sn phm ca nh cung cp khi form khi ng
Private Sub Form_Load()
On Error GoTo Err
Dim strConn As String
strConn = "Provider=Microsoft.jet.oledb.4.0;"
strConn = strConn & "Data source= " & App.Path & "\Nwind.mdb"

Trang 152

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Cn.ConnectionString = strConn
Cn.CursorLocation = adUseClient
Cn.Open
Call NapMaNhaCC
Call KhoiTaoListView
Exit Sub
Err:
MsgBox "Kh th kt ni n CSDL ! " & Err.Description
End Sub
'-----------------------------------------------------------------------------------------------------------------------'/// Np m nh cung cp vo cy. Khi np mt NCC th np cc sn phm ngay vo nt

Sub NapMaNhaCC()
Dim Key As String, Rs As ADODB.Recordset
Set Rs = Cn.Execute("SELECT SupplierID, CompanyName FROM Suppliers")
tvwNhaCC.Nodes.Clear
tvwNhaCC.LabelEdit = tvwManual
tvwNhaCC.Nodes.Add , , "M0NUT_GOC", "Tn cc nh cung cp"
Do While Rs.EOF = False
tvwNhaCC.Nodes.Add "M0NUT_GOC", tvwChild, Key, Rs!CompanyName
Key = "M1" & Rs!SupplierID
NapSanPhamVaoNCC Key
Rs.MoveNext
Loop
Rs.Close
tvwNhaCC.Nodes("M0NUT_GOC").Expanded = True
End Sub
'----------------------------------------------------------------------------------------------------------------------'/// Np cc sn phm vo nt nh cung cp. Nt ny c m l MaNCC
'/// V trng Key ca mi nt cha xu "M1" & SupplierID, do vy khi Select cn phi b
'/// xu "M1" i bng cch vit Mid(MaNCC,3).
'/// Cng ging nh trng SupplierID, trng ProductID cng l trng s, do vy cn
'/// phi thm mt xu, v d "M2" vo thuc tnh Key.

'----------------------------------------------------------------------------------------------------------------------Sub NapSanPhamVaoNCC(MaNCC As String)


Dim MaSP As String, TenSP As String, Rs As ADODB.Recordset
Set Rs = Cn.Execute("Select * from Products where SupplierID=" & Mid(MaNCC, 3))
Do While Rs.EOF = False
MaSP = Rs!ProductID
TenSP = Rs!ProductName
tvwNhaCC.Nodes.Add MaNCC, tvwChild, "M2" & MaSP, TenSP
Rs.MoveNext
Loop
Rs.Close
End Sub
'----------------------------------------------------------------------------------------------------------------------------------'/// Khi to Listview: To ra 3 ct l OrderID, UnitPrice v Quantity

Sub KhoiTaoListView()
lvwCTDonHang.ColumnHeaders.Add , , "M n hng"

Trang 153

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

lvwCTDonHang.ColumnHeaders.Add , , "Gi ($)"


lvwCTDonHang.ColumnHeaders.Add , , "S lng"
lvwCTDonHang.View = lvwReport
lvwCTDonHang.GridLines = True
End Sub
'----------------------------------------------------------------------------------------------------------------------------------'/// Hin th tt c cc ho n c xut hin mt hng va c click chn
'/// V nt ang c chn c MaSP = "M2" & ProductID, do vy ly ra m sn phm
'/// thc s cho cu lnh truy vn th cn phi b xu "M2", tc l vit : Mid(MaSP,3)
'-----------------------------------------------------------------------------------------------------------------------------------

Sub CTDonHang(MaSP As String)


Dim BanGhi As ListItem, Rs As ADODB.Recordset
Set Rs = Cn.Execute("Select * FROM [Order details] where ProductID=" & Mid(MaSP, 3))

lvwCTDonHang.ListItems.Clear
Do While Rs.EOF = False
Set BanGhi = lvwCTDonHang.ListItems.Add(, , Rs!OrderID)
BanGhi.SubItems(1) = Rs!UnitPrice & " $"
BanGhi.SubItems(2) = Rs.Fields("Quantity") '/// Cach viet khac
Rs.MoveNext
Loop
Rs.Close
End Sub
'----------------------------------------------------------------------------------------------------------------------------------'/// Khi ngi dng click mt nt th cn trch 2 k t u bit l ngi dng click vo
'/// nt gc (M0), tn nh cung cp (M1) hay sn phm (M2) c x l ph hp.
'/// Thuc tnh Node s cho bit thng tin (tr n) nt c chn.
'-----------------------------------------------------------------------------------------------------------------------------------

Private Sub tvwNhaCC_NodeClick(ByVal Node As MSComctlLib.Node)


Select Case Left(Node.Key, 2)
Case "M0"
'/// Click vo nt gc
Case "M1"
'/// Click vo Nh cung cp
Case "M2"
'/// Clic vo sn phm
CTDonHang Node.Key
End Select
End Sub

Bi tp 14: Thao tc CSDL trn nhiu Form


a. Thit k giao din

Hnh 5.38 Tn cc iu khin trn form : frmMain

Trang 154

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Hnh 5.39 Tn cc iu khin trn form : frmNhapNCC

Hnh 5.41 Tn cc iu khin trong form : frmNhapSP


b. Hng dn:

S dng mt i tng Connection duy nht cho tt c cc form


Thc hin kt ni n CSDL trong Module dng chung.
Yu cu ng dng chy th tc Sub Main thay v np form mc nh.

c. Chng trnh mu
Trc ht cn tham chiu n th vin Microsoft ActiveX Data Object 2.1 v th vin
Microsoft Window Common Controls 6.0 (SP4).
To mt Module mi (Vo Project --> Add Module), t tn l modKetNoi v vit lnh
sau:
modKetnoi.bas
Option Explicit
Public Cn As New ADODB.Connection '/// Khai bo bin ton cc Connection : Cn
Public TrangThaiKetNoi As Boolean
'/// Dng lu tnh trng kt ni
Trang 155

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Public strConn As String

'/// Xu cha thng tin kt ni n CSDL


'----------------------------------------------------------------------------------------------------------------------------------'/// Mun th tc ny chy u tin, vo Menu Project -> Properties-> Startup Object ->Sub main

Sub Main()
On Error GoTo Err
strConn = "Provider=Microsoft.jet.oledb.4.0;"
strConn = strConn & "Data source= " & App.Path & "\Nwind.mdb"
Cn.ConnectionString = strConn
Cn.CursorLocation = adUseClient
Cn.Open
TrangThaiKetNoi = (Cn.State = 1)

'/// y l cch vit ngn gn

frmMain.Show

'/// Hin th form : frmMain

Exit Sub
Err:
MsgBox "Khng th m c CSDL ! " & Err.Description, vbCritical
End
End Sub
frmMain.frm
Option Explicit
'/// Np m v tn vo cy (M gn cho thuc tnh Key, Tn gn cho thuc tnh Text)

Sub NapNhaCC()
Dim RS As ADODB.Recordset, Key As String
Set RS = Cn.Execute("SELECT * FROM Suppliers")
tvwNhaCC.Nodes.Add , , "NUT_GOC", "Danh sch cc nh cung cp"
Do While RS.EOF = False
Key = "M1" & RS!Supplierid
'/// Thm mt xu v Key khng c l s
tvwNhaCC.Nodes.Add "NUT_GOC", tvwChild, Key, RS!CompanyName
RS.MoveNext
Loop
tvwNhaCC.Nodes("NUT_GOC").Expanded = True
End Sub
'----------------------------------------------------------------------------------------------------------------------------------'/// To cc ct cho Listview

Sub KhoiTaoListView()
lvwSanPham.ColumnHeaders.Add , , "Tn sn phm"
lvwSanPham.ColumnHeaders.Add , , "M loi"
lvwSanPham.ColumnHeaders.Add , , "n gi"
lvwSanPham.View = lvwReport
End Sub
'----------------------------------------------------------------------------------------------------------------------------------'/// Khi form c np cn kim tra xem trc kt ni c n CSDL cha ?

Private Sub Form_Load()


If TrangThaiKetNoi = False Then Exit Sub
Call KhoiTaoListView
Call NapNhaCC
End Sub

Trang 156

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

'----------------------------------------------------------------------------------------------------------------------------------'/// Mi khi ngi dng click vo 1 nt (Tn nh cung cp) th np thng tin sn phm vo Listview

Private Sub tvwNhaCC_NodeClick(ByVal Node As MSComctlLib.Node)


If Node.Key = "NUT_GOC" Then Exit Sub
'/// Nu click vo nt gc th thot
Dim RS As ADODB.Recordset, MucMoi As ListItem
Set RS=Cn.Execute("SELECT * FROM Products WHERE SupplierID=" & Mid(Node.Key, 3))

lvwSanPham.ListItems.Clear
Do While RS.EOF = False
Set MucMoi = lvwSanPham.ListItems.Add(, , RS!ProductName)
MucMoi.SubItems(1) = RS!CategoryID
MucMoi.SubItems(2) = RS!UnitPrice
RS.MoveNext
Loop
RS.Close
End Sub
'----------------------------------------------------------------------------------------------------------------------------------'/// Hin th frmNhapNCC

Private Sub cmdNhapNCC_Click()


frmNhapNCC.Show
End Sub
'----------------------------------------------------------------------------------------------------------------------------------'///Hin th frmNhapSP

Private Sub cmdNhapSP_Click()


frmNhapSP.Show
End Sub
frmNhapSP.frm
Option Explicit
'/// Np M nh cung cp vo mt Hp Combo

Sub NapMaNCC()
Dim RS As ADODB.Recordset
Set RS = Cn.Execute("SELECT SupplierID FROM Suppliers")
Do While RS.EOF = False
cboSupplierID.AddItem RS!Supplierid
RS.MoveNext
Loop
RS.Close
Set RS = Nothing
End Sub
'----------------------------------------------------------------------------------------------------------------------------------'/// Np m chng loi vo mt hp Combo

Sub NapMaChungLoai()
Dim RS As ADODB.Recordset
Set RS = Cn.Execute("SELECT CategoryID FROM Categories")
Do While RS.EOF = False
cboCategoryID.AddItem RS!CategoryID
RS.MoveNext
Loop
RS.Close
Set RS = Nothing
End Sub

Trang 157

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

'----------------------------------------------------------------------------------------------------------------------------------'/// Xo trng ni dung trong cc Textbox

Sub XoaFormNhap()
Dim Obj As Object
For Each Obj In Controls
If (TypeOf Obj Is TextBox) Then Obj.Text = ""
Next
End Sub
'----------------------------------------------------------------------------------------------------------------------'/// Khi thc hin thm bn ghi vo Bng cn t bit lu : Nu mt trng kiu
'/// Text th d liu thm vo phi c km thm 2 du nhy n hai u.
'/// Cn i vi trng kiu s th khng cn !

'----------------------------------------------------------------------------------------------------------------------Private Sub cmdThem_Click()


On Error GoTo Err
Dim strSQL As String, RS As ADODB.Recordset
strSQL="INSERT INTO Products (SupplierID, ProductName, CategoryID, UnitPrice)"
strSQL = strSQL & "Values ("
strSQL = strSQL & cboSupplierID.Text & ","
strSQL = strSQL & "'" & txtProductName.Text & "',"
strSQL = strSQL & cboCategoryID.Text & ","
strSQL = strSQL & txtUnitPrice.Text
strSQL = strSQL & ")"
Cn.Execute strSQL

'/// Thc thi cu lnh SQL

Set RS = Cn.Execute("SELECT * FROM Products")


Set dgrSanPham.DataSource = RS
Call XoaFormNhap
Exit Sub
Err:
MsgBox "Khng th thm bn ghi ! " & Err.Description, vbCritical, "Li"
End Sub
'-----------------------------------------------------------------------------------------------------------------------------------

Private Sub Form_Load()


If TrangThaiKetNoi = False Then Exit Sub
txtProductID.Text = "M SP c tng t ng (v l trng Autonumber)"
txtProductID.Locked = True
'/// Khng cho sa i.
Call NapMaNCC
Call NapMaChungLoai
End Sub

d. Ghi ch:

Nn s dng mt bin Connection cho tt c cc form.

Bin ny nn c t trong Module (tt nhin l Public)

Nn c kim tra tnh trng kt ni trc khi thc hin thao tc vi CSDL.

Khi thc hin chn d liu vo bng th cn phi s dng c ch bt li v li


rt hay xy ra.

Trang 158

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 15: Thit k bo co v kt xut ra my in danh sch cc sn phm (ver 1)


Chun b:

To mt ng dng mi
To mt Data Report : Vo Project -> Data Report
Vo Menu Project -> Add Data Enviroment, nu khng c mc ny th vo
Project -> Components v chn mc sau:

a. Thit k giao din

Hnh 5.42 t tn cho Data Enviroment v cc thnh phn trong

Hnh 5.43 - Thit k bo co


Trang 159

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Hng dn chi tit <Click vo y xem minh ho>


c. Vit lnh cho Report hnh 43: Lu l trong ca s Properties, cn t thuc
tnh
cho i tng Connection.
Option Explicit
Private Sub DataReport_Initialize()
Dim strConn As String
strConn = "Provider=Microsoft.jet.oledb.4.0;"
strConn = strConn & "Data source= " & App.Path & "\Nwind.mdb"
DE.cnnMain.ConnectionString = strConn
DE.cnnMain.CursorLocation = adUseClient
DE.cnnMain.Open
End Sub

d. Ghi ch:

C th to ra cc bo co con bng cch to ra cc Sub Header, Subfooter


v chn thuc tnh Grouping khi to ra cc Command.

Thc t, khi to cc bo co, ngi ta thng s dng cc iu khin chuyn


nghip t cc hng th ba nh Dynamic Report, Crystal Report v.v...

Bi 16 : Ging nh bi 15 nhng thm cc ng k.

Hnh 5.44 - To ng vin (khung) cho bo co bng ng k (Line)

Trang 160

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

C- BI TP T GII
Bi 1. Vit chng trnh nhp d liu cho tt c cc bng trong CSDL NWind. Trong
qu trnh nhp cn hin th kt qu (ni dung ca bng).
Bi 2. Vit chng trnh np tt c cc bn ghi trong bng Customers vo mt iu
khin MS FlexGrid.
Bi 3. Vit chng trnh tra cu cc hm, th tc trong VB.
Bi 4. Vit chng trnh nh dng cc t kho ca VB trong ti liu MS Word, cc
t kho c nh dng thnh ch m.
Bi 5. Vit chng trnh qun l l lch ca SV trong mt lp.
Bi tp 6 - Bi tp ln : Xy dng mt ng dng E-MAILn gin.
Trong bi tp ln ny, bn c c th s dng h qun tr CSDL Access hoc SQL
Server u c (v nu ch dng lu tr d liu th khng c s khc nhau
nhiu). Tuy nhin, SQL Server thng c dng nhiu hn trong cc ng dng i
hi tc x l nhanh, kh nng qun l d liu ln. Vic s dng SQL to CSDL
cng nh cch kt ni vi CSDL SQL Server dnh cho bn c t tham kho thm
(v ti liu c rt nhiu v cng tng i n gin).
BI TP LN
m phng chng trnh qun l th in t, s dng h qun
tr csdl sqlserver 2000 v ngn ng lp trnh visual basic
Gii thiu chung
Nh chng ta bit, thc t trong qu trnh gi th in t th thng tin gi i thng
bao gm : Tiu th, a ch ngi nhn, ni dung th, file gi km, ngy gi (do h
thng t sinh ra) v cc thng tin ny c lu tr trn my ch theo mt giao thc
chun (Giao thc SMTP v POP3). Cn khi nhn th chnh l qu trnh chng ta ly
cc thng tin trn v t my ch. Nh vy, nu chng ta s dng SQLServer lu
tr v qun l thng tin ng thi kt hp dng Visual basic gi (Insert vo bng
CSDL) v nhn (Select bn ghi trong bng) sau hin th cho ngi dng th hon
ton c th m phng c h thng th in t ny trong khi ngi dng th khng
th nhn bit c l h thng ca chng ta ch l m phng (tc l h thng trong
sut i vi ngi dng).
Hng dn phn tch v d liu
V y, do thi gian ngn v mc ch chnh l sinh vin thao tc thnh thc cc
cu lnh, v vy nn s y v ti u cc bng d liu khng phi l yu t quan
trng hng u.
Chng ta thy rng, h thng c cc thc th sau :

Ngi (Nhn/gi) (H_tn, a_ch, gii_tnh)


Th in t (Tiu_, Ngi_gi, Ngi_nhn, ngy_gi, ngy_nhn, tnh_trng
(xo hay cha), ni_dung_th,
Tn file nh km, kch thc file nh km, ng dn file nh km trn a)
-Do mi ngi c th gi nhiu E-Mail nn mi quan h Ngi-Th in t l 1
Nhiu (Hay 1 n)
Trang 161

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Nh vy vit li l :
Ngi (Nhn/gi) (MaNguoiDung, H_tn, a_ch, gii_tnh)

Th in t (MaNguoiGui,Tiu_, Ngi_nhn, ngy_gi, ngy_nhn, tnh_trng


(xo hay cha), ni_dung_th,
Tn file nh km, kch thc file nh km, ng dn file nh km trn a)
Trong MaNguoiDung trong thc th Th in t l kho ngoi.
- Do ng vi mi E-Mail li c th c nhiu file nh km, nn ta tch ra thc th File
t Th in t, quan h Th in t - File khi s l 1-n Ta c 3 thc th :

Ngi (Nhn/gi) (MaNguoiDung*, H_tn, a_ch, gii_tnh)


Th in t (MaNguoiGui, M_E-Mail*, Tiu_, Ngi_nhn, ngy_gi, ngy_nhn,
ni_dung_th)

File (M_E-Mail, M_file*, Tn_file_nh_km, kch_thc_file_nh_km,


ng_dn_file_nh_km_trn_a)
- Do mi mt E-Mail li c th gi cho nhiu ngi, do vy thc th Th_in_T li
tch ra mt thc th con l Danh sch Ngi Nhn

Ngi (Nhn/gi) (MaNguoiDung*, H_tn, a_ch, gii_tnh)


Th in t (MaNguoiDung, M_E-Mail*, Tiu_, ngy_gi, ngy_nhn,
ni_dung_th)

File (M_E-Mail, M_file*, Tn_file_nh_km, kch_thc_file_nh_km,


ng_dn_file_nh_km_trn_a)

Danh sch Ngi nhn (MaNguoiNhan*, Ma_E-Mail, Tinh_Trang)


Tn cc bng trn c vit tng ng bng ting Anh l : tblUserDetail, tblEMails,
tblFiles, tblReceivers.

Trang 162

Bin son: B mn CNPMHSPKT HY 2005

Cc bng d liu

BI TP LP TRNH HNG S KIN

Trang 1

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

S LIN KT GIA CC BNG D LIU

Trang 1

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

mt s d liu mu cho cc bng


tblUserDetail Table

tblEMailes Table

Trang 2

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

tblFiles table

tblReceivers Table

Trang 3

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

cc yU CU chnh
Vit mt chng trnh bng Visual Basic thc hin cc cng vic sau :
1./ To c s d liu trn SQL Server c tn l TK32
2./ Form nhp d liu cho bng tblUserDetail
3./ Ly th v v hin th ni dung ca th cho mt ngi no
4./ Gi mt th i cho mt (hoc nhiu ngi)
5./ Xo th
6./ Chn cc th tho mn iu kin no (v d c gi t congnx, hay nm gi
l nm 2004 v.v...)
7./ Cho bit l nhng th no cha c c, nhng th no c ngi c
8./ Xo v khi phc li nhng th b xo
9./ Thng k thng tin v nhng e-mail gi i ca mt ngi nh: S lng e-mail,
s file attach, tng kch thc ca tt c cc file attach.
10./ Thng k s lng e-mail c gi i t cc n v
11./ Thay i Password, quyn... ng nhp
12./ To Account mi thng qua chng trnh.

Bi tp 1: Phn tch v thit k phn mm tra cu & nhp sch trong th vin
Bi tp 2: Phn tch v thit k phn mm qun l lch lm vic c nhn
Bi tp 3: Phn tch v thit k phn mm tra cu t in tin hc
Bi tp 4: Phn tch v thit k phn mm qun l im thi ca mt lp
Bi tp 5: Phn tch v thit k phn mm qun l hng ho cho mt ca hng.
Bi tp 6: Phn tich, thit k v xy dng mt Website gii thiu hng ho.
Bi tp 7: Phn tch, thit k v xy dng mt Website t hng (Sn phm c th
l qun o, giy dp, in thoi.)qua mng.
Bi tp 8: Phn tch, thit k ng dng thi trc nghim trn WEB
Bi tp 9: Phn tch, thit k phn mm dy hc trn VB
Bi tp 10: Phn tch, thit k phn mm chi c CARO.

Trang 1

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

MC LC
CHNG I: NGN NG LP TRNH VISUAL BASIC
A. BI TP
Bi tp 1: S dng hm MsgBox v InputBox ..................................................1
Bi tp 2: Minh ho cu trc If Then. ...........................................................1
Bi tp 3-Select Case: ......................................................................................1
Bi tp 4: Hin th cc loi thng bo s dng hm MsgBox. ..........................1
Bi tp 5: S dng cu trc Select Case..........................................................1
Bi tp 6: S dng vng lp FOR.....................................................................2
Bi tp 7: S dng vng lp For vi iu khon Step ......................................2
Bi tp 8: S dng vng lp For m ngc FOR DOWNTO. ..............2
Bi tp 9: S dng vng lp DoLoop Until ....................................................2
Bi tp 10: S dng cu trc Do While Loop ...............................................2
Bi tp 11: Thot khi vng lp vi Exit For, Exit Do........................................2
Bi tp 12: S tng ng gia cc cu trc lp. .........................................2
Bi tp 13: S dng vng lp FOR...................................................................2
Bi tp 14 Tnh N !:........................................................................................2
Bi tp 15- Tnh tng 1 dy s:.........................................................................2
Bi tp 16- Tnh dy Fibonasi...........................................................................2
Bi tp 17- Tm c s chung ln nht : .........................................................2
Bi tp 18-Ti gin phn s :............................................................................2
Bi tp 19- Tm s nguyn t:...........................................................................3
Bi tp 20-m k t:.......................................................................................3
Bi tp 21-Tnh tng dy s:.............................................................................3
Bi tp 22 : Bi ton tm phn t ln nht (nh nht) trong mt danh sch .....3
Bi tp 23: Lit k cc phn t ln nht (nh nht) trong danh sch. .............3
Bi tp 24: Sp xp mt dy s nguyn. ..........................................................3
Bi tp 25 Quick Sort.....................................................................................3
Bi tp 26- Heap Sort: ......................................................................................3
Bi tp 27: Sp xp ..........................................................................................3
Bi tp 28-Chun ho xu: ...............................................................................3
Bi tp 29-Chun ho xu ................................................................................3
Bi tp 30-Tch s khi xu: ............................................................................3
Bi tp 31-Tch Cu:........................................................................................4
Bi tp 32-Chuyn i Font ch.......................................................................4
Bi tp 33-Thng k k t trong xu.................................................................4
Bi tp 34-Thay th k t .................................................................................4
Bi tp 35-Cng s nguyn ln: .......................................................................4
Bi tp 36-Ma trn s: ......................................................................................4
Bi tp 37- Kim tra "ng thng" trong ma trn:...........................................4
Bi tp 38- Mng bn ghi:.................................................................................4
Trang 2

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

B. HNG DN, GII MU


Bi tp 1 ...........................................................................................................5
Bi tp 2 ...........................................................................................................6
Bi tp 3 ...........................................................................................................6
Bi tp 5 ...........................................................................................................7
Bi tp 6 ...........................................................................................................8
Bi tp 7 ...........................................................................................................9
Bi tp 8 ...........................................................................................................9
Bi tp 9 ...........................................................................................................9
Bi tp 10 .......................................................................................................10
Bi tp 11 .......................................................................................................11
Bi tp 12 .......................................................................................................11
Bi tp 13 .......................................................................................................13
Bi tp 14: ......................................................................................................14
Bi tp 15: ......................................................................................................15
Bi tp 16 .......................................................................................................15
Bi tp 17: ......................................................................................................16
Bi tp 18: ......................................................................................................17
Bi tp 19: ......................................................................................................17
Bi tp 20 .......................................................................................................18
Bi tp 21: ......................................................................................................19
Bi tp 22 .......................................................................................................19
Bi tp 23 .......................................................................................................20
Bi tp 24 .......................................................................................................20
Bi tp 25 .......................................................................................................21
Bi tp 26 .......................................................................................................23
Bi tp 27 .......................................................................................................24
Bi tp 28: ......................................................................................................25
Bi tp 29 .......................................................................................................26
Bi tp 30 .......................................................................................................27
Bi tp 31 .......................................................................................................28
Bi tp 32 .......................................................................................................28
Bi tp 33 .......................................................................................................29
Bi tp 34 .......................................................................................................30
Bi tp 35 .......................................................................................................30
Bi tp 36 .......................................................................................................31
Bi tp 37 .......................................................................................................32
Bi tp 37 .......................................................................................................33
C. BI TP T GII

CHNG II: S DNG CC IU KHIN C BN


A. BI TP
Trang 3

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 1: Vit chng trnh gii phng trnh bc 2............................................38


Bi 2: Mt form nhp .....................................................................................38
Bi 3: Vit chng trnh nhp h tn sinh vin...............................................39
Bi 4: Vit chng trnh nh bi s 3,............................................................39
Bi 5: Minh ho s dng iu khin Listbox v thuc tnh a la chn..........39
Bi 6: Minh ho s dng iu khin Listbox v hm tch xu Split. ...............40
Bi 7: Tch a ch E-Mail s dng hm Split .................................................40
Bi 8: Sp xp danh sch theo TN...............................................................41
Bi 9: Minh ho s dng iu khin ComboBox.............................................41
Bi 10: Minh ho thao tc vi ComboBox v vic ly tn font ca h thng. .42
Bi 11: Minh ho s dng iu khin Option button.......................................43
Bi 12 Minh ho s dng nhn....................................................................43
Bi 13 Minh ho s dng Label kt hp vi Frame v Timer......................44
Bi 14 : Yu cu nh bi 13 nhng tc .....................................................44
Bi 15 - S dng Label, kt hp vi Line gi lp nt nhn........................44
Bi 16: Minh ho s dng iu khin Timer to hiu ng ch chy. .............45
Bi 17: S dng Timer, vit chng trnh ng h bo thc. ......................45
Bi 18: S dng iu khin Timer kt hp vi iu khin Line v ng h
Digital..............................................................................................................45
Bi 19: S dng iu khin Timer ghi nhn cc phm nhn KeyLogger .46
Bi 20: Minh ho s dng cc iu khin thao tc Tp, Th mc v a. ..46
Bi 21: Minh ho kh nng ko th (Drag-Drop) file v th mc....................47
Bi 22: Thao tc vi iu khin FileListbox v kh nng a la chn. ...........47
Bi 23: S dng iu khin Image lm nh nn cho form. .............................48
Bi 24:S dng iu khin PictureBox to Icon ti khay h thng
(SystemTray) ..................................................................................................48
B. HNG DN, GII MU
Bi 1 ...............................................................................................................49
Bi 2: ..............................................................................................................50
Bi 3 ...............................................................................................................51
Bi 4 ...............................................................................................................52
Bi 5 ...............................................................................................................53
Bi 6 ...............................................................................................................54
Bi 7 ...............................................................................................................55
Bi 8. ..............................................................................................................56
Bi 9 ...............................................................................................................58
Bi 10 .............................................................................................................59
Bi 11 .............................................................................................................60
Bi 12 .............................................................................................................62
Bi 13 .............................................................................................................64
Bi 14 .............................................................................................................65
Bi 15 .............................................................................................................66

Trang 4

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 16 .............................................................................................................67
Bi 17 .............................................................................................................67
Bi 18 .............................................................................................................69
Bi 19 .............................................................................................................70
Bi 20 .............................................................................................................71
Bi 21 .............................................................................................................73
Bi 22 .............................................................................................................74
Bi 23 .............................................................................................................76
Bi 24 .............................................................................................................77
C. BI TP T GII

CHNG III: S DNG HP THOI CHUN V MENU


A. BI TP
Bi 1: Xy dng chng trnh son tho vn bn s dng iu khin
RichText. ........................................................................................................80
Bi 2: Xy dng chng trnh nh bi 1 nhng c thm menu "Mu ch"....80
Bi 3: Xy dng chng trnh nh bi 2, nhng thm kh nng hin th menu
ng cnh ........................................................................................................81
Bi 4: Xy dng chng trnh nh bi 3 nhng s dng c ch a ca s ..81
Bi 5: Xy dng chng trnh nh bi 4, .......................................................81
Bi 6 : Nh bi 5 nhng chng trnh c thm thanh trng thi ....................82
B. HNG DN, GII MU
Bi 1 ...............................................................................................................83
Bi 2 ...............................................................................................................85
Bi 3 ...............................................................................................................85
Bi 4 ...............................................................................................................86
Bi 5 ...............................................................................................................88
Bi 6 ...............................................................................................................92
C. BI TP T GII

CHNG IV: S DNG CC IU KHIN NNG CAO


A. BI TP

Bi 1: Minh ho s dng iu khin Carlendar (Lch).....................................94


Bi 2: Minh ho s dng iu khin truyn thng ni tip Comm Control ......95
Bi 3 : Minh ho iu khin FlexGrid ..............................................................95
Bi 4 : Minh ho s dng iu khin Web brower v HTML Object Library. ..96
Bi 5: Minh ho s dng Internet Control .......................................................96
Bi 6. S dng iu khin Multimedia MCI chi cc file nhc v hnh ......97
Bi 7: S dng Script Control tnh ton biu thc bt k...........................97
Bi 8: S dng iu khin SSTab v vit chng trnh c CARO n gin ..98
Bi 9: S dng thanh tin trnh (Progressbar) ................................................98
Bi 10 :S dng iu khin Image Combobox ...............................................99
Trang 5

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 11 : S dng iu khin Listview..............................................................99


Bi 12: S dng iu khin TreeView ..........................................................100
Bi 13: S dng DateTimePicker nhp trc quan ngy/thng/nm. .......101
Bi 14: S dng iu khin Window Media Player .......................................101
B. HNG DN, GII MU
Bi 1 .............................................................................................................102
Bi 2 .............................................................................................................103
Bi 3 .............................................................................................................104
Bi 4 .............................................................................................................106
Bi 5 .............................................................................................................108
Bi 6 .............................................................................................................109
Bi 7 .............................................................................................................110
Bi 8 .............................................................................................................110
Bi 9 .............................................................................................................112
Bi 10 ...........................................................................................................114
Bi 11 ...........................................................................................................115
Bi 12 ...........................................................................................................117
Bi 13 ...........................................................................................................121
Bi 14 ...........................................................................................................121
C. BI TP T GII

CHNG V: THAO TC VI C S D LIU


A. BI TP
Bi 1: Vit chng trnh xem thng tin v khch hng (Version 1). .............129
Bi 2: Vit chng trnh xem thng tin v khch hng (Version 2) ..............130
Bi 3: Vit chng trnh xem thng tin v khch hng (Version 3) ..............130
Bi 4: Vit chng trnh xem thng tin v khch hng (Version 4) ..............130
Bi 5: Vit chng trnh xem mt bng CSDL bt k trong CSDL NWind....131
Bi 6: Vit chng trnh np tt c m nh cung cp vo mt hp Combo .131
Bi 7: Vit chng trnh lit k cc sn phm do 1 cng ty cung cp (v1) ...131
Bi 8: Vit chng trnh lit k cc sn phm do 1 cng ty cung cp (v2) ...132
Bi 9: Nh bi 8 nhng cc sn phm c hin th trong mt ListView.....132
Bi 10: Xy dng cy nhiu mc xem thng tin v nhng sn phm .....133
Bi 11: B sung thm mt trng mi trong cu lnh SELECT ...................133
Bi 12: Thc hin nh bi tp 5 nhng s dng i tng Connection ......134
Bi 13: Lm li bi 10 s dng i tng Connection v Recordset ...........134
Bi 14: Thao tc CSDL trn nhiu Form.......................................................134
Bi 15: Thit k bo co v kt xut ra my in danh sch sn phm (v1)....135
Bi 16: Thit k bo co v kt xut ra my in danh sch sn phm (v2)....136
B. HNG DN, GII MU
Bi 1 .............................................................................................................136

Trang 6

BI TP LP TRNH HNG S KIN

Bin son: B mn CNPMHSPKT HY 2005

Bi 2 .............................................................................................................137
Bi 3 .............................................................................................................138
Bi 4 .............................................................................................................139
Bi 5 .............................................................................................................140
Bi 6 .............................................................................................................141
Bi 7 .............................................................................................................141
Bi 8 .............................................................................................................142
Bi 9 .............................................................................................................144
Bi 10 ...........................................................................................................145
Bi 11 ...........................................................................................................148
Bi 12 ...........................................................................................................151
Bi 13 ...........................................................................................................152
Bi 14 ...........................................................................................................154
Bi 15 ...........................................................................................................159
Bi 16 ...........................................................................................................160
Bi tp ln ....................................................................................................161

Gii thiu chung ..................................................................................................161


Hng dn phn tch v d liu ..........................................................................161
C. BI TP T GII

Trang 7

También podría gustarte