Giáo trình Visual basic 6.0 | Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh

Tài liệu gồm 198 trang, có 10 chương chính bao gồm các kiến thức cơ bản liên quan: cách lập trình hướng sự kiện trên Windows bằng Visual Basic, biết cách ứng dụng các đối tượng điều khiển cơ bản và mở rộng để viết chương trình trên Windows, biết cách viết chương trình truy xuất cơ sở dữ liệu bằng Visual Basic giúp bạn ôn luyện và nắm vững kiến thức môn học. Mời bạn đọc đón xem!

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT
KHOA NG NGH THÔNG TIN
GIÁO TRÌNH

 
 
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
1
Chương 1
Gii thiu
I.
CÁC MÔI TRƯỜNG LP TRÌNH
Lp trình: Viết chương trình
Chương trình phi được chy trên nn mt H điu hành. Trên máy PC hai loi
môi trường h điu hành : đó là môi trường DOS và môi trường Windows
Đặc đim ca môi trường DOS
H điu hành đơn chương : mi lúc ch có 1 chương trình làm vic. Lnh trong
chương trình s qui định hot động kế tiếp ngưi dùng s tác động vào
chương trình.
V mt giao din: Mi lúc ch mt chương trình hot động. Khi hot động
giao din ca chương trình s chiếm toàn b màn hình. Ch khi chương trình
này kết thúc thì chương trình khác mi có th hot động được.
V nguyên tc lp trình: Lp trình th tc (Procedural Programming)
Các công c lp trình trên DOS thông dng: BASIC, TURBO PASCAL,
TURBO C...
Đặc đim ca môi trường Windows:
H điu hành đa chương: mi lúc có th có nhiu chương trình hot động đồng
thi. Mi chương trình s không biết trước hot động kế tiếp mà người dùng s
tác động vào chương trình
Giao din đồ ha (GUI-Graphics User Interface): Mi chương trình khi hot
động được trình bày trong 1 ca s
Các chương trình Windows hot động theo nguyên tc nhn x thông
đip (Message) đó là các tác động t ngưi dùng như các s kin bm phím t
bàn phím, s kin t mouse (di chuyn, bm phím, nh phím...) . Các tác động
này s được chuyn thành các thông đip cha trong hàng đợi (Message
Queue) ca h thng. Windows s ln lượt xem xét c thông đip chuyn
chúng đến các ng dng tương ng. Chương trình đang hot động nhn thông
đip s phn ng theo ch ca tu theo ý nghĩa ca tng loi thông đip.
d: S kin bm phím trái chut trên nuty Minimize s làm cho ca s
phóng ln, S kin nhp đúp phím trái chut trên thanh tiêu đề s làm cho ca
s phóng ln (Maximize) hoc hoàn nguyên (Restore)...
Các công c lp trình thông dng trên Windows:
BPW (Borland Pascal for Windows), BCW (Borland C for Windows),
Delphi, Visual C++, Visual Basic.
Giáo trình Visual Basic 6.0
2
II.
CÁC ĐỐI TƯỢNG ĐIU KHIN CHUN TRÊN WINDOWS
Chương trình trên windows s dng giao din đồ ha để giao tiếp vi ngưi s dng:
Trên mi ca s ca 1 chương trình Windows s dng mt s đối tượng điu khin
để người dùng ra lnh. nhiu loi đối tượng vi các chc năng khác nhau. Để
th viết chương trình trên Windows, cn làm quen vi các đố
i tượng chun.
1. Command Button (Nút lnh): được s dng để ra lnh. Trên các hp thoi, thưng
thy các nút lnh như OK để chp nhn hoc Cancel để hy mt yêu cu.
2. Checkbox: đưc s dng để chn hoc không chn mt yếu t nào đó
Hình 1.1:CheckBox chn chế độ đánh s trang cho trang đu tiên
trong chc năng đánh s trang ca ng dng WORD
3. Option Button (Nút chn): Thường hot động theo nhóm đưc s dng để chn
mt trong nhiu yếu t
Hình 1.2:Chn cách chuyn dng ch trong WORD
4. Textbox: Hp nhp d liu cho chương trình, có th nhp 1 dòng hay nhiu dòng.
5. Label (Nhãn): đối tưng điu khin được s dng trình y mt ni dung.
6. List box: Hp danh sách đưc s dng trình bày mt danh sách giá tr .
7. Combobox: Hp danh sách hot động ging ListBox TextBox, người dùng
th nhp giá tr hoc chn mt giá tr trong mt danh sách cho trước.
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
3
Hình 1.3: Hp thoi Print vi các đối tượng TextBox, Label, ComboBox
III.
GII THIU VISUAL BASIC
1.
Khi động - Ca s khi động
Màn hình khi động có dng
Hình 1.4: Ca s khi động-Th New
New: S dng th này để to ng dng mi, thường chn biu tượng đầu tiên
(Standard EXE) cho các ng dng bình thường chy trên Windows.
Existing: S dng th này để m mt ng dng đang có trên dĩa.
Giáo trình Visual Basic 6.0
4
Hình 1.5: Ca s khi động-Th Existing
Để ý là ng dng viết trên VB được gi project. Tp tin này có phn m rng
VBP (Visual Basic Project) , VBG (Visual Basic Group) hoc MAK - Phn m
rng loi này ch được s dng cho các project viết trên VB3.0.
Recent: S dng th này để np nhanh ng dng đã làm vic trước đó
Hình 1.6: Ca s khi động-Th Recent
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
5
2.
Màn hình làm vic
Màn hình Visual Basic có dng
Hình 1.7: Màn hình làm vic Visual Basic
Thanh menu (Menu Bar) : Menu chính ca chương trình. Cùng
vi các menu kéo xung (Pulldown) - h thng menu trình bày
tt c các chc năng ca màn hình VB.
Thanh công c (Toolbar): Ging các ng dng khác chy trên
Windows, thanh công c trình bày tt c các chc năng thường
s dng trong màn hình VB.
Hp công c (Toolbox): Cha các đối tưng điu khin được s
dng trong thiết kế giao din ca chương trình. Mi mt biu
tượng trên ToolBox đại din cho mt đối tượng mun s dng
trong giao din ca chương trình. Khi di chuyn mouse trên các
biu tượng, li nhc chc năng ca nút s t động xut hin.
Đối tưng được chn bng cách click vào nh nh biu tượng
trên ToolBox. Đối tượng nào đưc chn thì hình nh ca s
đưc v lõm xung.
ToolBox được đóng li bng nút close trên thanh tiêu đề. Làm toolbox
xut hin tr li bng cách chn
View/Toolbox trên menu hoc bm nút
Toolbox trên thanh công c
Menu
Bar
ToolBa
r
ToolBo
x
Form
Window
Project
Explore
r
Propert
y
Window
Form
Layout
Window
Nút Toolbox
Giáo trình Visual Basic 6.0
6
Hình 1.8: Chương trình có 2 form
Ca s Form: Qun các ca s được s dng
trong chương trình. Mi ca s trong chương
trình gi form. Chương trình bao nhiêu
form s by nhiêu ca s form. Hình trên
trình bày mt ng dng có 2 form
Ca s Project (Project Explorer): Giúp người
lp trình d dàng theo dõi và qun các tp tin
trong chương trình đang viết. Mi chương trình
VB th bao gm nhiu loi tp tin đại đin
cho các tnh phn s dng trong chương trình.
Các loi tp tin trong mt chương trình VB có th gm:
*.FRM: Tp tin form. Chương trình bao nhiêu form s by nhiêu tp tin
FRM
*.BAS: Tp tin Module cha các khai báo chung s dng trong chương trình
Hình trên là ca s Project ca mt chương trình có 2 form và 1 module
Project Explorer được đóng li bng nút close trên thanh tiêu đề ca ca s .
Làm xut hin tr li bng cách chn View/Project Explorer trên menu hoc
bm t hp phím CTRL+R hoc bm nút Project Explorer trên thanh công c
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
7
Ca s thuc tính (Properties Window): Mi đối tượng điu khin trong
chương trình có nhiu đặc đim để mô t tính cht ca đối tượng như v trí trên
form, màu ch ... Các đặc đim thường s dng đưc mô t trong ca s thuc
tính. Thông qua ca s này, ngưi lp trình s điu chnh các thuc nh ca
đối tượng theo ý mun trong quá trình thiết kế giao din cho chương trình.
Các thành phn ca ca s thuc tính:
Hình 1.9: Ca s thuc tính
- Hp chn đối tượng: ComboBox phía trên cha danh sách các đối tượng trên
form đang thiết kế. Người lp trình th click trên form để chn đối tượng
cn điu chnh thuc tính hoc click chn tên đối tưng trong danh sách này.
- Th Alphabetic trình bày các thuc tính theo thú t a, b, c ca tên thuc tính...
- Th Categorize trình bày các thuc tính theo nhóm chc năng
Trong lúc thiết kế, thường xem thuc tính theo th t alphabetic
Các thuc tính đối tượng được trình bày thành 2 ct : ct bên trái là tên thuc tính, ct
bên phi giá tr ca thuc tính. ch điu chnh giá tr thuc tính ph thuc vào
thuc tính cn điu chnh - loi thuc tính được điu chnh giá tr bng cách nhp
giá tr mi ti ct giá tr, loi thuc tính ch có th điu chnh giá tr bng cách
chn 1 trong danh sách giá tr đã được qui định trước
Giáo trình Visual Basic 6.0
8
Hình 1.10: Nhp giá tr cho thuc tính tiêu đề ca form.
Hình 1.11: Chn thuc tính cho vin ca form, danh sách tr có sn
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
9
Properties Window đưc đóng li bng nút close trên thanh tiêu đề. Làm xut hin tr
li bng cách chn View/Properties Window trên menu hoc bm phím F4 hoc bm
nút Properties Window trên menu
Ca s Form Layout: Dùng điu chnh v trí form khi xut hin lúc chy chương
trình. Tr chut o hình ch nht v n trong màn hình ca ca s di
chuyn để điu chnh v trí.
Thường v trí ca các form khi chy s được thc hin bng lnh trong chương trình.
Để thun tin cho vic thao tác trên ca s thuc tính thưng đóng ca s này trong
c thiết kế. Mun làm xut hin ca s này, bm nút Form Layout trên thanh công c
Ca s lnh: Ca s dùng viết lnh cho c đối tượng trên 1 form. Mi Form
mt ca s lnh, ca s lnh ch xut hin khi nhp đúp lên đối tưng mun viết
lnh. Ca s lnh gm các thành phn sau:
- Hp chn đối tượng (Combo box phía trên bên trái) - Click để chn đối
tượng mun viết lnh
Hình 1.12: Chn đối tưng viết lnh
- Hp chn loi s kin (ComboBox phía trên n phi) - Click để chn s
kin mun viết lnh.
Giáo trình Visual Basic 6.0
10
Hình 1.13: Chn s kin viết lnh
Khi mt s kin được chn, dòng khai báo ca th tc tương ng xut hin trong ca
s phía dưới.
Ví d: Chn đối tượng nút bm CmdPt, s kin Click. Dòng khai báo th tc có dng
Private sub CmdPt_Click(Index As Integer)
End sub
Phn lnh bên trong do ngưi lp trình viết
Hình 1.14: Viết lnh bên trong c khai báo th tc
IV.
CÁC THAO TÁC CƠ BN VI ĐỐI TƯỢNG TRÊN FORM
1. Đưa mt đối tượng lên form
Nhp đúp ti nút đối tưng trên Toolbox, đối tượng s xut hin ngay gia
form.
Hoc
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
1
1
Click đối tượng trên Toolbox, con tr chuyn thành dng + trên form,
Click ti v trí cn đặt đối tượng trên form,
o để định ch thước đối tượng trên form,
Nh .
Lưu ý: Trong khi kéo để qui định kích thước đối tượng, th quan sát kích thưc
trên Toolbar hoc dng li đủ lâu trên form, ô kích thưc s xut hin.
2. Chn đối tượng trên form
Chn mt đối tượng
Click ti đối tượng cn chn
Chn nhiu đối tượng cùng lúc
Bm Shift và Click để chn nhiu đối tượng
Hoc
S dng biu tượng chn trên Toolbox để xác định vùng
hình ch nht bao quanh các đối tượng cn chn
3. Di chuyn
Chn mt hoc nhiu đối tượng cn di chuyn
Kéo đến v trí mi
Nh
4. Hiu chnh kích thước mt đối tượng
Chn đối tượng
Tr mouse vào 1 trong 8 nút điu khin quanh đối tượng chn, o để đ
iu
chnh kích thước
5. Xoá
Chn mt hoc nhiu đối tượng mun xoá
Bm DEL
V.
GHI NP MT VB PROJECT
Phn này trình y các thao tác thường s dng đối vi n hình làm vic VB để
qun lý các form, module... trong mt Project. Đó là cách ghi mt project sau khi thiết
kế hoc np mt Project có sn trên dĩa.
1.
Thêm mt form mi vào chương trình
Trường hp thêm form mi
Right-click trong Project Explorer/Add/Form,
Nhp đúp biu tượng Form trong hp thoi Add Form, form mi s được thêm
vào project (hình 1.15).
Trường hp thêm form có sn trên dĩa (t Project khác)
Right-click trong Project Explorer/Add/Form ,
Chn th Exising, nhp đúp form cn thêm vào (hình 1.16) .
Giáo trình Visual Basic 6.0
12
Hình 1.15: Thêm mt form mi vào chương trình
Hình 1.16: Thêm mt form có sn vào chương trình
2.
Xoá mt form
Right-Click form mun xoá trong Project Explorer,
Chn Remove form trên menu.
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
1
3
3.
Ghi Project lên dĩa
Cn nhc li Project trong VB gm nhiu thành phn như form, Module... mi
form hoc Module s được ghi thành mt tp tin. Như vy phi đặt n cho các form
module khi ghi Project.
Bm nút Save trên Toolbar hoc chn lnh File/Save Project,
VB s ln lưt nhc đặt tên cho các form. Hp thoi đặt tên form có dng hình
1.17
Hình 1.17: Hp thoi đặt tên form khi ghi
Nhp tên form vào hp File name,
Bm nút Save và lp li bưc này cho tt c các form trong chương trình,
Sau khi ghi tt c các form. Xut hin hp thoi đặt tên Project. Tp tin Project
có phn m rng VBP.
Hình 1.18: Hp thoi đặt tên chương trình
Giáo trình Visual Basic 6.0
14
Lưu ý: VB ch nhc đặt tên khi ghi Project ln đầu tiên
4.
Np Project t dĩa
Bm t Open trên Toolbar hoc chn lnh File/Open Project. Hp thoi Open
project xut hin,
Nhp đúp tên project cn m để np vào màn hình VB.
Hình 1.19: Np Project t dĩa
5.
To Project mi
Chn lnh File/New Project. Hp thoi New project xut hin,
Nhp đúp biu tượng Stanđar EXE để to project mi.
Hình 1.20
: To mt Project mi
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
1
5
VI.
MT CHƯƠNG TRÌNH VÍ D
Thiết kế chương trình nhp hai s, tính tng và in kết qu
Giao din chương trinh có dng như sau:
Hình 1.21: Giao din ca chương trình d
Nhp s th nht o Textbox phía trên.
Nhp s th hai vào Textbox phía dưi.
Bm nút “Tính”. Kết qu phép cng 2 s xut hin trong ô dưới cùng
Các bước thc hin như sau:
1. Khi động Visual Basic , chn New/ Standard EXE
2. Điu chnh các thuc tính ca form1 theo như bng sau:
Thuc tính (Property) Giá tr (Value)
Name frmTinh
Caption Cong hai so
Height 2500
Width 2800
3. Nhp đúp Label trên Toolbox để đặt Label lên gia form. Di chuyn đặt các
thuc tính theo như bng sau:
Thuc tính (Property) Giá tr (Value)
Name Label1
Caption Nhap so thu 1
4. Làm tương t như bước 3 vi các thuc tính theo như bng sau:
Thuc tính (Property) Giá tr (Value)
Name Label2
Caption Nhap so thu 2
5. Nhp đúp Textbox trên Toolbox. Textbox th nht s xut hin chính gia form.
Di chuyn và điu chnh các thuc tính theo bng sau:
Thuc tính (Property) Giá tr (Value)
Alignment 1 - Right justify
Name txtSo1
Height 315
Width 735
Giáo trình Visual Basic 6.0
16
6. Nhp đúp Textbox trên Toolbox. Textbox th hai s xut hin chính gia form. Di
chuyn điu chnh các thuc tính theo bng sau:
Thuc tính (Property) Giá tr (Value)
Alignment 1 - Right justify
Name txtSo2
Height 315
Width 735
7. Nhp đúp Textbox trên Toolbox. Textbox th ba s xut hin cnh gia form. Di
chuyn và điu chnh các thuc tính theo bng sau:
Thuc tính (Property) Giá tr (Value)
Alignment 1 - Right justify
Name txtTong
Locked True
Height 315
Width 735
8. Nhp đúp CommandButton trên Toolbox. Button s xut hin chính gia form. Di
chuyn và điu chnh các thuc tính theo bng sau:
Thuc tính (Property) Giá tr (Value)
Name CmdTinh
Caption Tinh
Height 330
Width 1335
9. Nhp đúp CommandButton để viết lnh cho chc năng nh toán khi người
dùng bm vào t này. Ca s mã lnh s xut hin vi phn khai báo th tc khi
bm nút được định nghĩa sn:
Private Sub CmdTinh_Click()
End Sub
Nhp lnh để cui cùng ta có
Private Sub CmdTinh_Click()
txtTong.Text = Val(txtSo1.Text) + Val(txtSo2.Text)
End Sub
10. Bm nút Run trên Toolbar hoc F5 để chy chương trình. Nhp 2 s vào 2 text
box. Bm nút tính. Kết qu cng 2 s xut hin trong ô th 3.
11. Chn File/Save Project để save các tp tin ca Project như sau:
FrmTinh.FRM :Tp tin định nghĩa form frmTinh
Vd1.VBP :Tp tin định nghĩa Project
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
17
Chương 2
Đối Tưng và cách s dng Đối Tưng
I.
ĐỐI TƯỢNG
1.
Khái nim
Visual Basic ngôn ng lp trình kiu đối tưng, chương trình Basic gm các đối
tượng. Làm vic vi VB chính là làm vic vi các đối tượng.
2.
c đc đim ca đối tượng
a. Tên
Mi đối tưng đưc đặt tên. Tên đối tượng được viết theo qui tc sau:
Có chiu dài ti đa 40 ký t
Không được bt đầu bng s
Không có khong trng
Để phân bit đối tượng này vi đối tượng khác, tên đối tượng được viết kèm vi tin
t (prefix) ch loi đối tượng. Các tin t đưc qui định như sau:
Loi đối tượng Tin t Loi đối tượng Tin t
CheckBox chk Horizontal ScrollBar hsb
ComboBox cbo Image img
Command Button cmd Label lbl
Common Dialog cdl Line lin
Data Control dat ListBox lst
Data Bound
ComboBox
dbc Menu mnu
Data Bound Grid dbg OLE Container ole
Data Bound ListBox dbl Option Button opt
Directory ListBox dir Picture Box pic
Drive ListBox drv Shape shp
File ListBox fil TextBox txt
Form frm Timer tmr
b. Thuc tính (property)
Mi đối tưng có mt s thuc tính dùng mô t đối tượng như v trí, kích thước, trng
thái... Các thuc tính ca đối tượng trình bày trong ca s thuc tính.
c. Phương thc (method)
các hành vi ca mi đối tượng như di chuyn (move), phóng ln ca s
(maximize), thu nh ca s (minimize)...
Giáo trình Visual Basic 6.0
18
d. S kin (Event)
các tác động lên đối tượng, mi đối tượng s phn ng li theo cách ca tùy
theo biến c tác động vào. Người lp trình s định nghĩa các lnh để chương trình đáp
ng li các biến c tác động lên các đối tượng
Khi người lp trình to ra mt đối tưng, cn:
Đặt tên (điu chnh thuc tính Name)
Qui định thuc tính (trong ca s thuc tính)
Định nghĩa các hot động ca đối tượng tùy theo biến c tác động vào (chn
loi biến c trong code view window)
3.
Truy xut đối tượng
Truy xut đối tượng bao gm:
Đọc hoc đặt giá tr cho mt thuc tính
Gi mt phương thc
Để truy xut mt đối tượng, s dng cách viết
<Tên đi tượng>.<tên property hoc method>
Ví d:
adoRS.MoveNext
CmdPrint.Enabled = True
4.
Các thuc tính chung
- Left, Top: Ta độ góc trên bên trái.
- Height, Weight: Chiu cao, độ rng đối tượng.
- ForeColor, BackColor: Màu ch, màu nn đối tượng. th chn màu theo
b màu chun ca windows hoc chn màu tùy ý trên các th tương ng ti
thuc tính này trong ca s thuc tính (Hình 2.1).
Hình 2.1: Các th chn màu
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
1
9
Bng sau trình bày mt s hng khai báo giá tr màu h thng
Hng Giá tr (Hex) Ý nghĩa
vbActiveBorder &H8000000A Màu vin ca s hot động
vbActiveTitleBar &H80000002 Màu thanh tiêu đề ca s hot động
vbActiveTitleBarText &H80000009 Màu ch tiêu đề ca s hot động
vbApplicationWorkspace &H8000000C Màu nn ca s ng dng giao din đa tài
liu (MDI)
vbButtonFace &H8000000F Màu nút lnh
vbButtonShadow &H80000010 Màu bóng vin nút lnh
vbButtonText &H80000012 Màu ch trên nút
vbDesktop &H80000001 Màu desktop
vbGrayText &H80000011 Màu ch trên đối tượng không hot động
vbHighlight &H8000000D Màu nn phn được chn
vbHighlightText &H8000000E Màu ch phn đưc chn
vbInactiveBorder &H8000000B Màu vin ca s không hot đng
vbInactiveCaptionText &H80000013 Màu ch tiêu đề ca s không hot động
vbInactiveTitleBar &H80000003 Màu thanh tiêu đề ca s không hot động
vbInactiveTitleBarText &H80000013 Màu ch tiêu đề ca s không hot động
vbInfoBackground &H80000018 Màu nn li nhc (ToolTips)
vbInfoText &H80000017 Màu ch li nhc
vbMenuBar &H80000004 Màu nn menu
vbMenuText &H80000007 Màu ch menu
vbScrollBars &H80000000 Màu thanh cun
vbWindowBackground &H80000005 Màu nn ca s
vbWindowFrame &H80000006 u khung ca s
vbWindowText &H80000008 u ch trong ca s
Enabled: Thuc tính cho phép đối tưng hot động (True, False).
Font: Thuc tính chn Font ch.
Visible: Thuc tính cho phép xut hin đối tượng (True, False).
Index: Ch s mng (mng đối tưng).
ToolTipText: Chui li nhc khi tr chut trên đối tượng.
5.
c s kin chung
S kin
Xy ra khi
Click
Người dùng click trên đối tượng
DblClick
Người dùng nhp đúp trên đối tượng
DragDrop
Người dùng kéo nh mt đối tưng
DragOver
Người dùng kéo mt đối tượng qua mt đối tượng khác
Gotfocus
Đối tượng nhn focus
Giáo trình Visual Basic 6.0
20
KeyDown
Người dùng nhn mt phím trong khi đối tưng đang nhn focus
KeyPress
Người dùng nhn nh mt phím trong khi đối tưng đang nhn
focus
KeyUp
Người dùng nh phím trong khi đối tượng đang nhn focus
LostFocus
Đối tượng không nhn focus na
MouseDown
Người dùng bm mt phím bt k trên mouse trong khi mouse
pointer đang v trí đối tượng
MouseMove
Người dùng di chuyn mouse trên đối tượng
MouseUp
Người dùng nh phím mouse trong khi mouse pointer đang v
trí
đối tượng
II.
ĐỐI TƯỢNG FORM
1.
Thuc tính
Thuc tính
Ý nghĩa
Caption
Đặt tiêu đề cho form. Giá tr mc định là tên form
BorderStyle
Quy định kiu khung cho form
Appearance
Qui định cách th hin form (Flat/ 3D)
ControlBox
hoc không có Control Menu Box (True/False)
MaxButton
Làm m nút phóng ln (True/False)
MinButton
Làm m nút thu nh (True/False)
Icon
Qui định Icon đại din cho form
Picture
Đặt hình làm nn cho form
Moveable
Di chuyn/ Không di chuyn đưc (True/False)
ShownInTaskbar
t đại din chương trình trên taskbar (True/False)
WindowState
Trng thái form (Normal/Minimized/Maximized)
2.
Phuơng thc
Show
Xut hin form
Hide Che du form
Ví d:
frmMain.Show ‘ Làm xut hin form
Hoc
FrmMain.Hide ‘ Che du form
Lưu ý:
Phương thc Show np form vào b nh làm xut hin trên n hình. Nếu
form đã đưc np vào trưc đó thì ch làm xut hin form trên .
Phương thc Hide làm form không xut hin trên màn hình, nó vn còn được np vào
b nh, để gii phóng form khi b nh, s dng phương thc Unload <Đối tượng>
3.
X lý s kin (Handling Event)
Sau đây là mt s s kin quan trng đối vi mt form
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
2
1
S kin
Xy ra khi
Load
Form được np vào b nh
Activate
Form xut hin ln đầu tiên hoc khi chuyn tr li form t mt form khác
Deactivate
Người dùng chuyn sang form khác hoc form thc hin phương thc hide
Unload
Form được gii phóng khi b nh
Initialize
Form đưc to ra ban đầu trong b nh
Ví d 1 - Kim tra các s kin Initialize, Load, Unload:
1. Khi động Visual Basic/Standard EXE
2. Nhp đúp vào form1 để m ca s lnh (code window), viết lnh cho s kin
Load như sau:
Private Sub Form_Load()
MsgBox "Form Load Event"
End Sub
3. Lp li bước 3 để định nghĩa mã lnh cho các s kin Initialize và Unload
Private Sub Form_Initialize()
MsgBox "Form Initialization Event"
End Sub
Private Sub Form_Unload(Cancel As Integer)
MsgBox "Form Unload Event"
End Sub
4. Bm F5 để chy chương trình, để ý c Message Box s xut hin theo th t do
trình t Initialize Load Unload
Hình 2.2: Kim tra các s kin Load, Unload, Initialize
Giáo trình Visual Basic 6.0
22
Ví d 2 - Kim tra các phương thc Show, Hide, Unload
Chương trình khi chy s xut hin 1 form như hình. Bm nút “Show second form”,
form th 2 s xut hin. Bm nút “Close this form” , form th 2 s đóng li.
Các bước thiết kế như sau:
1. New/Standard EXE
2. Đặt thuc tính Caption ca Form 1 thành Vi du 2 - Form 1
3. Nhp đúp CommandButton trên ToolBox, Button xut hin trên Form1. Điu
chnh thuc tính Caption thành “Show second form”
4. Bm nút Add form/form để thêm form2.
5. Đặt thuc tính Caption ca Form 2 thành Vi du 2 - Form 2
6. Nhp đúp CommandButton trên ToolBox, Button xut hin trên Form2. Điu
chnh thuc tính Caption thành “Close this form”
7. Nhp đúp Button trên form 2 , định nghĩa mã lnh như sau:
Private Sub Command1_Click()
Unload Me
End Sub
8. Nhp đúp Button trên form 1 , định nghĩa mã lnh như sau:
Private Sub Command1_Click()
Form2.Show
End Sub
Bm F5 chy chương trình để kim tra kết qa
III.
LABEL
Trình bày mt ni dung trên form
1.
Thuc tính
Thuc tính
Ý nghĩa
Caption
Qui định ni dung trình bày
Alignment
Quy định kiu canh l trong Label (0-Left 1- Right 2- Center)
BackStyle
Kiu nn Label (0 - Transparent 1 - Opaque)
AutoSize
T động co giãn kích thưc Label để th hin đầy đủ ni dung
(True/False)
Wordwrap
T động cun ch (True/False)
Và các thuc nh chung
2.
X lý s kin
Gm các s kin chung
IV.
TEXTBOX
Cho phép người dùng nhp mt ni dung
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
2
3
1.
Thuc tính
Thuc tính
Ý nghĩa
Text
Cha ni dung nhp vào
Alignment
Quy định kiu canh l trong TextBox (0-Left 1- Right 2-
Center)
Locked
Cho phép thay đổi ni dung textbox (True/False)
MaxLength
Qui định chiu dài ti đa cho phép nhp
Multiline
Cho phép nhp ni dung nhiu dòng (True/False)
Và các thuc nh chung
2.
X lý s kin
Gm các s kin chung
V.
COMMANDBUTTON
Đối tượng được s dng để ra lnh
1.
Thuc tính
Caption
Ni dung th hin trên nút bm
Và các thuc tính chung.
2.
X lý s kin
Gm các s kin chung
VI.
FOCUS VÀ TH T TAB
1.
Focus
Trên màn nh Windows, mi mt đối tượng điu khin khi được chn để hot động
(Active) s nhn focus. Khi mt ca s hoc form đang nhn focus thanh tiêu đề
(Title Bar) s màu đậm. Khi mt đối tượng điu khin trên form nhn focus s
đưng vin bao quanh đối tượng hoc cursor xut hin bên trong đối tưng
(Textbox). Ngưi dùng th thay đổi focus ca đối tượng trên form bng cách s
dng phím Tab hoc Shift+Tab. Đối tượng nhn focus s phn ng vi các s kin
bm phím
Hình 2.3: Đối tượng nhn Focus
t chn đang
nhn Focus
Nút bm đang
nhn Focus
Giáo trình Visual Basic 6.0
24
2.
Th t Tab (Tab Order)
Người dùng th chn đối tượng nhn focus trên form bng cách bm phím Tab
hoc Shift+Tab theo th t các đối tượng được đặt lên form. th qui định th t
y trong lúc thiết giao din chương trình bng cách điu chnh thuc tính
TabIndex. Đối tượng nhn focus đầu tiên trên form s TabIndex = 0. Để chn đối
tượng nhn focus trên form bng chương trình, s dng phương thc SetFocus.
3.
Phím nóng (HotKey)
t hp phím kết hp gia phím Alt mt phím khác. Hotkey đưc s dng để
chn nhanh mt đối tượng trên form bng bàn phím mà không cn bm phím TAB để
chn đối tượng theo th t Tab .
Hotkey được định nghĩa trên thuc tính Caption ca đối tượng bng cách nhp t
“&” phía trước ký t mun định nghĩa Hotkey
Ví d:
Mun Đối tưng
Hotkey
Giá tr HotKey Giá tr ca thuc tính
Caption
Alt+C &Close
Alt+S In &Sync
Alt+S &Nam
Riêng TextBox thì Hotkey đưc định nghĩa trên thuc tính Caption ca Label đi kèm
vi TextBox. Label được gi đi kèm vi TextBox nếu TabIndex ca nó có giá tr kế
trước (nh hơn 1 đơn v) giá tr TabIndex ca TextBox
4.
Ví d
Phn sau trình bày ví d v các định nghĩa Hotkey th t nhn focus cho chương
trình d đã trình bày chương 1
M li project vd1.prj đã làm chương 1, điu chnh li thuc nh ca các đối tưng
theo như bng sau:
Form1
Thuc tính (Property) Giá tr (Value)
Name FrmTinh
Caption Cong hai so
Height 2500
Width 2800
Label1
Thuc tính (Property) Giá tr (Value)
Name Label1
Caption Nhap so thu &1
TabIndex 0
TextBox1
Thuc tính (Property) Giá tr (Value)
Name txtSo1
Height 315
Width 735
TabIndex 1
Label2
Thuc tính (Property) Giá tr (Value)
Name Label2
Caption Nhap so thu &2
TabIndex 2
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
2
5
TextBox2
Thuc tính (Property) Giá tr (Value)
Name txtSo2
Height 315
Width 735
TabIndex 3
CommandButton
Thuc tính (Property) Giá tr (Value)
Name CmdTinh
Caption &Tinh
Height 330
Width 1335
TabIndex 4
TextBox3
Thuc tính (Property) Giá tr (Value)
Name txtTong
Locked True
Height 315
Width 735
TabIndex 5
Bm F5 chy chương trình. Để ý th t nhn focus TextBox1, TextBox2
CommandButton. Các Hotkey Alt+1, Alt+2, Alt+T cũng có tác dng tương t.
Mun con tr t động chuyn sang TextBox dưi để nhp s th hai sau khi nhp s
thư nht bm Enter, viết lnh cho s kin bm phím trên có TextBox như sau:thêm
kh năng chuyn focus bng cách bm Enter sau khi nhp s ti các Textbox, th
định nghĩa thêm c th tc x lý s kin bm phím Enter cho các Textbox1 và 2 như
sau:
Private Sub txtSo1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 then txtSo2.Setfocus
End Sub
Private Sub txtSo2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 then CmdTinh.Setfocus
End Sub
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
27
Chương 3
Kiu d liu – Hng – Biến
I.
BIN (Variable)
1.
Định nghĩa
Biến ô nh cha d liu, giá tr ca biến có th thay đổi trong chương trình.
2.
Khai báo
Dng
Dim <Tên> As <Kiu> [,<Tên> As <Kiu>]
Hoc
Dim <Tên>
Trường hp đầu, kiu biến được khai báo ràng, trưng hp sau kiu ca biến s
đưc xác định khi có lnh gán giá tr cho biến.
Ví d:
Dim X As Integer
Dim Ht As String
3.
Qui tc đặt tên biến
Có chiu dài ti đa 255
Không đưc bt đầu bng s
Không s dng khong trng
Không dùng các ký hiu toán t
Không trùng t khoá
Không phân bit ch thường và ch in
Ví d
Các biến đặt tên đúng
MyNum&
i%
iNumOne
strInputValue
Các biến đặt tên sai
1Week
Ho ten
Giai.thua
4.
Truy xut biến
Biến được truy xut bng cách viết tên.
Ví d
Dim X As Integer
Giáo trình Visual Basic 6.0
28
Dim Y As Integer
X = 5
Y = 7
X = Y+2 ‘ Tr ca biến X được gán bng tr ca biến Y cng thêm 2
X = X+1 ‘ Tăng giá tr ca biến X
Lưu ý
Biến s dng có th không cn khai báo. Điu này có th gây ra li , ví d:
Dim Songay
Dim X
Songay = 1
X = 5
SoNgau = X+1 ‘ Visual Basic xem Songau là biến mi
Để buc Visual Basic không t động to biến khi chưa khai o th thc hin 1
trong 2 cách sau:
Viết phát biu Option Explicit trong phn General ca ca s lnh.
Qui định bng tu chn Require variable Declaration trong
Tools/Options/Editor
Giá tr ban đầu ca các loi biến sau khi khai báo như sau:
Kiu d liu Giá tr đầu
Integer 0
Long
0
Single
0
Double
0
String
"" (blank)
Boolean
False
Variant
EMPTY
Date
0
Currency 0
5.
Phm vi s dng biến
Mt biến đưc khai báo ch tn ti trong phm vi khai báo, ngoài phm vi đó s
dng li Visual Basic s xem như biến mi.
Biến khai báo trong chương trình con ch ý nghĩa trong chương trình con
đó. Trong ví d sau, các biến X, Y, Z ch có ý nghĩa trong th tc x lý s kin
cmdTinh.
Private sub cmdTinh()
Dim X As Integer
Dim Y As Integer
Dim Z As Integer
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
2
9
X = CInt(txtSo1.Text)
Y = CInt(txtSo2.Text)
TxtTong.Text = X+Y
End sub
Biến khai báo vi t khoá Dim trong phn General ca form ý nghĩa tòan
cc trong form, tt c các chương trình con định nghĩa trong form đều th
s dng biến này.
Biến khai báo vi t khoá Public trong phn General ca form ý nghĩa
trong tt c các chương trình con định nghĩa trong form đó th s dng
trong form khác bng cách viết <Tên form>.<Tên biến>
Biến khai báo vi t khoá Public trong Module ý nghĩa trong toàn b
chương trình.
Dim a As Integer
Dimb As Integer
Form1
Form2
Biến a ch ý nghĩa
trong form1
Biến b ch ý nghĩa
trong form2
Private sub XXX()
m
End sub
Private sub xxx()
m
End sub
Form1
Form2
Biến m th s dng
trong toàn b chương
trình
Public m As Integer
Module
Publica As Integer
Dim b As Integer
Private sub xxx()
Form1.a
Form1
Form2
Biến a th s dng
trong form khác
Biến b ch ý nghĩa
trong form2
Giáo trình Visual Basic 6.0
30
6. Biến tĩnh
biến được khai báo vi t khoá static trong 1 chương trình con. Giá tr ca biến
tĩnh được s dng li cho các ln gi sau ca chương trình con
Ví d: Thông báo s ln bm nút, biến iNumOfClicks được khai báo tĩnh.
Private Sub MyButton_Click()
Static iNumOfClicks as Integer
iNumOfClicks = iNumOfClicks + 1
MsgBox "Number of Clicks: " & CStr(iNumOfClicks)
End Sub
II.
KIU D LIU
Kiu
Kích thước Phm vi cha
Byte
1 byte 0 .. 255
Integer
2 bytes -32,768 .. 32,767
Long
4 bytes Khong +/- 2.1E9
Single 4 bytes -3.402823E38 .. -1.401298E-45 (giá tr âm)
1.401298E-45 .. 3.402823E38 (Giá tr dương)
Double
8 bytes -1.79769313486232E308..-4.94065645841247E-324 (giá tr
âm)
4.94065645841247E-324 ..1.79769313486232E308 (giá tr
dương)
Currency
8 bytes 922,337,203,685,477.5808 .. 922,337,203,685,477.5807
String
1 byte cho mi
ký t
65,000 đối vi chui có kích thưc c định
2 t đối vi chui động
Boolean
2 bytes True , False
Date
8 bytes Jan 1st 100 .. December 31st 9999
Variant
16 bytes + 1
byte cho mi
ký t
III.
HNG
Hng đại lưng giá tr không thay đổi trong chương trình. Hng được khai báo
trong phn General. Qui tc đặt tên hng cũng như biến. Hng thường đưc khai báo
bng ký t ch in hoa. Khai báo hng đưc viết như sau:
Const <Tên> [ As <Kiu> ] = < Giá tr>
Ví d:
Const METER_TO_FEET = 3.3
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
3
1
IV.
TOÁN T
Toán t Ý nghĩa
^ Mũ
- Đảo du
*, / Nhân chia
\ Chia nguyên
Mod Ly phn dư phép chia s
nguyên
+, - Cng, tr
& Ghép chui
=, <>, <, >, <=,
>=
So sánh
Not, And, Or Lun lý
V.
MT S HÀM CHUN
1.
Hàm đại s
Hàm Ý nghĩa Ví d
Abs(n)
x
Abs(-5) = 5
Sqr(x)
Căn bc 2 Sqr(4)=2
Exp(x)
ex Exp(1)= 2.718282
Log(x)
Logx Tính
logn(x)=Log(x)/log(n)
Int(x)
S nguyên x
Int(8.9) = 8, Int(-8.9)= -9
Fix(x)
S nguyên x
Fix(8.4) = 8, Fix(-8.9)= -8
Round(x[,n])
Làm tròn đến n ch s phn thp
phân
Round(4.5)=6,
Round(34.673,2)=34.67
Sin(x)
sinx Sin(pi/2)=1
Cos(x)
cosx Cos(pi/3)=0.5
Tan(x)
tgx
Atn(x) arctgx
2.
Hàm thi gian
Hàm Ý nghĩa Ví d
Date
Ngày h thng Dim dt As Date
Dt = Date
Day(d)
Ngày trong tháng (1-31) Day(#12/2/00#)=2
Month(d)
Tháng (1-12) Month(#12/2/00#)=12
Year(d) Năm Year((#12/2/00#)=2000
Weekday(d)
Ngày trong tun (1-Ch nht, 2-Th
hai, 7-Th by)
Weekday(Date)
Giáo trình Visual Basic 6.0
32
3.
Hàm chuyn đổi
Hàm Ý nghĩa Ví d
Asc(n)
Mã Ascii ca ký t n Asc(‘a’)=97, asc(‘A’)=65
Chr(n)
Ký t có mã n Chr(65)=’A’
Ucase(s)
Đổi chui ch thường thành ch in Ucase(“abcd”)=”ABCD
Val(s)
Đổi chui thành s Val(“1234”)=1234
Str(n)
Đổi s thành chui Str(12.45)=” 12.45”
Str(-4.56) = “-4.56
4.
Hàm kim tra kiu d liu
Hàm Ý nghĩa
IsNumeric(n)
Kim tra n có phi là s hp l
IsDate(n)
Kim tra n có phi là giá tr ngày hp l
VI.
HP THÔNG BÁO (MESSAGE BOX)
mt lp ca s windows đã định nghĩa sn. Hp thông báo đưc để trình bày các
thông đip nhc nh người dùng t chuơng trình hoc yêu cu người dùng c nhn
mt điu gì đó. Hp thông báo thc cht là mt form vi các thành phn sau:
Ni dung thông báo
Icon bên trái dùng mô t tính cht loi thông báo
Nút bm để tr li, gm các loi OK, Cancel, Yes, No, Abort, Retry, Ignore
Dng hàm
MsgBox(<Thông báo>,<Các nút>,<Tiêu đề>)
Trong đó:
<Thông báo>
Chui t thông báo. Thông báo chiu dài ti đa 1024 t. Mun thông o
hin trên nhiu dòng, s dng ký t chr(13)
<Các nút>
Qui định loi nút bm và icon đưc s dng trong hp thông báo, gm các hng sau:
Hng Giá
tr
Ý nghĩa
vbOKOnly 0 Ch có nút OK
vbOKCancel 1 Nút OK và Cancel
vbAbortRetryIgnore 2 Nút Abort, Retry và Ignore
vbYesNoCancel 3 Nút Yes, No, Cancel
vbYesNo 4 Nút Yes, No
Button
vbRetryCancel 5 Nút Retry và Cancel
vbCritical 16 Icon
Icon
vbQuestion 32 Icon
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
3
3
vbExclamation 48 Icon
vbInformation 64 Icon
vbDefaultButton1 0 Nút đầu tiên mc định có focus
vbDefaultButton2 256 Nút th hai mc định có focus
Focus
vbDefaultButton3 512 Nút th ba mc định focus
vbApplicationModal 0 Người dùng phi tr li ri mi
th tiếp tc s dng chương trình,
th chuyn sang các chương
trình khác
Modal
vbSystemModal 4096 Ngưi dùng phi tr li ri mi có
th tiếp tc s dng chương trình,
không th chuyn sang các
chương trình khác
Tham s <các button> đưc ly giá tr bng tng các hng trong mi nhóm trên.
Ví d
Giá tr vbYesNo+vbQuestion+vbDefaultButton1 làm cho hp thông o 2 nút
Yes-No, Icon hin th là Question, nút đầu tiên có focus.
Nếu b qua tham s này, hp thông báo ch có nút OK
<Tiêu đề>
Qui định tiêu đề hp thông o, nếu không tham s này, tiêu đề s là tên ca
chương trình.
Khi mun s dng MsgBox vi mc đích thông o, thường ch cn ghi tham s
th nht. Ví d:
If Not IsNumeric(Text1.Text) then
MsgBox “D liu nhp không hp l
End if
Khi chương trình mun ngưi s dng xác nhn mt điu đó thì phi s dng
MsgBox dưi dng hàm. Hàm MsgBox khi đó s tr v gtr tùy theo t
ngưi s dng bm, các giá tr tr v có th là:
Hng Giá tr Nút đã bm
vbOK 1 OK
vbCancel 2 Cancel
vbAbort 3 Abort
vbRetry 4 Retry
vbIgnore 5 Ignore
VbYes 6 Yes
VbNo 7 No
Ví d:
Ans = MsgBox(“Do you want to save ?”, _
vbYesNoCancel + vbApplicationModal, “Warning”)
Giáo trình Visual Basic 6.0
34
if Ans = vbYes then
SaveDocument
elseif Ans = vbNo then
Quit
else
Continue
End if
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
3
5
Chương 4
Các cu trúc điu khin
I.
LNH ĐIU KIN IF
Dng 1:
If <Điu kin> then <lnh>
Ch có mt <Lnh> viết sau then
Ví d:
Max = a
If Max < b then max = b
Dng 2:
If <Điu kin> then
<lnh>
end if
Dng này đưc s dng thay cho dng 1 khi có nhiu lnh sau then
Dng 3:
If <Điu kin 1> then
<lnh 1>
elseif <Điu kin 2 > then
<lnh 2>
...
elseif <Điu kin n > then
<lnh n>
else
<lnh n+1>
end if
Ví d:
If a > b then
Max = a
Else
Max = b
End if
II.
LNH CHN LA CASE
Chn la lnh thc hin theo giá tr
Select Case <Biu thc>
...
Case <Danh sách tr n>
<lnh n>
...
Giáo trình Visual Basic 6.0
36
Case else
<lnh n+1>
End select
Ví d
Select Case Round(Diem)
Case 0 to 4
Label1.Caption = “Kem”
Case 5,6
Label1.Caption =Trung binh”
Case 7,8
Label1.Caption = “Khá”
Case 9,10
Label1.Caption = “Gii
Case else
Label1.Caption =Không hp l
End select
III.
LNH LP FOR .. NEXT
Dng
For <Biến> = <Tr đầu> to <Tr cui> [ Step <Bước tăng> ]
<lnh>
Next <Biến>
<lnh> được thc hin t <tr đầu> đến <tr cui>, giá tr ca <biến> đưc thay đổi
theo <bưc tăng>
Ví d
Tính tng các s nguyên t 1 đến 10
S = 0
For i = 1 to 10
s = s + i
Next i
Tính tng các s chn
For i = 0 to 10 step 2
s = s + i
Next i
To ra mt chui có 10 ch a
strS = “”
For i = 1 to 10
strS = strS & “a”
Next i
Ví d:Vòng lp sau to ra 10 chui vi cùng ni dung
Dim Words, Chars, MyString
For Words = 10 To 1 Step -1
For Chars = 0 To 9
MyString = MyString & Chars
Next Chars
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
37
MyString = MyString & " "
Next Words
IV.
LNH LP DO .. LOOP
Dng 1
Do while <Điu kin>
<Lnh>
Loop
Các lnh trong vòng lp bt đầu được thc hin nếu điu kin đúng lp li cho đến
khi nào điu kin sai
Ví d
Dim I As Integer
Dim strS As String
i = 1
Do while i <= 10
StrS = strS & “a”
i = i +1
Loop
Dng 2
Do
<Lnh>
Loop Until <điu kin>
Các lnh trong vòng lp được thc hin cho đến khi nào điu kin đúng
Ví d
Dim I As Integer
Dim strS As String
i = 1
Do
StrS = strS & “a
i = i +1
Loop Until I > 10
Ví d:
Đếm s ch s ca 1 s nguyên dương
Dim Dem, So As Integer
So = Text1.Text
Dem = 0
Do
So = So \ 10
Dem = Dem+1
Loop Until So = 0
Ví d:
Tìm ước s chung ln nht ca 2 s
nguyên dương x,y
Dim x,y As Integer
x = Text1.Text
y = Text2.Text
Do while x<>y
If x>y then
x = x-y
else
Giáo trình Visual Basic 6.0
38
y = y-x
end if
Loop
Ví d: Nhp tui t bàn phím, giá tr tui nhp phi trong phm vi t 10 đến 99
Dim strAge As String
Dim intAge As Integer
Dim intPress As Integer
Do
strAge = InputBox("How old are you?", "Age Ask")
‘ Check for the Cancel command button
If (strAge = "") Then
End ` Terminate program
End If
intAge = Val(strAge)
If ((intAge < 10) Or (intAge > 99)) Then
‘ The user's age is out of range
intPress = MsgBox("Your age must be between 10 and 99", vbExclamation,
"Error!")
End If
Loop While ((intAge < 10) Or (intAge > 99))
V.
CHƯƠNG TRÌNH CON
Khi viết mt chương trình ln, để tránh viết li nhiu ln các đon chương trình ging
nhau, người ta định nghĩa các đon chương trình ging nhau, được dùng nhiu ln
trong chương trình thành các module chương trình , n được gi chương trình
con. Các chương trình con này s được định nghĩa mt nơi nào đó trong chương
trình bng 1 tên, mi khi có yêu cu s dng, nó s đưc gi bng tên đã định nghĩa.
Ví d:
Private Sub ChangeSignal()
If imgGreen.Visible = True Then
imgGreen.Visible = False
imgYellow.Visible = True
ElseIf imgYellow.Visible = True Then
imgYellow.Visible = False
imgRed.Visible = True
Else
imgRed.Visible = False
imgGreen.Visible = True
End If
End Sub
Private Sub cmdChange_Click()
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
3
9
ChangeSignal ' Gi th tc ChangeSignal.
End Sub
Private Sub imgGreen_Click()
ChangeSignal ' Gi th tc ChangeSignal
End Sub
Private Sub imgRed_Click()
ChangeSignal ' Gi th tc ChangeSignal
End Sub
Private Sub imgYellow_Click()
ChangeSignal ' Gi th tc ChangeSignal
End Sub
2 loi chương trình con là th tc (Sub) và hàm (Function)
1.
Sub
Loi chương trình con thc hin mt tác v nào đó khi được gi. 2 loi th tc là
th tc tng quát (General procedure) và th tc x lý s kin (Event procedure).
Th tc tng quát đưc kích hot bng lnh gi trong chương trình.
Th tc x s kin được kích hot khi mt s kin tác động n form hoc
đối tưng điu khin trên form. Th tc x lý s kin thường tên là <tên đối
tượng>_<tên s kin>. Ví d Form_Load hoc Commad1_Click...
Khai báo th tc:
Private/Public Sub <Tên th tc>[(<Danh sách tham s>)]
<Lnh>
End sub
Th tc đưc khai báo vi t khoá Private ch được s dng trong form cha
(Form level).
Th tc đưc khai báo vi t khoá Public có th s dng trong các form khác.
2.
Hàm
Loi chương trình con luôn luôn tr v giá tr thông qua tên hàm
Khai báo hàm:
Private/Public Function <Tên th tc>[(<Danh ch tham s>)] [As
<Kiu>]
<Lnh>
End sub
Ví d: Định nghĩa hàm tính chiu dài cnh huyn ca tam giác vuông
Function Hypotenuse (A As Integer, B As Integer) As double
Hypotenuse = Sqr(A ^ 2 + B ^ 2)
End Function
Gi hàm
Giáo trình Visual Basic 6.0
40
Dim x As double
x = Hypotenuse(Text1.Text, Text2.Text)
TxtTinh.text = str(x,2)
Ví d:
Tính ngày vit nam: Hàm Weekday cho giá tr s th t ch ngày trong tun. Đnh
nghĩa hàm vnDay cho giá tr là chui ngày Vit nam
Public Function vnDay(nDay As Date) As String
Select Case Weekday(nDay)
Case 1
VnDay = “Ch nht”
Case 2
VnDay = “Th hai”
Case 3
VnDay = “Th ba”
Case 4
VnDay = “Th tư
Case 5
VnDay = “Th năm”
Case 6
VnDay = “Th sáu”
Case 7
VnDay = “Th by”
End select
End function
Private Sub Command1_Click()
Text1.text = “Hôm nay là “ & vnDay(Date)
End sub
3.
Khai báo
Chương trình con khai báo vi t khoá Private ch có ý nghĩa trong phm vi
khai báo
Chương trình con khai báo vi t khoá Public trong form có th s dng trong
form đó và trong các form khác
Chương trình con khai báo vi t khoá Public trong module th s dng
trong toàn b chương trình
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
4
1
Chương 5
Mng – Chui Collection
I.
MNG
1.
Định nghĩa:
Mng tp hp các phn t cùng kiu d liu được đánh th t. S th t ca mi
phn t được gi là ch s.
2.
Khai báo:
Dim/Public/Static <Tên>(<S phn t>) As <Kiu>
Ví d:
Dim A(10) As Integer ‘ Mng 10 s nguyên
Dim Hoten(50) As String ‘ Mng 50 chui
Ch s đầu tiên mc định là 0. 2 cách để khai báo mt mng bt đầu t ch s tu
ý:
S dng phát biu Option Base trong phn General
Ví d:
Option Base 1 ‘Khai báo mng bt đầu t 1
Khai báo phm vi ch s:
Dim/Public/Static <Tên>(<Ch s đầu> to <Ch s cui> ) As <Kiu>
Ví d:
Dim A(1 to 10) As Integer
Mng được truy xut bng cách viết <tên>(ch s)
Ví d: Đổi năm dương lch sang năm âm lch:
Dim Can(10) As String
Dim Chi(12) As String
Can(0)=”Canh
Can(1)=”Tân
Can(2)=”Nhâm”
Can(3)=”Quí”
Can(4)=”Giáp”
Can(5)=”t”
Can(6)=”nh”
Can(7)=”Đinh”
Can(8)=”Mu”
Can(9)=”K
Chi(0)=”Thân”
Chi(1)=”Du”
Giáo trình Visual Basic 6.0
42
Chi(2)=”Tut”
Chi(3)=”Hi”
Chi(4)=”Tý”
Chi(5)=”Su”
Chi(6)=”Dn”
Chi(7)=”Mão”
Chi(8)=”Thìn”
Chi(9)=”T
Chi(10)=”Ng
Chi(11)=”Mùi
NDL = CInt(txtNDL.Text)
LblNAL.Caption = Can(NDL mod 10) & “ “ & Chi(NDL mod 12)
Mng trong ví d trên có th va khai báo va gán giá tr ban đu như sau:
Can = Array(“Giáp”,”t”,”Bính”, Đinh”, “Mu”, “K”, “Canh”, “Tân”,
“Nm”, “Quí”)
Chi=Array(“Thân”, ”Du”, ”Tut”, ”Hi”, ”Tý”, ”Su”, ”Dn”, ”Mão”, ”Thìn”,
”T”, ”Ng”,”Mùi”)
3.
Mng đối tượng điu khin
Vi các đối tượng điu khin cùng loi, th s dng mng để không phi đặt q
nhiu tên và định nghĩa nhiu th tc x lý s kin
a. Định nghĩa mng đối tượng điu khin
- Đặt 1 đối tượng trong nhóm mun định nghĩa mng lên form, đặt tên (s dùng
làm n mng) qui định giá tr các thuc nh cn thiết (thuc tính v kích
thước màu sc ca các phn t ca mng thường ging nhau, tr thuc tính
caption),
- Right-Click trên đối tưng, chn lnh Copy,
- Right-Click trên form, chn lnh Paste. VB s yêu cu xác nhn mun định
nghĩa mng nhn thy đối tượng mi đưc sao chép cùng tên vi đối
tượng trước đó trên form,
Hình 5.1: Hp thông báo xác nhn có định nghĩa mng đối tượng
- Tr li Yes để định nghĩa mng lp li thao tác Paste cho các phn t kế
tiếp. Để ý thuc tính Index ca các phn t mng th t tăng dn theo
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
4
3
đúng th t đưc sao chép trên form. Đó cũng chính ch s ca đối tượng
trong mng.
b.Viết lnh cho mng đối tượng điu khin
- Nhp đúp lên mt trong các đối tượng thuc mng. Th tc x s kin
dng:
Private sub <n>_<S kin>(Index As Integer)
End sub
Thay
Private sub <n>_<S kin>()
End sub
- Th tc x s kin đưc viết chung cho nhóm đối tưng định nghĩa
mng, tham s Index được dùng để phân bit phn t nhn s kin đó.
c. Duyt mng đối tượng điu khin
Để duyt mng đối tượng điu khin trên form, th s dng vòng lp như d
sau:
For i = txtFields.LBound To txtFields.UBound
txtFields(i).Text = ""
Next
Tuy nhiên nếu các phn t mng được to ra không liên tiếp do có mt đối tượng
thuc mng đã b xóa thì h thng s thông o li. vy cách tt hơn s dng
lnh lp For Each như sau:
Dim txt As TextBox
For Each txt In txtFields
txt.Text = ""
Next
4.
Ví d
Thiết kế form chn màu (FillColor), mu (FillStyle) loi hình v ca đối
tượng Shape. Form thiết kế có dng sau:
Bước 1 Thiết kế giao din (Hình 5.2)
- Định nghĩa mng các OptionButton cho nhóm Shape vi tên opShape
- Định nghĩa mng các OptionButton cho nhóm FillStyle vi tên opFillStyle
- Định nghĩa mng các OptionButton cho nhóm Color vi tên opColor.
Giáo trình Visual Basic 6.0
44
Hình 5.2: Giao din chưong trình ví d
Bước 2 Viết lnh
- Double-Click OptionButton trong nhóm Shape, viết lnh :
Private Sub opShape_Click(Index As Integer)
Shape1.Shape = Index
End Sub
- Double-Click OptionButton trong nhóm FillStyle, viết lnh :
Private Sub opFillStyle_Click(Index As Integer)
Shape1.FillStyle = Index
End Sub
- Double-Click OptionButton trong nhóm Color, viết lnh :
Private Sub opColor_Click(Index As Integer)
Select Case Index
Case 0
Shape1.FillColor = vbRed
Case 1
Shape1.FillColor = vbBlue
Case 2
Shape1.FillColor = vbMagenta
Case 3
Shape1.FillColor = vbYellow
End Select
End Sub
5.
Mng động mng tĩnh
a. Mng tĩnh
Là mng được khai báo vi t khóa Dim như đã trình bày các phn trên. Mng tĩnh
luôn được khai báo vi s phn t xác định trước để chương trình dch th dành
vùng nh phù hp.
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
4
5
b.Mng động
mng s phn t th thay đổi tùy ý trong lúc chy chương trình. Điu này
phù hp hơn vì trong thc tế người lp trình không th tiên liu trước s phn t thc
tế.
S dng mng động gm 2 bước:
- Khai báo hin din vi t khóa Dim nhưng s phn t để rng.
- To mng thc s khi cn thiết bng phát biu ReDim.
Ví d:
Dim Customers() As String
Sub Main()
ReDim Customers(1000) As String
End Sub
Mng động có th đưc to li nhiu ln khi cn thiết:
Sub Printeport()
ReDim Customers(100) As String
ReDim Customers(500) As String
End Sub
Tuy nhiên lnh cp phát mi s xóa rng ni dung (chui) hoc gán bng 0 (s) mi
phn t đã giá tr trưc đó. Để bào toàn giá tr các phn t, s dng phát biu
ReDim Preserve.
Ví d:
ReDim Preserve Customers(500) As String
Lnh cp phát động cũng th áp dng cho mng nhiu chiu, tuy nhiên ch th
làm thay đổi chiu cui cùng.
Ví d:
ReDim Cells(1 To 100, 10) As Integer
...
ReDim Preserve Cells(1 To 100, 20) As Integer ' Đúng
ReDim Preserve Cells(1 To 200, 20) As Integer ' Sai
Giáo trình Visual Basic 6.0
46
th hy mt mng bng lnh Erase. Đối vi mng động, Visual Basic gii phóng
vùng nh đã cp phát cho mng; đối vi mng tĩnh, mi phn t được gán giá tr rng
(chui) hoc có giá tr 0 (s).
c. Các hàm Lbound, Ubound
Hàm được dùng để xác định ch s thp nht và cao nht ca mt mng. Nếu mng có
nhiu chiu, phi s dng thêm tham s th hai khi s dng hàm. Ví d đối vi mng
Cells đã khai báo d trên, để ly ch s thp nht, cao nht ca mi chiu, th
thc hin như sau:
Print LBound(Cells, 1) ' In ch s thp nht ca chiu đầu tiên
Print LBound(Cells) ' Ging như trên
Print UBound(Cells, 2) ' In ch s cao nht ca chiu th hai
' Tính s phn t mng
Num = (UBound(Cells) - LBound(Cells) + 1) * _
(UBound(Cells, 2 )- LBound(Cells, 2) + 1)
6.
Mt s vn đề khác
a. Mng và biến variant
Visual Basic cho phép cha mng trong các biến variant ri truy xut các phn t
mng thông qua biến này.
Ví d:
ReDim Names(100) As String, var As Variant
‘Khi động giá tr cho mng Names
var = Names() ' Sao chép mng vào biến variant
Print var(1) ' Truy xut mng qua biến variant
Mt cách tương t, th truyn mt mng cho chương trình con vi tham s hình
thc khai báo variant ri truy xut c phn t mng trong chương trình con thông
qua tham s đó.
Ví d: Hàm tính tng các phn t mng
Function ArraySum(arr As Variant) As Variant
Dim i As Long, result As Variant
For i = LBound(arr) To UBound(arr)
result = result + arr(i)
Next
ArraySum = result
End Function
Cũng th áp dng cách trên để truyn mng 2 chiu thông qua tham s hình thc
kiu variant.
Ví d:
Private Sub Form_Load()
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
47
Dim Fact(4, 4) As Integer
abc Fact
End Sub
Private Sub abc(x As Variant)
For i = 0 To 4
For j = 0 To 4
s = s + x(i, j)
Next
Next
End Sub
Để xác định kiu ca mng khi truyn cho tham s variant, s dng hàm VarType để
xác định kiu như ví d sau:
If VarType(arr) = (vbArray + vbInteger) Then
' Mng s nguyên
ElseIf VarType(arr) = (vbArray + vbLong) Then
' Mng kiu long
End if
b. Gán mng và tr v giá tr kiu mng
Đim mi ca mng trong Visual Basic 6.0 so vi các phiên bn trước đó gán
mng và viết chương trình con tr v giá tr kiu mng.
Ví d: Gán mng
ReDim a(10, 10) As Integer
Dim b() As Integer
b() = a()
Ví d: Hàm tr v giá tr kiu mng
Function InitArray(first As Long, Last As Long) As Long()
ReDim result(first To Last) As Long
Dim i As Long
For i = first To Last
result(i) = i
Next
InitArray = result
End Function
c. Mng Byte
Trong Visual Basic, mng kiu byte tính cht đặc bit, đó th gán trc tiếp
chui cho mt mng byte. Khi đó, mng được gán được cp phát động để cha đủ các
t đưc gán. mi t trong chui ca Visual Basic 5.0 6.0 chiu dài 2
byte (unicode) nên s phn t mng được cp phát s gp đôi s ký t trong chui.
Giáo trình Visual Basic 6.0
48
Ví d:
Dim b() As Byte, Text As String
Text = "123"
b() = Text
For i = LBound(b) To UBound(b)
Debug.Print b(i) ‘Giá tr in ra s là 49 0 50 0 51 0
Next
II.
CHUI KÝ T
1.
Khai báo:
Dim <Biến> As String
Hoc
Dim <Biến> As String* Chiu dài
- Khai báo String: Khai báo chui động có chiu dài ti đa 2 t ký t.
- Khai báo String* Chiu dài: Khai báo chui có chiêu dài c định , chiu dài ti
đa 65535.
2.
Các hám x lý chui
Len(s): Ly chiu dài chui
Ví d: Len(“abcd”)=4
Ucase(s): Đổi chui ch thưng thành chui ch in
Ví d: Ucase(“abcd”)=”ABCD”
Lcase(s): Đổi chui ch in thành chui ch thường
Ví d: Lcase(“ABCD”)=”abcd”
Ltrim(s): Ct khong trng bên trái chui
Ví d: Ltrim(“ Anh”)=”Anh”
Rtrim(s): Ct khong trng bên phi chui
Ví d: Rtrim(“Anh ”)=”Anh”
Trim(s): Ct khong trng 2 bên chui
Ví d: Trim(“ Anh ”)=”Anh”
Left(s,n): Tr v n ký t đầu tiên bên trái chui
Ví d: Left(“Visual Basic”,6)=”Visual”
Right(s,n): Tr v n ký t đầu tiên bên phi chui
Ví d: Right(“Visual Basic”,5)=”Basic”
Mid(s,i,n): Tr v n ký t trong chui bt đầu t v trí i.
Ví d: Mid(“Visual Basic”,8,3)=”Bas”
Space(n): Tr v chui có n khong trng.
Ví d: Space(5)=
String(n,c): Tr v chui có n ký t c.
Ví d: String(4,”x”)=”xxxx”
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
4
9
Instr([i,]s1,s2[,n]): Cho v trí xut hin ca chui s2 trong s1.
Trong đó:
i V trí bt đầu xét (tu chn)
S1: Chui cn dò tìm
s2: Chui tìm
n : Cách so sánh (0- So tng t, 1-Không phân bit ch thường, ch hoa)
St = “Visual Basic”
Ví d:
Instr(St,”a”)=5
Instr(6,St,”a”)=9
Instr(10,St,”a”)=0
Replace(s,s1,s2[, i[, n]]): Tìm và thay thế s1 trong s bi s2.
Trong đó:
i: v trí bt đầu thay thế, giá tr mc định là 1 (thay thế t đầu)
n : s ln thay thế, giá tr mc định là 1 (thay thế tt c)
Ví d:
St = “tôi đi hc vi bn tôi”
Replace(St,”tôi”,”anh”) = ”anh đi hc vi bn anh”
Format(s,format):Định dng chui s theo chui định dng format.
Ký t thường s dng trong chui định dng:
@ : Thay thế cho mt ký t hoc khong trng
&: Thay thế cho mt ký t hoc không có ký to
Mc định chui kết qu s được đin đầy theo chui định dng t phi sang trái.
t ! phía trưc chui định dng ý nghĩa đin kết qu t trái sang phi. t > (<)
phía trước chui định dng buc chuyn kết qu thành ch thường (ch hoa)
Ví d:
Format(“abcde”,”@@@@@@”) = “ abcde
Format(Format(1234.567, "Currency"), "@@@@@@@@@@@")=" $1,234.57"
Format("abcde", "!@@@@@@") = "abcde "
Format("abcde", ">& & & & &) = "A B C D E"
Format("6152127865", "&&&-&&&-&&&&") = "615-212-7865"
III. COLLECTION
1. Gii thiu
danh sách nhóm phn t có quan h vơi nhau. Đi tượng Collection khác vi
mng nhng đim sau:
- Không cn khai báo trước s phn t, có th thêm, bt phn t bt k lúc nào.
- Vic thêm bt phn t được thc hin mt cách t động, ngưi lp trình không
phi quan tâm đến vic cp phát ng nh cho phn t mun thêm hoc gii
phòng vùng nh ca phn t b xóa.
Giáo trình Visual Basic 6.0
50
- D liu ca mi phn t cha trong đối tượng Collection có thy ý trong khi
mng ch có th cha các phn t cùng kiu d liu.
- Ngoài giá tr cha trong Collection, mi phn t còn cha kèm mt giá tr
khóa giúp truy tìm phn t nhanh chóng ngoài ch s và tên.
- Khi mt phn t được thêm vào collection, ngưi lp trình ch th đọc ch
không th thay đổi giá tr ca phn t. Mun thay đổi giá tr phn t, phi xóa
giá tr cũ ri thêm giá tr mi.
Nhng đặc đim trên cho thy Collection nhiu ưu đim hơn so vi mng, tuy
nhiên vn không th thay thế được mng trong Visual Basic tc độ truy xut
trên Collection chm hơn so vi mng. Mt d đin hình như đin mt mng
10000 s nguyên kiu long nhanh hơn 100 ln so vi collection. Vì vy vic la chn
mng hay collection tùy thuc vào yêu cu ca chương trình.
2. Các thao tác trên Collection
a. To Collection
Collection là mt đối tượng. Khai báo collection như sau:
Dim <Tên> As Collection
Set <n> = New Collection
Hoc
Dim <Tên> As New Collection
Ví d:
Dim EmployeeNames As Collection
Set EmployeeNames = New Collection
Hoc
Dim EmployeeNames As New Collection
b. Thêm giá tr vào Collection
Để thêm mt giá tr, s dng phương thc Add, dng như sau:
Add Item [, key][, before][, after]
Trong đó
Item Giá tr thêm.
key Chui duy nht đi kèm vi mi giá tr.
Before, after V trí mc thêm.
Lưu ý:
- Th t các phn t trong Collection đánh bt đầu t 1,
- Khi mc thêm là s, v trí thêm đưc xác định theo ch s,
- Khi mc thêm là chui, v trí thêm đưc xác định da theo thuc tính key,
- Các tham s Before và After là tùy chn nhưng không th xut hin đồng thi.
Ví d 1: Thêm liên tiếp 2 giá tr vào danh sách nhân viên
Dim EmployeeNames As New Collection
EmployeeNames.Add “John Smith”, “Marketing”
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
5
1
EmployeeNames.Add “Anne Lipton”,”Sales”
Ví d 2: Thêm giá tr vào trưc Anne Lipton trong danh sách trên
EmployeeNames.Add “Aves Lipton”, “Excecutive”,”Sales”
c. Truy xut giá tr trong Collection
Giá tr phn t trong Collection được truy xut thông qua thuc tính Item bng ch s
hoc key ca phn t.
Ví d: Truy xut phn t đầu tiên trong danh sách trên
Debug.Print EmployeeNames.Item(“Sales”)
Debug.Print EmployeeNames.Item(1)
Hàm ItemExists sau đây th được dùng để kim tra mt giá tr có tn to trong
collection hay không da theo khóa.
Function ItemExists(col As Collection, Key As String) As Boolean
Dim dummy As Variant
On Error Resume Next
dummy = col.Item(Key)
ItemExists = (Err <> 5)
End Function
d. Xóa mt giá tr trong Collection
a mt giá tr trong Collection bng phương thc Remove :
Remove <Index>
Trong đó Index là v trí xóa, có th là giá tr s hoc chui
Ví d 1
: Xóa phn t đầu tiên
EmployeeNames.Remove 1
Ví d 2: Xóa phn t có key là Sales
EmployeeNames.Remove “Sales”
Ví d 3: Xóa toàn b danh sách
Sub RemoveAllItems(col As Collection)
Do While col.Count
col.Remove 1
Loop
End Sub
Lưu ý:
th xóa nhanh mt danh sách bng cách thc hin như sau:
Set EmployeeNames = Nothing
Hoc
Set EmployeeNames = New Collection
Giáo trình Visual Basic 6.0
52
e. Thay đổi giá tr mt phn t trong Collection
Không th thay đổi giá tr phn t trong collection, ch duy nht th thc hin
xóa ri thêm giá tr cn sa đổi. Chương trình con ReplaceItem sau cho phép thc
hin điu này.
' INDEX có th có giá tr s hoc chui.
Sub ReplaceItem(col As Collection, index As Variant, newValue As Variant)
' Xóa phn t
col.Remove index
' Ri thêm mi
If VarType(index) = vbString Then
col.Add newValue, index
Else
col.Add newValue, , index
End If
End Sub
f. Lp trên Collection
Lp thông qua ch s phn t:
Ví d: Np danh sách giá tr trong Collection vào ListBox
Dim i As Long
For i = 1 To EmployeeNames.Count
List1.AddItem EmployeeNames(i)
Next
Lp bng phát biu For Each…Next
Ví d: In danh sách giá tr trong Collection
Dim var As Variant
For Each var in EmployeeNames
List1.AddItem var
Next
Hoc
Dim cust As Customer
For Each cust In Customers
List1.AddItem cust.Name
Next
Mng đối tưng trên form thc cht được qun trong mt Collection. th s
dng lnh lp For Each trên để thao tác nhanh trên mng đối tượng.
Ví d:
Làm cho tt c các TextBox (mng txtFlds) trên Form trng thái disable
Sub Full_Disable()
Dim oText as TextBox
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
5
3
For Each oText in txtFlds
oText.Enabled = False
Next
End Sub
3. Ví d khác
Giá tr cha trong Collection th độ phc tp bt k ch không ch đơn gin
cha giá tr như các ví d trên.
Ví d :
To danh sách Collection trong đó mi phn t cha bao gm Tên, Đơn v và mc
lương
Dim Employees As New Collection
' Mi phn t gm tên, đơn v và mc lương
Employees.Add Array("John", "Marketing", 80000), "John"
Employees.Add Array("Anne", "Sales", 75000), "Anne"
Employees.Add Array("Robert", "Administration", 70000), "Robert"
...
Để in danh sách nhân viên, có th viết như sau:
Dim var As Variant
For Each var in Employees
Debug.Print var(0)
Next
In đơn v ca Anne
Debug.Print Employees(“Anne”)(1)
In mc lương ca Robert
Debug.Print Employees(“Robert”)(2)
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
5
5
Chương 6
TextBox - ListBox-ComboBox
I.
TEXTBOX
đối tượng điu khin dùng nhp mt ni dung dng text. Ni dung nhp có th mt
dòng hoc nhiu dòng.
1.
Các thuc tính b sung
Scrollbars
Qui định các loi thanh cun được s dng trong textbox, ch dùng
khi Multiline=True , có các giá tr:
0 - None. Không có thanh cun
1 - Horizontal. Ch có thanh cun ngang
2 - Vertical. Ch có thanh cun dc
3 - Both. Có c hai loi thanh cun
SelStart
Đọc hoc đặt v trí con tr (hoc v trí bt đầu chn) trong textbox
SelLength
Đọc hoc đặt s ký t được chn trong textbox. Khi không chn,
Sellength=0
SelText
Ly ni dung đang được chn.
Nếu không chn, Seltext=””. Gán Seltext s chèn chui mi o
textbox ti con tr
Nếu có chn. Gán Seltext s thay thế chui chn bi ni dung mi
HideSelection
= False : Phn ni dung chn vn đưc highlight khi textbox mt
focus
= True: Phn ni dung chn không được highlight khi textbox mt
focus
PasswordChar
Được s dng khi nhp mt khu. Các t nhp vào luôn đưc
trình bày bng ký t định nghĩa trong thuc tính này.
2.
S kin
S kin thường hay s dng đối vi textbox Change, s kin này xy ra mi khi
ni dung textbox thay đổi do người dùng nhp hay hiu chnh thuc nh Text
3.
Ví d
Thiết kế chương trình dng mt Editor (trình son tho văn bn) đơn gin. Định
nghĩa chc năng tìm kiếm mt ni dung trên Editor.
Form chính gm 1 textbox làm editor nút bm Find để thc hin chc năng tìm
kiếm (Hình 6.1)
Giáo trình Visual Basic 6.0
56
Hình 6.1: Các Form ca chương trình san tho văn bn
Trên form chính (đặt tên frmMain),
các đối tượng sau:
TextBox
Thuc tính Giá tr
Name TxtEditor
Multiline True
Scrollbar None
CommandButton
Thuc tính Giá tr
Name CmdFind
Caption &Find
Enabled False
Trên form tìm kiếm (đặt n frmFind),
có các đối tượng sau:
Label
Thuc tính G tr
Name Label1
Caption Find text
CommandButton
Thuc tính G tr
Name CmdFind
Caption &Find
CommandButton
Thuc tính G tr
Name CmdCancel
Caption &Cancel
Người chy chương trình s nhp ni dung o textbox như mt Editor. Khi chưa
ni dung, chc năng tìm kiếm s không tác dng. vy định nghĩa th tc x
s kin Change: Khi textbox thay đổi ni dung khác rng thì nút lnh s được
kích hot (Enabled)
Private Sub txtEditor_Change()
If txtEditor.Text <> "" Then
cmdFind.Enabled = True
Else
cmdFind.Enabled = False
End If
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
57
End Sub
Khi bm nút Find, form th hai s xut hin. Định nghĩa s kin Click cho nút bm
này:
Private Sub cmdFind_Click()
frmFind.Show
End Sub
Trên form tìm kiếm, nếu người dùng nhp mt ni dung tìm kiếm bm nút Find,
chương trình s thc hin chc năng m kiếm. vy định nghĩa lnh cho s kin
Click
Private Sub cmdFind_Click()
Dim p As Integer
If txtFind.Text <> "" Then
txtText = frmMain.txtEditor.Text
p = InStr(1, txtText, txtFind.Text) ‘Tìm v trí xut hin đầu tiên
If p <> 0 Then
frmMain.txtEditor.SelStart = p- 1 ‘Gi v trí đầu tiên
frmMain.txtEditor.SelLength = Len(txtFind.Text)
Else
MsgBox "Search text not found"
End If
End If
End Sub
chui cn tìm th xut hin nhiu ln trong editor. Định nghĩa li Caption ca
Nút Find thành Find Next để mi ln bm nút này thì chương trình s tìm tiếp t sau
v trí va tìm thy và viết li lnh như sau:
Private Sub cmdFind_Click()
Static p As Integer
If txtFind.Text <> "" Then
txtText = frmMain.txtEditor.Text
p = InStr(p+1, txtText, txtFind.Text) ‘Tìm t sau v trí va tìm thy
If p <> 0 Then
frmMain.txtEditor.SelStart = p - 1 ‘Gi v trí đầu tiên
frmMain.txtEditor.SelLength = Len(txtFind.Text) ‘Highlightchui tìm thy
Else
MsgBox "Search text not found"
End If
End If
End Sub
Biến p đưc định nghĩa li thành biến static để gi li v trí va tìm thy chương
trình s tiếp tc tìm t v trí kế sau đó.
II.
LISTBOX
Dùng lit kê danh sách nhiu đối tượng và cho phép người dùng chn la.
Giáo trình Visual Basic 6.0
58
1.
Các thuc tính
Columns
S ct đưc dùng để th hin ni dung ca listbox, mc định =0
(Hình 6.2).
Hình 6.2: ListBox vi thuc tính Columns
IntegralHeight
Listbox t động điu chnh kích thước sao cho luôn th hin
đầy đủ ni dung, có giá tr True/False.
ListCount
Thuc nh này đọc - S phn t có trong listbox.
List
Danh sách ni dung (chui) trình bày trong listbox
ItemData
Danh sách cha ni dung đi kèm vi các phn t cha trong
thuc tính List. Danh sách này không được trìnhy , ch phc
v cho chương trình.
ListIndex
Ch s ca phn t đưc chn trong listbox - Phn t đầu tiên
ch s 0. Khi không phn t nào được chn , thuc tính
y có giá tr -1.
Text
Chui cha ni dung mc đưc chn trong danh sách. Tương
đương vi ch viết List(Listindex)
Multiselect
Qui định chế độ chn các phn t trong Listbox
0 - None: Mi lúc ch chn được mt phn t.
1 - Simple: Cho phép chn nhiu phn t bng cách click.
2 - Extended: Chn nhiu phn t theo kiu chn trong
Windows Explorer.
SelCount
Cho biết s phn t đang đưc chn trong danh sách List
Selected
Mng tương ng vi danh sách list, xác định phn t được
chn trong listbox (True/False)
Topindex Ch s phn t xut hin đầu tiên trong Listbox.
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
5
9
Sorted
Qui định các phn t trong danh sách đưc sp th t
(True/false)
NewIndex
Ch s phn t va mi đưc thêm vào Listbox.
Lưu ý:
th nhp trc tiếp ni dung danh sách trong lúc thiết kế ti ca s thuc tính,
xung dòng bng Ctrl+Enter (Hình 6.2)
Hình 6.2: Nhp giá tr cho thuc tính List trong ca s thuc tính
Để ly ni dung ca đối tượng đang được chn. S dng cách viết
Dim St As String
St = Listbox.List(ListBox.ListIndex)
Hoc
St = Listbox.Text
Để duyt danh sách cha trong danh sách list, s dng vòng lp for
For i = 0 to ListBox.ListCount - 1
Debug.Print ListBox.List(i)
Next i
2.
Các phương thc
AddItem <Item>[,<Index>]: thêm mt phn t vào danh sách
Thêm phn t Item vào danh sách ti v trí Index. Nếu không tham s index, phn
t s được thêm vào cui danh sách.
Ví d 1:
ListBox.AddItem “Hoa”
ListBox.AddItem “Ngoc”
ListBox.AddItem Hai”
ListBox.AddItem “Tuan”
Giáo trình Visual Basic 6.0
60
Thêm 4 phn t vào cui danh sách .
Ví d 2:
Thêm 100 phn t vào danh sách
For i = 0 to 99
ListBox.AddItem “Item “ & i
Next i
Phương thc AddItem thường được viết trong form_load để khi động giá tr cho
ListBox.
D liu khi động có th cha trong mt mng như ví d sau:
For i = LBound(MyData) To UBound(MyData)
List1.AddItem MyData(i)
Next
Hoc th khi động mt danh sách nhưng không cn định nghĩa mng bng cách
s dng hàm choose như sau:
For i = 1 To 5
List1.AddItem Choose(i, "America", "Europe", "Asia", "Africa",
"Australia")"
Next
RemoveItem <Index>: xóa mt phn t khi danh ch vi Index là s th t ca
phn t cn xoá.
Ví d :
Xoá 50 phn t đầu tn ca danh sách
For i = 0 to 49
ListBox.RemoveItem i
Next i
Clear: Xóa toàn b danh sách List
Ví d :
Xoá tt c các phn t trong danh sách
ListBox.Clear
3.
S kin
S kin thường hay s dng đối vi Listbox là Click, s kin này xy ra mi khi click
mt phn t trên Listbox hoc thay đổi phn t chn bng bàn phím (di chuyn vt
sáng).
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
6
1
Mt s kin cũng đôi khi được s dng đó là s kin scroll, s kin này xy ra khi ni
dung listbox cun. Ví d sau minh ha cách s dng s kin scroll kết hp vi thuc
tính TopIndex để đồng b hot động cun ca 2 listbox.
Hình 6.3: Đồng b hot động ca 2 listbox
Lnh viết trên các Listbox như sau:
Private Sub lstN_Click()
lstSquare.TopIndex = lstN.TopIndex
lstSquare.ListIndex = lstN.ListIndex
End Sub
Private Sub lstSquare_Click()
lstN.TopIndex = lstSquare.TopIndex
lstN.ListIndex = lstSquare.ListIndex
End Sub
Private Sub lstN_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Call lstN_Click
End Sub
Private Sub lstSquare_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
Call lstSquare_Click
End Sub
Private Sub lstN_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Call lstN_Click
End Sub
Private Sub lstSquare_MouseMove(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
Call lstSquare_Click
End Sub
Private Sub lstN_Scroll()
lstSquare.TopIndex = lstN.TopIndex
End Sub
Private Sub lstSquare_Scroll()
lstN.TopIndex = lstSquare.TopIndex
End Sub
Giáo trình Visual Basic 6.0
62
4.
Mt s ví d
Ví du 1: S dng thuc tính ItemData .
Thiết kế chương trình vi Form gm Listbox, 2 Textbox trình bày phn t được chn
và Itemdata ca phn t được chn (Hình 6.4).
Hình 6.4: Form chương trình ca ví d 1
- Ti thuc tính List ca listbox, nhp các ni dung “Muc 1”, “Muc 2”...”Muc 7” .
S dng Ctrl+Enter để xung dòng.
- Ti thuc tính ItemData ca listbox, nhp các ni dung 100, 200...700 . S dng
Ctrl+Enter để xung dòng.
Mi khi ngưi dùng click mt phn t trên listbox. Ni dung ca phn t tương ng
xut hin trong textbox. Đnh nghĩa lnh x lý s kin Click như sau:
Private Sub List1_Click()
Dim p As Integer
Text1.Text = List1.Text
p = List1.ListIndex
Text2.Text = List1.ItemData(p)
End Sub
Ni dung listbox được khi động trong formLoad như sau:
Private Sub Form_Load()
For i = 0 To 99
List1.AddItem "Muc " & i
List1.ItemData(i) = (i + 1) * 100
Next
End Sub
Ví d 2: S dng thuc tính TopIndex để t động cun ListBox.
S dng form ca ví d 1, thêm nút “Auto Scroll” và viết lnh như sau:
Private Sub Command1_Click()
For i = 0 To 99
List1.TopIndex = i
Next
End Sub
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
6
3
Hình 6.5: Form chương trình ca ví d 2
d 3: S dng thuc tính Selected để t động chn xen k các phn t trong
listbox. (Hình 6.6).
S dng form ca ví d 2, thêm nút “Select” và viết lnh như sau:
Private Sub Command2_Click()
For i = 0 To 99
If i Mod 2 = 0 Then List1.Selected(i) = True
Next
End Sub
Hình 6.6: Form ca chương trình ví d 3
d 4: Thiết kế form gm 2 ListBox, d liu được khi động trước cho mt listbox,
viết lnh trên các nút để di chuyn các phn t chn (có th chn nhiu) t listbox này
sang listbox khác. Vic di chuyn cũng th thc hin khi nhp đúp trong listbox.
Giao din ca chương trình như hình 6.7.
Hình 6.7: Form chương trình ví d 4
Giáo trình Visual Basic 6.0
64
Lnh cho các nút viết như sau:
Private Sub cmdMove_Click()
' Di chuyn phn t đang chn t listbox trái sang listbox phi
If lstLeft.ListIndex >= 0 Then
lstRight.AddItem lstLeft.Text
lstLeft.RemoveItem lstLeft.ListIndex
End If
End Sub
Private Sub cmdMoveAll_Click()
' Di chuyn mi phn t t listbox trái sang listbox phi
Do While lstLeft.ListCount
lstRight.AddItem lstLeft.List(0)
lstLeft.RemoveItem 0
Loop
End Sub
Private Sub cmdBack_Click()
' Di chuyn phn t đang chn t listbox phi sang listbox trái
If lstRight.ListIndex >= 0 Then
lstLeft.AddItem lstRight.Text
lstRight.RemoveItem lstRight.ListIndex
End If
End Sub
Private Sub cmdBackAll_Click()
' Di chuyn mi phn t t listbox phi sang listbox trái
Do While lstRight.ListCount
lstLeft.AddItem lstRight.List(0)
lstRight.RemoveItem 0
Loop
End Sub
Private Sub lstLeft_DblClick()
' Mô phng tác động bm phím
cmdMove.Value = True
End Sub
Private Sub lstRight_DblClick()
' Mô phng tác động bm phím
cmdBack.Value = True
End Sub
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
6
5
III.
COMBOBOX
đối tượng điu khin kết hp gia textbox listbox. Trong combobox, người
dùng th chn mt đối tượng trưc hoc nhp mi mt ni dung trong textbox
phía trên.
Combo box cũng các thuc tính ca ListBox (tr MultiSelect, Selected) , ngoài ra
còn có thêm thuc tính Style để qui định kiu ca combobox
0 - Dropdown Combo
Combo chun. Ch trình bày listbox khi click nút mũi tên
bên phi.
1 - Simple Luôn th hin listbox n dưới textbox. Khi ni dung
nhp trong textbox ging vi mt ni dung trong listbox,
nó s t động cun để th hin đầy đủ phn t đó
2 - Dropdown List
Không Textbox. Ch trình bày listbox khi click nút
mũi tên bên phi
nh 6.8 trình bày các dng ComboBox vi các giá tr ca thuc tính Style.
Hình 6.8: Các dng ComboBox
ComboBox cũng c s kin ging như ListBox. S kin thung viết lnh s
kin Click.
Giáo trình Visual Basic 6.0
66
IV.
DRIVELISTBOX, DIRLISTBOX VÀ FILELISTBOX
các đối tượng điu khin đưc xây dng da trên ListBox ComboBox, thường
s dng kết hp vi nhau cho phép người s dng d dàng chn la mt dĩa, mt
thư mc hoc mt tp tin trong máy.
1.
DriveListBox
ComboBox cho phép chn mt dĩa trong các dĩa ca máy. Thuc tính thường s
dng thuc tính Drive cho biết dĩa đang được chn. Khi chn mt dĩa mi, s
kin Change xy ra trên DriveListBox.
2.
DirListBox
Đối tượng trình bày cây thư mc ca mt dĩa cho phép người s dng chn la.
Thuc tính thường s dng là Path cho biết đường dn thư mc đang chn. Khi chn
mt thư mc mi, s kin Change xy ra trên DirListBox.
3.
FileListBox
Đối tượng trình y các tp tin trong mt thư mc cho phép người s dng chn
la. Các thuc tính thường s dng là :
Path Đường dn thư mc
FileName Tên đầy đủ tp tin đang chn trong FileListBox
Pattern Loi tp tin được xut hin trong FileListBox
*.* - Mi tp tin cha trong thư mc
*.txt; *.doc; *.rtf – 3 loi tp tin được xut hin
Khi chn mt tp tin, s kin Click xy ra trên FileListBox.
DriveListBox, DirListBox FileListBox thường s dng chung vi nhau để chn
mt tp tin trên dĩa. Khi đặt chúng lên form cn viết lnh để đồng b hot động như
sau:
Lnh viết trên DriveListBox
Private Sub Drive1_Change()
' Khi chn dĩa trên DriveListBox, gán cho thuc tính Path
' ca DirListBox để làm thay đổi cây thư mc
Dir1.Path = Left$(Drive1.Drive, 1) & ":\"
End Sub
Lnh viết trên DirListBox
Private Sub Dir1_Change()
‘ Gán đưng dn chn cho đối tưng FileListBox để làm thay
Đổi ni dung FileListBox
File1.Path = Dir1.Path
End Sub
Cui ng khi ngưi s dng click ti tên mt tp tin trong FileListBox, tên tp tin s
đưc xđưc xác định như sau:
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
67
Filename = File1.Path
If Right$(Filename, 1) <> "\" Then Filename = Filename & "\"
Filename = Filename & File1.Filename
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
6
9
Chương 7
Scrollbar – Image – Timer
I.
SCROLLBAR
mt đối tượng điu khin dùng chn mt giá tr trong mt khong c định cho
trước mt cách trc quan.
hai loi thanh cun: thanh cun dc (VScrollbar) thanh cun ngang
(HScrollbar)
1.
Các thuc tính
Min
Qui định giá tr cc tiu ca thanh cun
Max
Qui định giá tr cc đại ca thanh cun
Value
Giá tr đang được chn ca thanh cun, ph thuc vào v trí ca con
chy trên thanh cun. Giá tr này có th đọc t v trí ca con chy
hoc gán trong chương trinh.
SmallChange
Qui định khong tăng/gim ca giá tr chn trên thanh cun mi khi
bm nút mũi n hai đầu (default=1)
LargeChange
Qui định khong tăng/gim ca giá tr chn trên thanh cun mi khi
click trên vùng chy ca con chy (default=1)
Khi mt thanh cun đưc to ra trên form, luôn luôn cn định nghĩa các giá tr min và
max
2.
S kin
Change
S kin xy ra sau khi con chy thay đổi v trí hoc thuc tính value thay
đổi
Scroll
S kin xy ra khi con chy thay đổi v trí hoc thuc tính value thay đổi
3.
Ví d:
Thiết kế form chn màu bng cách phi hp 3 màu cơ bn RGB. Giá tr ca c thành
phn u s đưc chn bng thanh cun. Màu chn được th hin bng đối tượng
Shape.
Hình 7.1: Thiết kế form chn màu
Các đối tượng trên form được chn như sau:
Giáo trình Visual Basic 6.0
70
Đối tượng Shape
Thuc tính Giá tr
Name Shape1
FillStyle 0 - Solid
Shape 0 - Rectangle
Các Textbox (Mng)
Thuc tính Giá tr
Name txtColor
Đối tượng Hscrollbar (mng)
Thuc tính Value
Name hsbColor
Min 0
Max 255
Value 100
Viết lnh cho s kin Form_Load như sau:
Private Sub Form_Load()
Shape1.FillColor = RGB(hsbColor(0).Value, hsbColor(1).Value, hsbColor(2).Value)
End sub
Viết lnh cho s kin Change ca các thanh cun như sau:
Private Sub hsbColor_Change(Index As Integer)
TxtColor(Index).Text = hsbColor(Index).Value
ChangeFillColor
End Sub
Định nghĩa sub ChangeFillColor trong phn General như sau:
Sub ChangeFillColor()
Shape1.FillColor = RGB(hsbColor(0).Value, hsbColor(1).Value, hsbColor(2).Value)
End sub
Sa định nghĩa Form_Load thành
Private Sub Form_Load()
ChangeFillColor
End sub
II.
IMAGE
S dng để đặt mt hình nh lên form.
Các thuc tính
Picture
Gi hình cn trinh y, thường nhn giá tr tr v t hàm LoadPicture
BorderStyle
Kiu khung (0-None, 1-Fixed Single)
Stretch
Hình t động co giãn để nm gn trong khung đã qui định (True/False)
Hàm LoadPicture(PathName) np các tp tin nh cha vào thuc tính Picture ca
đối tượng Image. Các loi tp tin nh có th np là : .BMP, .GIF, .JPG, .WMF, .CUR,
.ICO
Ví d: Np tp tin nh t dĩa
Image1.Picture = LoadPicture(“C:\WINDOWS\SETUP.BMP”)
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
7
1
III.
TIMER
Đối tưng dùng x các s kin thi gian. Lnh viết trong đối tượng timer s t
động thc hin sau mt khong thi gian xác định.
1.
Thuc tính
Interval
Qui định khong thi gian xy ra s kin. Tính bng ms. Giá tr 0 làm
Timer ngưng hot động)
2.
S kin
S kin được dùng để định nghĩa lnh s kin Timer. S kin này xy ra mi
khi timer đếm đủ khong thi gian qui định trong thuc tính Interval
3.
Ví d
S dng đối tượng Image và Timer để to đối tượng hot động trong chương trình
Hình 7.1: Form chương trình to đối tượng chuyn động
Image1
Thuc tính Giá tr
Name Image1
Picture Buttfly1
Visible False
Image2
Thuc tính Giá tr
Name Image2
Picture Buttfly2
Visible False
Image3
Thuc tính Giá tr
Name Image3
Timer1
Thuc tính Giá tr
Name Timer1
Interval 150
Enabled False
CommandButton
Thuc tính Giá tr
Name CmdSw
Caption Start
Viết lnh cho s kin form_load như sau:
Private Sub Form_Load()
Image3.Picture = Image1.Picture
End Sub
Viết lnh cho s kin thi gian ca Timer:
Giáo trình Visual Basic 6.0
72
Private Sub Timer1_Timer()
Static T As Integer
If T = 0 Then
Image3.Picture = Image1.Picture
T = 1
Else
Image3.Picture = Image2.Picture
T = 0
End If
End Sub
Viếtî lnh cho CommandButton:
Private Sub CmdSw_Click()
If CmdSw.Caption=”Start” Then
Timer1.Interval=150
CmdSw.Caption = "Stop"
Else
Timer1.Interval=0
CmdSw.Caption = "Start"
End If
End Sub
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
7
3
Chương 8
Truy xut d liu
I. TRUY XUT D LIU BNG ĐỐI TƯỢNG ĐK CÓ KT NI CSDL
1. DataControl
Data control đối tượng điu khin cho phép t động hoá quá trình kết ni truy
xut d liu t các tp tin cơ s d liu Access, Foxpro, Excel, Text...
Data control cho phép duyt, thao tác trên các vùng ca cơ s d liu thông qua các
đối tượng điu khin kết ni cơ s d liu (Bound-controls) mà không cn viết lnh.
2. Các thuc tính
Connect
Loi cơ s d liu kết ni (Access, Dbase,Excel).
DatabaseName Chui đường dn tên tp tin cơ s d liu.
Recordsource
Tên tp tin d liu (Tên bng nếu là cơ s d liu Access).
Recordset
Thuc tính dùng truy xut các mu tin trong cơ s d liu đã được kết
ni bng Datacontrol.
Recordsettype
Loi recordset, có các giá tr sau:
dbOpenTable: S dng khi m 1 table. Có th thêm, xoá, cp nht
các mu tin.
dbOpenDynaset: S dng khi m 1 table hay 1 query, th gm
nhiu vùng t nhiu tp tin. Cho phép th thêm, xoá, cp nht các
mu tin.
DbOpenSnapshot: S dng khi m 1 table hay 1 query, th
gm nhiu vùng t nhiu tp tin, được dùng để duyt hay to
report, không th thay đổi.
ReadOnly
(True/False) Cơ s d liu có th cp nht được hay không
BOFAction
Thuc tính định nghĩa hot động ca Datacontrol khi di chuyn đến
mu tin đầu tiên, có các giá tr sau:
- 0: MoveFirst - Di chuyn v mu tin đầu tiên,
- 1: BOF - v trí đầu tiên
EOFAction
Thuc nh định nghĩa hot động ca Datacontrol khi di chuyn đến
mu tin cui cùng, có các giá tr sau:
- vbEOFActionMoveLast = 0: Khi di chuyn đến hết tp tin trên
recordset t động nhy đến phn t cui cùng,
- vbEOFActionEOF = 1: Khi di chuyn đến hết tp tin trên
recordset, disable nút MoveNext trên Datacontrol,
- vbEOFActionAddnew = 2: Khi di chuy
n đến hết tp tin trên
recordset, t động kim tra d liu (Validate) thêm mu tin
mi vào Recordset
3. c đối tưng điu khin có kết ni cơ s d liu (Bound-controls)
Giáo trình Visual Basic 6.0
74
Đối tượng điu khin có kết ni cơ s d liu là các đối tượng điu khin có thêm các
thuc tính (Datasource, DataField) cho phép kết ni vi mt field ca bng d liu để
trình bày hoc cp nht ni dung ca field.
Trong Visual Basic, các đối tượng điu khin có kết ni cơ s d liu gm:
Các đối tượng chun (Intrinsic)
Check box
Image
Label
Picture box
Text box
List box
Combo box
Các đối tượng m rng (Extended)
Data-bound list box
Data-bound combo box
Data-Bound Grid (DBGrid)
Các thuc tính được s dng khi truy xut cơ s d liu
Thuc tính Ý nghĩa
DataChanged True/False: Cho biết ni dung field thay đổi hay
không
DataField Tên vùng d liu.
Datasource Tên ngun d liu, thường là tên ca Datacontrol.
Ví d:
Thiết kế form duyt bng Employee cha trong cơ s d liu Access NWIND.mdb.
Các Field mun trình y d liu gm:
H tên : FirstName + LastName
Ngày sinh: Birth Date
Mã s nhân viên: Employee ID
Hình 8.1
: Duyt bng Employees trong cơ s d liu NWIND.MDB
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
7
5
Đối tượng, thuc tính giá tr thuc tính ca các đối tượng được tóm tt trong bng
sau
Đối tưng Thuc tính Giá tr Ý nghĩa
Form Name FrmData
Caption Bound Browser
Data Name datEmployees Tên DataControl
Caption Employees
DatabaseNameC:\Program
Files\VB6\NWIND.MDB
Cơ s d liu NWIND.MDB
RecordSource Employees Bng Employees
TextBox Name TxtLastName
DataField LastName Vùng h (LastName)
DataSource DatEmployees
TextBox Name TxtFirstName
DataField FirstName Vùng tên (FirstName)
DataSource DatEmployees
TextBox Name TxtBirthDate
DataField BirthDate Vùng ngày sinh (BirthDate)
DataSource DatEmployees
TextBox Name TxtEmployeeId
DataField EmployeeID Vùng mã nhân viên
DataSource DatEmployees
Enabled False
Label Name Label1
Caption Employee:
Label Name Label2
Caption Birth Date:
Label Name Label3
Caption Employee ID:
Bm phím F5 để chy chương trình, s dng các phím mũi tên trên DataControl để
duyt xem các mu tin.
4. S dng data-bound listbox (DBList) và combobox (DBCombo)
Gi s có 2 bng d liu cho như sau:
Giáo trình Visual Basic 6.0
76
- Publishers cha thông tin v các nhà xut bn sách, thông tin cha trong bng
gm các field PubID (Mã NXB) và Name (Tên NXB),
- Titles cha thông tin v mi quyn sách , thông tin cha trong bng gm các
field PubID (Mã NXB), AU_ID (Mã tác gi), Title (Ta sách), Year_Published
(Năm XB) và ISBN.
Hình 8.2: Quan h gia các bng Publishers và Titles
Người ta mun xem các thông tin v mt quyn sách gm ta (Title), năm XB
(Year_Published), ISBN và tên NXB (Name) vi vùng Name th chn để cp nht
t danh sách các nhà xut bn. Form d liu có dng như hình 8.3.
Hình 8.3: Xem thông tin sách có th điu chnh tên nhà xut bn
Databound ListBox (DBList) Databound ComboBox (DBCombo) các đối tưng
đưc thiết kế để thc hin chc năng này, chúng các Listbox ComboBox
thêm mt s thuc tính đặc bit để kết ni vi cơ s d liu. Hai đối tượng điu khin
này cha trong Microsoft Databound List Control. Để s dng, np lên ToolBox bng
cách bm t hp phím CTRL+T và chn trong hp thoi Components.
Các thuc tinh kết ni cơ s d liu ca DBList và DBCombo
Datasource
Tên ngun d liu, thường là tên ca Datacontrol
DataField
Tên vùng d liu cha trong Recordset đã m bng Datacontrol.
Khi giá tr mi được chn, ni dung vùng tương ng trong CSDL s
được t động cp nht khi di chuyn sang mu tin mi.
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
77
Rowsource
Tên Datacontrol kết ni vi table có ni dung được s dng để đin
vào DBList/DBCombo
BoundColumn
Tên vùng thuc recordset đưc ch định bi Rowsource được s
dng để cp nht Recordset trong Datasource
ListField
Tên vùng thuc Recordset trong Rowsource được s dng để đin
vào DBList/DBCombo
Lưu ý:
n các vùng DataField BoundColumn nên ging nhau trong 2 cơ s d liu.
Thường đó là các vùng có thiết lp quan h (Relationship).
Trong trường hp ch s dng 1 Datacontrol c thuc tính Datasource
Rowsource s cùng giá tr. Khi đó BoundColumn DataField cùng giá tr
tên vùng cn cp nht trong cơ s d liu.
Ví d
Mun to form duyt bng Titles vi NXB (PubID) Name được ly t bng
Publishers. Giá tr các vùng gán được tóm tt theo hình 8.4 .
Hình 8.4: S dng DBCombo và DBList để duyt bng Titles và Publishers
Các đối tượng điu khin s dng và giá tr thuc tính đuc tóm tt theo bng sau:
Ði tượng Thuc tính Giá tr
Data1 Connect Access
DatabaseName Biblio.mdb
Recordsettype 0-dbOpenTable
RecordSource Titles
Data2 Connect Access
DatabaseName Biblio.mdb
Recordsettype 2-dbOpenSnapshot
RecordSource SELECT PubID, Name FROM Publishers ORDER
BY PubID
TextBox Name TxtTitle
Datasource Data1
DataField Title
TextBox Name TxtYear
Datasource Data1
Giáo trình Visual Basic 6.0
78
DataField Year Published
TextBox Name TxtISBN
Datasource Data1
DBCombo Name DBCombo1
Datasource Data1
DataField PubID
Rowsource Data2
BoundColumn PubID
ListField Name
5. S dng Databound Grid Control (DBGrid)
Databound Grid control là đối tượng điu khin giúp trình bày ni dung bng d liu
dưới dng bng (dòng, ct), các thuc nh kim soát thao tác tn bng d liu
như sa cha (edit), thêm mi (addnew) hoc xóa mt mu tin trong bng. Hình dưới
trình bày mt form s dng DBGrid để thao tác trên bng Pulishers (Nhà xut bn)
ca cơ s d liu BIBLIO.MDB.
Hình 8.5: Trình bày d liu bng DBGrid
Phn này trình bày c bước s dng DBGrid để thao tác trên bng d liu kết hp
vi Data control mà không cn viết lnh.
Bước 1: Đặt Datacontrol lên form, điu chnh các thuc tính:
Database Name: Tên cơ s d liu,
Recordsource: Tên bng d liu ,
Bước 2: Np đối DBGrid lên ToolBox
Bm t hp phím Ctrl+T để m hp thoi Components,
Check ti đối tượng Microsoft Databound Grid Control 5.0
Bm nút OK
Biu tương DBGrid xut hin trên Toolbox.
Bước 3: Đặt DBGrid lên form
Click ti biu tượng DBGrid trên ToolBox,
Click , kéo để xác định kích thước DBGrid trên form.
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
7
9
Bước 4: Liên kết DBGrid vi DataControl
Điu chnh thuc tính Datasource ca DBGrid thành tên ca Datacontrol,
Bm phím phi trên DBGrid ri chn Retrieve fields
Tên các vùng ca bng d liu s xut hin trên dòng tiêu đề ca DbGrid.
Hình 8.6: DBGrid sau khi np các vùng ca bng d liu
Bước 5: Điu chnh các thuc tính ca DBGrid
Bm phím phi trên DBGrid, chn properties để m Property Pages,
Hình 8.7: Th General
Th General
Ý nghĩa các tùy chn đưc tóm tt trong bng sau:
AllowAddnew
Cho phép nhp thêm mu tin mi trên DBGrid
AllowDelete
Cho phép xóa mu tin ngay trên DBGrid bng cách chn mu
tin ri bm phím Delete
AllowUpdate
Cho phép thay đổi ni dung các mu tin ngay trên DBGrid
ColumnHeaders
tiêu đề hay không
Headlines
Kích thưc dòng tiêu đề tính theo dòng
Giáo trình Visual Basic 6.0
80
RowHeight
Chiu cao dòng
RowdividerStyle
Kiu đường phân cách các mu tin trong DBGrid
Datamode
DBGrid có kết ni vi bng d liu hay không
Th Keyboard
Định nghĩa cách s dng phím Tab trong DBGrid
Hình 8.8: th Keyboard
Th Columns
Th t trình bày các Field trên các ct ca DBGrid và định dng giá tr trên mi ct.
Hình 8.9: Th Columns
Th Layout
Độ rng ct chế độ căn ni dung trong ct ca DBGrid, kiu ca vch phân cách
ct
Hình 8.10: Th Layout
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
8
1
Th Color
Chn màu ch, màu nn trong DBGrid
Hình 8.11: Th Color
Th Font
Chn kiu ch tiêu đề và ni dung DBGrid
Hình 8.12: Th Font
Ví d :
S dng DBGrid để duyt bng Title trong cơ s d liu Biblio.mdb. Các bước thc
hin như sau:
Bước 1: Đặt DataControl lên form, điu chnh các thuc tính theo bng sau:
Thuc tính Giá tr
Name Data1
Connect Access
DatabaseName Biblio.mdb
Recordsettype 1-dbOpenDynaset
RecordSource Titles
Bước 2: Đặt DBGrid lên form, điu chnh các thuc tính theo bng sau:
Thuc tính Giá tr
DataSource Data1
Giáo trình Visual Basic 6.0
82
AllowAddNew False
AllowDelete False
AllowUpdate False
Bước 3: Np các vùng ca bng d liu Title lên DBGrid
Right-Click, chn Retrieve Fields để ly thông tin ca vùng thành các ct trong
DBGrid.
Bm F5 chy chương trình. Di chuyn qua c mu tin trong DBGrid bng các phím
mũi tên hoc s dng Datacontrol để di chuyn. Chương trình có dng như hình 8.12.
Hình 8.13: S dng DBGrid duyt bng Title
Thêm DBCombo chn nhà xut bn (Publisher) để người dùng th chn ch xem
các ta sách theo mt nhà xut bn . Thêm TextBox chn năm xut bn để ngưi
dùng có th chn xem các ta sách xut bn trong mt năm nào đó.
Đặt thêm các đối tượng lên form và qui định các thuc tính như cho trong bng sau:
Đối tượng Thuc tinh Giá tr
Data2 Connect Access
DatabaseName Biblio.mdb
Recordsettype 2-dbOpenSnapshot
RecordSource SELECT PubID, Name FROM Publishers ORDER
BY PubID
TextBox Name TxtFlt
ComboBox Name cbFlt
List Year Published
Publisher
DBCombo Name cbPublisher
Datasource Data2
DataField PubID
Rowsource Data2
BoundColumn PubID
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
8
3
ListField Name
Button Name CmdApply
Caption Apply
Hình 8.14: Thêm đối tượng để thc hin chc năng lc
Viết lnh cho s kin click trên ComboBox
Private Sub CbFlt_Click()
Select Case CbFlt.ListIndex
Case 0
FltMode = 0
txtFlt.Visible = True
cbPublisher.Visible = False
Case 1
FltMode = 1
txtFlt.Visible = False
cbPublisher.Visible = True
End Select
End Sub
Trong đó biến FltMode biến chung được dùng để chn chế độ xem theo năm xut
bn hay nhà xut bn
Viết lnh cho nút lnh Apply
Private Sub CmdApply_Click()
QryStr = "SELECT * FROM Titles WHERE "
Select Case FltMode
Case 0
QryStr = QryStr & "[Year Published]= " & txtFlt.Text
Case 1
Giáo trình Visual Basic 6.0
84
QryStr = QryStr & "PubID= " & cbPublisher.BoundText
End Select
Data1.RecordSource = QryStr
Data1.Refresh
End Sub
Viết lnh cho form_load qui định phn t đầu tiên được chn trong ComboBox
Private Sub Form_Load()
CbFlt.ListIndex = 0
End Sub
Bm F5 chy chương trình, thay đối giá tr chn năm xut bn ri bm nút Apply để
xem tác dng.
II. TRUY XUT D LIU THÔNG QUA DATA ACCESS OBJECT
Mt ch khác để truy xut d liu là s dng Data Access Object (DAO). Đối tưng
này phép truy xut d liu bng chương trình.
1. Các thao tác cơ bn
a. M Cơ s d liu
Lnh Set Db = OpenDatabase(DbName, Options, read-only)
Trong đó
Db Biến kiu Database đại đin cho cơ s d liu cn truy xut
DbName Chui tên tp tin d liu
Options Tu chn khi m cơ s d liu. giá tr True khi m chế độ
Exclusive (ch có mt người truy xut), giá tr False khi m
chế độ Shared (nhiu người truy xut)
read-only (True/False) Chế độ m cơ s d liu
Ví d: M cơ s d liu BIBLIO.MDB
Private Sub Form_Load()
AppFolder = App.Path
Dim db As Database
Set db = OpenDatabase(AppFolder & "\BIBLIO.MDB")
End sub
b. M Recordset
Lnh Set rs = db.OpenRecordset(Source)
Trong đó
rs Biến kiu Recordset
Source Tên bng d liu hoc chui câu lnh SQL
Ví d:
Dim Db As Database, rs As Recordset
Set Db = OpenDatabase("BIBLIO.MDB")
Set rs = Db.OpenRecordset("AUTHORS")
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
8
5
Hoc m Recordset t chui SQL
Set Db = OpenDatabase("BIBLIO.MDB")
Set Rs = Db.OpenRecordset("SELECT * FROM AUTHORS")
th liên kết mt recordset đã m vi Datacontrol như sau:
Set Data1.Recordset = Rs
2. Các thuc tính ca Recordset
AbsolutePosition
V trí tuyt đối ca mu tin trong Recordset, mu tin đầu tiên có
th t 0
Bookmark
V trí ca mu tin hin thi (kiu Variant)
EOF
(True/False)
Thuc tính cho biết mu tin hin hành sau mu tin cui
cùng hay không , cho giá tr True khi không có mu tin nào.
BOF
(True/False)
Thuc tính cho biết mu tin hin hành trước mu tin đầu
tiên không, cho giá tr True khi không có mu tin nào.
NoMatch
(True/False)
Cho kết qu tìm kiếm sau lnh Seek hoc Find
RecordCount S mu tin trong Recordset
Fields
Mng các vùng trong Recordset
Index
Chn tên vùng Index
Sort
Chn n vùng sort
3. Các thao tác trên Recordset
a. Ly giá tr ca 1ng :
3 cách viết
ch 1: Recordset.Fields(<Ch s vùng>)
Ví d:
mYear = rs.Fields(5)
ch 2: Recordset.Fields(<Chui tên vùng>)
Ví d:
mYear = rs.Fields(“Year Published”)
ch 3: Recordset![Chui tên vùng]
Ví d:
mYear = rs![Year Published]
b. Duyt
Phuơng thc Công dng Ví d
MoveNext
Chuyn sang mu tin kế tiếp rs.MoveNext
MoveLast
Chuyn đến mu tin cui cùng rs.MoveLast
MovePrevious
Chuyn v mu tin trưc rs.MovePrevious
MoveFirst
Chuyn v mu tin đầu tiên rs.MoveFirst
Giáo trình Visual Basic 6.0
86
d: Thiết kế form duyt bng Titles ca c s d liu BIBLIO.MDB không s
dng DataControl. Giao din chương trình có dng như hình dưới 8.14
Hình 8.14: Truy xut d liu bng DAO
Khai báo biến toàn cc như sau:
Dim myDb As Database
Dim myRS As Recordset
M cơ s d liu khi np form và làm xut hin mu tin đầu tiên
Private Sub Form_Load()
AppFolder = App.Path ' Ly đường dn hương trình
If Right(AppFolder, 1) <> "\" Then AppFolder = AppFolder & "\"
' M cơ s d liu BIBLIO.MDB
Set myDb = OpenDatabase(AppFolder & "BIBLIO.MDB")
'M Recordset
Set myRS = myDb.OpenRecordset("Select * from Titles ORDER BY Title")
' Hin mu tin đầu tiên
If myRS.RecordCount > 0 Then
myRS.MoveFirst 'di chuyn v mu tin đầu tiên
Displayrecord ' Hin ni dung mu tin
End If
End Sub
Private Sub Displayrecord()
' Làm xut hin ni dung mu tin bng cách gán giá tr vào các textbox
With myRS
txtTitle.Text = .Fields("Title")
txtYearPublished.Text = .Fields("[Year Published]")
txtISBN.Text = .Fields("ISBN")
txtPubID.Text = .Fields("PubID")
End With
End Sub
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
87
Viết lnh cho các nút di chuyn
Private Sub CmdNext_Click()
myRS.MoveNext ' Di chuyn sang mu tin kế tiếp
If Not myRS.EOF Then
Displayrecord
Else
myRS.MoveLast
End If
End Sub
Private Sub CmdPrevious_Click()
myRS.MovePrevious ' Di chuyn v mu tin trước đó
If Not myRS.BOF Then
Displayrecord
Else
myRS.MoveFirst
End If
End Sub
Private Sub CmdFirst_Click()
myRS.MoveFirst ' Di chuyn v mu tin đầu tiên
Displayrecord
End Sub
Private Sub CmdLast_Click()
myRS.MoveLast ' Di chuyn v mu tin cui cùng
Displayrecord
End Sub
c. Di chuyn nhanh bng Bookmark
Dim Lastmark As Variant
Lastmark = rs.Bookmark Đánh du trước khi di chuyn
rs.MoveLast ‘ Di chuyn đến mu tin cui
rs.Bookmark =Lastmark ‘Quay tr li mu tin trước khi dc
c. Tìm kiếm bng Find
Phương thc Hot động d
FindNext
Tìm mu tin kế tiếp tha mãn điu kin rs.FindNext “PubID=5”
FindLast
Tìm mu tin cui cùng tha mãn điu kin rs.FindLast “PubID=5”
Giáo trình Visual Basic 6.0
88
FindPrevious
Tìm mu tin phía trước tha mãn điu
kin
rs.FindPrevious
“PubID=5”
FindFirst m mu tin đầu tiên tha mãn điu kin rs.FindFirst “PubID=5”
Ví d:
FindStr = “PubID = “ & mID
With rs.Recordset
Bm= .Bookmark
.MoveFirst
.FindFirst FindStr
if .Nomatch then
MsgBox “Not found”
.Bookmark = bm
End if
End with
d. Tìm kiếm bng Seek
Ví d:
Dim MyTable As Recordset
Set MyTable = Data1.Recordset
MyTable.Index = "Supplier ID"
With MyTable
Bm= .Bookmark
.Seek "=", mID
if .Nomatch then
MsgBox “Not found”
.Bookmark = bm
End if
End with
e. Cp nht cơ s d liu
Thay đối giá tr 1 Field
Gi phương thc Edit, gán giá tr mi cho vùng cn thay đổi, sau đó s dng phương
thc Update để cp nht thay đổi.
Ví d:
With rs
.Edit
.Fields![PubID]=”12345”
.Update
End With
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
8
9
Thêm mu tin mi
S dng phương thc AddNew để thêm mi mt mu tin trng, gán giá tr ri s
dng phương thc Update để cp nht.
Ví d:
With rs
‘ Thêm mu tin trng
.AddNew
' Gán giá tr mi
.rs.Fields("Title") = "The Data Control"
.rs.Fields("Year Published") = "1993"
.rs.Fields("AU_ID") = 37
.rs.Fields("ISBN") = "2344456533"
.rs.Fields("PubID") = 43
' Cp nht
.rs.Update
End With
f. Xoá 1 mu tin
S dng phương thc Delete để xoá mu tin hin hành
rs.Delete
Giáo trình Visual Basic 6.0 91
Chương 9
PictureBox – X lý mouse
I. PICTUREBOX
đối tượng điu khin dùng để trình bày các hình nh. Picture Box khác vi Image
ch Image ch trình bày nh, không th x trên nh. PictureBox ngoài chc năng
trình bày hình nh, còn các phương thc đồ ha cho phép x trên nh như xoá
nh, v thêm ...
PictureBox còn dùng làm đối tưng cha để cha các đối tượng khác.
1. Thuc tính:
Picture
Gi hình nh cn trình bày, s dng LoadPicture để np tp tin nh
BorderStyle
Kiu khung 0-None , 1- Fixed Single
Align
V trí đặc bit trên form
0-None,1-Align Top, 2-Align Bottom, 3-Align Left, 4-Align Right
AutoSize
True/False: Thuc tính t động điu chnh kích thước PictureBox để
th hin đầy đủ đối tượng cha trong (ging thuc tính stretch
ca Image)
FillColor
Màu tô
FillStyle
Mu tô, có các giá tri:
0-Solid, 1-Transparent, 2- Horizontal Line, 3-Vertical Line, 4-
Upward Diagonal, 5-Downward Diagonal, 6-Cross, 7-Diagonal
Cross
Hình 9.1: Các mu nét v
Giáo trình Visual Basic 6.0 92
Nguyn Đăng Quang
DrawStyle
Kiu ca nét v, có các giá tr:
0-vbSolid, 1-vbDash, 2-vbDot, 3-vbDashDot, 4- vbDashDotDot, 5-
vbInvisible, 6-vbInsideSolid
Hình 9.2: Mu tô
DrawWidth
B dày nét v tính theo đim. Có giá tr 0-32767
CurrentX,
CurrentY
Ta độ v hin ti trong PictureBox. Đưc cp nht sau mi lnh v
AutoRedraw
True/False:Ni dung v trong PictureBox được t động v li mi
khi thay đổi kích thước
2. Các phương thc đồ ha
Pset [Step] (x,y), color
Chm 1 đim trên Picture Box vi
(x,y) Ta độ đim. Khi có t khóa Step, ta độ đim ý nghĩa độ di đim so
vi ta độ hin ti.
Color Màu đim chm, nét chm phc thuc vào thuc nh DrawWidth
Ví d: Chm 1000 vi màu và độ dày nét ngu nhiên trên Picture Box
For i = 1 To 1000
Picture1.DrawWidth = Rnd * 10 + 1
Picture1.PSet (Rnd * ScaleWidth, Rnd * ScaleHeight), _
RGB(Rnd * 255, Rnd * 255, Rnd * 255)
Next
Picture1.DrawWidth = 1
Print <Giá tr>
In <Giá tr> lên PictureBox ti ta độ hin ti cp nht CurrentX = 0 , CurrentY =
ta độ dòng kế tiếp.
Giáo trình Visual Basic 6.0 93
Ví d :
Picture1.Print “Hello”
Cls
Xoá PictureBox
Line [Step] (x1,y1) – [Step] (x2,y2), Color, BF
V đon thng hoc hình ch nht
Trong đó:
Step (x1,y1) Ta độ đầu.
Step tu chn, khi đó (x1,y1) ý nghĩa độ di so vi ta độ v
hin ti.
(x1,y1) Ta độ bt đầu v, nếu không có thì v t ta độ hin ti.
Step (x2,y2) Ta độ cui
Step tu chn, khi đó (x2,y2) ý nghĩa độ di so vi ta độ v
hin ti.
(x2,y2) Ta độ cui, bt buc phi có.
Color u nét v .
B V hình ch nht
F Tô hình ch nht, ch được dùng vi F
Lưu ý:
- Màu nét v cũng có th xác định bng thuc tính ForeColor.
- Kiu , c nét v xác định bng thuc tính DrawStyle, DrawWidth
Ví d 1:
Picture1.Line (0,0) - (100,100) V đon thng t (0,0) - (100,100)
Picture1.Line - Step (50,50) ’ V tiếp t (100,100) đến (150,150)
Picture1.Line (0,0) - (100,100), vbRed , B ‘Vnh ch nht vi nét v màu đỏ
Picture1.Line (0,0) - (100,100), vbRed , BF ‘V hình ch nht tô màu đỏ
Ví d 2: V tam giác
Line (1000, 2000)- Step (1000, 0) ' V đường ngang
Line -Step (0, 1000) ' V đưng dc
Line -(1000, 2000) ' Khép kín tam giác
Ví d 3: V đồ th hàm s y = sin(x) trong đon -pi đến +pi
Const pi = 3.141593
Xc = Picture1.ScaleWidth/2
Yc = Picture1.ScaleHeight/2
kx = Picture1.Width / (2 * pi) ‘ H s giãn đồ th theo trc x
ky = Picture1.Height / 2 H s giãn đồ th theo trc y
For i = -pi To pi Step 0.2
Giáo trình Visual Basic 6.0 94
Nguyn Đăng Quang
Picture1.Line -(Xc + kx * i, Yc - ky * Sin(i))
Next I
Ví d 4: V đồ th hàm s theo cn trái, cn phi và s mu v
Dim Count As Integer, xLeft As Integer, xRight As Integer
Dim nStep As Single
pi = 3.141593
Picture1.Cls
Count = Val(txtCnt.Text)
xLeft = Val(txtFrom.Text)
xRight = Val(txtTo.Text)
nStep = (xRight - xLeft) / Count
With Picture1
kx = .ScaleWidth / (xRight - xLeft)
ky = .ScaleHeight / 2
.CurrentX = kx * xLeft
.CurrentY = -ky * Sin(xLeft)
End With
For i = xLeft To xRight Step nStep
Picture1.Line -(kx * i, -ky * Sin(i)), vbRed
Next i
Circle [Step] (x, y), radius, color, start, end [,aspect]
V đường tròn, ellipse hoc mt cung tròn, ellipse
Trong đó:
(x,y) Ta độ tâm, khi có Step thì có ý nghĩa là độ di so vi ta độ hin ti
radius Bán kính
Color Màu nét v. C nét v qui định bi thuc tính DrawStyle
Start Góc đầu (radian)
End Góc cui (radian)
Aspect S dương, thc hoc nguyên dùng qui định t l v 2 trc.
Aspect > 1: Ellipse kéo dài theo trc X
Aspect < 1: Ellipse kéo dài theo trc Y
Ví d :
- V hình tròn vi nét v có c 3 pixel, vin màu xanh, tô màu vàng
With Pict1
.DrawWidth = 3
.FillStyle = vbFSSolid
Giáo trình Visual Basic 6.0 95
.FillColor = vbYellow
.Circle (1200, 1200), 1000, vbGreen
End With
- V Ellipse đặc, bán kính trc Y là 500, trc X là 250
With Pict1
.FillStyle = 0
.Circle (1000,1000), 500, , , , 2
End With
- V Ellipse đặc, bán kính trc Y là 250, trc X là 500
With Pict1
.FillStyle = 0
.Circle (1000,1000), 500, , , , 1/2
End With
Để đơn gin hoá lnh v Ellipse có th định nghĩa th tc v Ellipse như sau:
Sub Ellipse(X As Single, Y As Single, RadiusX As Single, RadiusY As Single)
Dim ratio As Single, radius As Single
ratio = RadiusY / RadiusX
If ratio < 1 Then
radius = RadiusX
Else
radius = RadiusY
End If
Circle (X, Y), radius, , , , ratio
End Sub
- V mt cung 1/4 đưng tròn:
Const PI = 3.141593
Circle (ScaleWidth / 2, ScaleHeight / 2), 1500, vbBlack, 0, PI / 2
- V Pie slice:
Const PI = 3.141593
FillStyle = vbFSSolid
FillColor = vbBlue
Circle (ScaleWidth / 2 + 200, ScaleHeight / 2 - 200), 1500, vbBlack, -(PI * 2), -
(PI / 2)
FillColor = vbCyan
Giáo trình Visual Basic 6.0 96
Nguyn Đăng Quang
Circle (ScaleWidth / 2, ScaleHeight / 2), 1500, vbBlack, -(PI / 2), -(PI * 2)
Hình 9.3: V PieSlice
3. Các thuc tính qui định đơn v v
ScaleMode Qui định đơn v v, có các giá tr
0 - User: Đơn v v do ngưi dùng định nghĩa
1 - Twip: 1440 twips = 1’’, 567 twips = 1 cm (Đơn v mc định)
2 - Point: 72 = 1’’
3 - Pixel: Đơn v đim trên màn hình
4 - Character: Tính theo đơn v ký t. Theo chiu ngang mi đơn v bng
120 twip, theo chiu dc mi đon v bng 240 twip
5 - Inch
6 - Milimeter
7 - Centimeter
ScaleHeight,
ScaleWidth
Qui định đơn vnh theo ScaleMode.
ScaleLeft,
ScaleTop
Qui định li trc ta độ trên PictureBox. Giá tr mc định là (0,0).
Ví d:
Mun di trc ta độ đến (50,50). Đặt ScaleLeft = -50, ScaleTop = -50
d : V đồ th hàm s trên form bng cách di h trc to độ s dng các thuc
tính ScaleLeft, ScaleTop.
Vùng cn v trên mt phng X-Y
Const XMIN = -5, XMAX = 5, YMIN = -100, YMAX = 100
Const XSTEP = 0.01
Private Sub Form_Resize()
' T động điu chnh vùng v khi kích thưc form thay đổi
ScaleLeft = XMIN
ScaleTop = YMAX
Giáo trình Visual Basic 6.0 97
ScaleWidth = XMAX - XMIN
ScaleHeight = -(YMAX - YMIN)
' V li
Refresh
End Sub
Private Sub Form_Paint()
Dim x As Single, y As Single
Cls
ForeColor = vbBlack
CurrentX = ScaleLeft
CurrentY = ScaleTop
Print "f(x) = x ^ 3 - 2 * x ^ 2 + 10 * x + 5"
CurrentX = ScaleLeft
Print "X-interval: [" & XMIN & "," & XMAX & "]"
CurrentX = ScaleLeft
Print "Y-range: [" & YMIN & "," & YMAX & "]"
' V h trc x- y
Line (XMIN, 0)-(XMAX, 0)
Line (0, YMIN)-(0, YMAX)
' V đồ th vi nét v màu đỏ
ForeColor = vbRed
For x = XMIN To XMAX Step XSTEP
y = x ^ 3 - 2 * x ^ 2 + 10 * x + 5
PSet (x, y)
Next
End Sub
4. c lnh ghi np nh
- m LoadPicture np tp tin nh t dĩa và trình bày trong PictureBox.
Dng Picture1.Picture = LoadPicture(<Tên tp tin>)
Ví d:
Picture1.Picture = LoadPicture(“C:\Window\setup.bmp”)
Lnh SavePicture lưu nh trên PictureBox lên dĩa thành tp tin. nh luôn được
lưu dng Bitmap
Dng SavePicture Picture1.Image, <Tên tp tin>
Ví d:
SavePicture Picture1.Image, “MyPic.bmp”
Giáo trình Visual Basic 6.0 98
Nguyn Đăng Quang
II. X LÝ MOUSE
X lý Mouse bao gm vic viết lnh để x lý cho các s kin sau:
- S kin bm phím mouse
Private Sub MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
- S kin di chuyn mouse
Private Sub MouseMove(Button As Integer, Shift As Integer, X As Single, Y As
Single)
- S kin nh phím mouse
Private Sub MouseUp(Button As Integer, Shift As Integer, X As Single, Y As
Single)
Ý nghĩa ca các tham s:
Button Cho biết nút trên mouse đang đưc bm, các giá tr
sau:
1 - vbLeftButton: Nút trái
2 - vbRightButton: Nút phi
4 - vbMiđleButton: Nút gia
Shift Giá tr cho biết trng thái các phím Shift, Ctrl Alt khi
xy ra s kin Mouse. Có các giá tr sau:
1 - vbShiftMask: Bm Shift
2 - vbCtrlMask: Bm Control
4 - vbAltMask: Bm Alternate
X,Y Ta độ hin ti trên đối tưng
Lưu ý:
Trng thái ca các phím t hp được tính như sau:
Giá tr
nh phân
Tr thp
phân
Hng Ý nghĩa
001 1 vbShiftMask Bm phím SHIFT
010 2 vbCtrlMask Bm phím CTRL
100 4 VbAltMask Bm phím ALT
011 3 vbShiftMask + vbCtrlMask Bm t hp phím SHIFT+CTRL
101 5 vbShiftMask + vbAltMask Bm t hp phím SHIFT+ALT
Giáo trình Visual Basic 6.0 99
110 6 vbCtrlMask + vbAltMask CTRL+ALT
111 7 vbCtrlMask + vbAltMask +
vbShiftMask
Bm t hp phím SHIFT+
CTRL+ALT
Quan h gia các s kin MouseDown, MouseUp, MouseMove vi Click
DblClick như sau:
Sư kin Click xy ra sau chui s kin MouseDown...MouseUp
Khi người dùng DbClick trên đối tưng, chui s kin sau xy ra: MouseDown,
MouseUp, Click, MouseMove, DblClick, MouseUp, MouseMove
Ví d 1: Xét s kin bm phím khi di chuyn chut
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As
Single)
If Button = 1 Then
Print "You're pressing the left button."
ElseIf Button = 2 Then
Print "You're pressing the right button."
ElseIf Button = 3 Then
Print "You're pressing both buttons."
End If
End Sub
Ví d 2: Xét phím đuc bm kèm vi s kin bm phím chut
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
Select Case Shift
Case 1 ' or vbShiftMask
Print "You pressed the SHIFT key."
Case 2 ' or vbCtrlMask
Print "You pressed the CTRL key."
Case 4 ' or vbAltMask
Print "You pressed the ALT key."
Case 3
Print "You pressed both SHIFT and CTRL."
Case 5
Print "You pressed both SHIFT and ALT."
Case 6
Print "You pressed both CTRL and ALT."
Case 7
Print "You pressed SHIFT, CTRL, and ALT."
Giáo trình Visual Basic 6.0 100
Nguyn Đăng Quang
End Select
End Sub
Thuc tính DrawMode qui định chế độ ca bút v, gm các hng có ý nghĩa như sau:
Hng Giá
tr
Hot động Phép toán
(S=Screen, P=Pen)
vbBlackness
1 Màu nn = 0 (Đen), màu bút v không có
tác dng
S = 0
vbNotMergePen
2 Thc hin phép OR trên màu bút v
màu nn ri đảo các bit kết qu bng
phép NOT
S = Not (S Or P)
vbMaskNotPen
3 Đảo màu bút v bng phép NOT ri
AND vi màu nn.
S = S And Not P
vbNotCopyPen
4 Đảo màu bút v S = Not P
vbMaskPenNot
5 Đảo màu nn bng phép NOT ri AND
vi màu bút v.
S = Not S And P
vbInvert
6 Đảo màu nn, màu bút v không có tác
dng
S = Not S
vbXorPen
7 Thc hin phép XOR trên màu bút v
màu nn
S = S Xor P
vbNotMaskPen
8 Thc hin phép AND trên màu bút v
màu nn ri đảo màu kết qu bng phép
NOT
S = Not (S And P)
vbMaskPen
9 Thc hin phép AND trên màu bút v
màu nn
S = S And P
vbNotXorPen
10 Thc hin phép XOR trên màu bút v
màu nn ri đảo màu kết qu bng phép
NOT
S = Not (S Xor P)
vbNop
11 Tt chế độ v S = S
vbMergeNotPen
12 Đảo màu bút v ri OR kết qu vi màu
nn
S = S Or Not P
vbCopyPen
13 Màu bút v S = P
vbMergePenNot
14 Đảo màu nn ri OR kết qu vi màu bút
v
S = Not S Or P
vbMergePen
15 Thc hin phép OR gia màu bút v
màu nn
S = S Or P
d 1: Viết chương trình v t do bng mouse. Chế độ v bt đầu khi bm phím trái
ri di chuyn. Kết thúc chế độ v khi nh phím trái
Giáo trình Visual Basic 6.0 101
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
If Button=1 then
Pict1. CurrentX = X
Pict1.CurrentY = Y
End if
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As
Single)
If Button = 1 Then Pict1. Line -(X, Y)
End Sub
d 2 : Viết chương trình v t do bng mouse trên form, màu nét v đưc chn
ngu nhiên. Cách v Click để c định đim đầu, o để c định kích thưc
nh mouse để xác định hình; nếu click phím trái thì v hình ch nht, click phím phi
thì v hình ch nht có tô màu bên trong
' Biến toàn cc ca form
Dim X1 As Single, X2 As Single
Dim Y1 As Single, Y2 As Single
' Biến xác định chế độ v, có giá tr True nếu đang v
Dim dragging As Boolean
Private Sub Form_Load()
' Xoá nn form thành màu đen
BackColor = vbBlack
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If (Button=1) or (Button=2) Then
dragging = True
' Ghi li to độ bt đầu
X1 = X: Y1 = Y: X2 = X: Y2 = Y
' Chn màu v ngu nhiên
ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
DrawWidth = Rnd * 3 + 1
DrawMode = vbXorPen
' Vnh ch nht
Line (X1, Y1)-(X2, Y2), , B
If Button = 2 Then Nếu là phím phi thì tô hình
Giáo trình Visual Basic 6.0 102
Nguyn Đăng Quang
FillStyle = vbFSSolid
FillColor = ForeColor
End If
End If
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If dragging Then
' Xoá hình cũ
Line (X1, Y1)-(X2, Y2), , B
' V hình mi
X2 = X: Y2 = Y
Line (X1, Y1)-(X2, Y2), , B
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If dragging Then
dragging = False
DrawMode = vbCopyPen
Line (X1, Y1)-(X, Y), , B
FillStyle = vbFSTransparent
End If
End Sub
Giáo trình Visual Basic 6.0 103
Chương 10
Menu – Common Dialog
I. MENU
V cu trúc, menu mt danh sách mc chn, mi mc chn là mt đối tưng.
H thng menu mt danh sách đối tượng đưc t chc phân cp. Cp trên
cùng menu thanh (bar), cp kế tiếp là menu kéo xung (PullDown), trong menu
kéo xung li có th có nhng menu con cp thp hơn…
1. Định nghĩa Menu
Để định nghĩa menu thc hin như sau:
- Bm t hp phím CTRL-E,
hoc
- Nút Menu Editor trên thanh công c,
Hin hp thoi Menu Editor xut hin như hình 10.1.
Hình 10.1: Hp thoi Menu Editor
Hp thoi Menu Editor gm 3 phn:
Giáo trình Visual Basic 6.0 104
Nguyn Đăng Quang
- Phn trên cùng: Các thuc tính ca mt mc chn. Các thuc tính này phi
được xác định khi định nghĩa mi 1 mc chn.
- Phn các nút lnh.
- Phn danh sách các mc chn đã định nghĩa.
Các thuc tính ca mt mc chn này đưc tóm tt trong bng sau:
Thuc tính Ý nghĩa
Caption Tên mc chn Menu, có th định nghĩa Hotkey .
S dng ký t “-“ cho vch phân cách trên menu
Name Tên trong chương trình, thường bt đầu bng mnu
Index Đánh ch s nếu s dng mng mc chn
Shortcut Định nghĩa t hp pm tt
Checked Mc chn thuc loi chn, b chn
Enabled Cho phép/Không cho phép hot động
Visible Xut hin/Không xut hin mc tương ng trên menu
WindowList Menu cha danh sách các form đang m trong chương trình
(ng dng MDI)
- Mi mc chn trên menu đưc định nghĩa bng cách nhp các thuc tính
Name, Caption, Shortcut... Giá tr Caption xut hin trong danh sách mc
chn phía dưới ca Menu Editor. Sau khi nhp đầy đủ các thuc tính, bm
nút Next để định nghĩa mc chn kế tiếp.
- Danh sách mc chn định nghĩa trình bày theo ct. Mc chn ct ngoài
ng bên trái tương ng vi các mc chn trên menu bar. Mc chn ct
kế tiếp tương ng vi các mc chn trên menu kéo xung, ct kế tiếp na
tương ng vi các mc chn trên menu cp thp hơn ... S dng các nút
để chuyn mt mc chn lên (xung) cp menu tương ng. S dng các
nút  để thay đối th t các mc chn trên menu.
- Nút Insert chèn thêm mt mc chn.
- Nút Delete xoá mt mc chn.
2. Viết lnh
- Click vào mc chn cn định nghĩa lnh, khai báo ca th tc x s
kin tương ng s xut hin trong ca s lnh
Private sub Tênmenu_click()
End sub
- Nhp lnh định nghĩa cho mc chn bên trong th tc x lý s kin.
Lưư ý:
Giáo trình Visual Basic 6.0 105
- Khi nhiu mc chn trên menu cùng cp, th định nghĩa mng mc
chn để thun tin cho vic x lý lnh. Khi định nghĩa mng mc chn cn
lưu ý các mc chn s được định nghĩa cùng tên, gán thuc tính Index liên
tiếp cho mi mc chn.
d: Định nghĩa menu chn chế độ v trong chương trình v hình, các chế độ v
được định nghĩa là mng mnuDraw vi ch s liên tiếp (0,1,2) hoc (1,2,3)
Th tc x lý s kin khi đó có dng:
Private Sub mnuDraw_Click(Index As Integer)
DrMode = Index Chn chế độ v
End Sub
- Khi mng mc chn hot động theo nhóm (kiu nút chn Options), s dng
thêm thuc tính checked để hiu giá tr đang chn viết thêm lnh
đồng b hot động ca các mc này. Đon lnh sau đồng b hot động ca
các mc chn hot động theo nhóm.
Private Sub mnuDraw_Click(Index As Integer)
For i = 1 To mnuDraw.Count
mnuDraw(i).Checked = False Uncheck tt c các mc chn
Next
MnuDraw(Index).Checked = True ‘ Check mc chn
DrMode = Index
End Sub
c. Menu Popup
loi menu đưc kích hot khi ngưi s dng bm phím phi chut trên mt đối
tưng. Menu popup th mt menu độc lp được thiết kế bng Menu Editor,
nó cũng có th là mt menu thành phn trong h thng menu đã đưc thiết kế bng
Menu Editor. Để làm xut hin menu Popup, s dng phương thc PopupMenu
<Menu>
Trong đó tham s <menu> là tên ca menu Popup
Ví d: Làm xut hin menu popup khi bm phím phi chut trên listbox
Private Sub List1_MouseDown(Button As Integer, Shift As Integer,
X As Single, Y As Single)
If Button And vbRightButton Then PopupMenu mnuListPopup
End Sub
Giáo trình Visual Basic 6.0 106
Nguyn Đăng Quang
II. COMMON DIALOG
mt lp hp đối thoi thưng đưc s dng trên các ng dng chy trên
windows. Các loi hp thoi này gm:
- Hp thoi thao tác trên tp tin: File Open, File Save,
- Hp thoi định dng font ch : Chn kiu ch, kiu ng ch, c ch...,
- Hp thoi chn màu,
- Hp thoi in n.
Common Dialog được cha trong h thng dưi dng ActiveX Control, th
được gi s dng trong các ng dng viết trên windows. Để th s dng đối
tưng này, cn np lên ToolBox..
Để np đối tượng lên ToolBox thc hin như sau:
- Chn Project/Components hoc bm Ctrl-T, xut hin Dialog Components.
- Trong listbox Control, chn Microsoft Common Dialog Control
- Bm nút Apply, biu tượng xut hin trên Toolbox
Để đưa vào chương trình:
- Double-Click để đặt đối tượng lên form
Để làm xut hin hp thoi trong chuơng trình, s dng các phương thc tương
ng sau:
Tên phương thc Ý nghĩa
ShowOpen Xut hin hp đối thoi open file
ShowSave Xut hin hp đối thoi Save
ShowColor Xut hin hp đối thoi chn màu
ShowFont Xut hin hp đối thoi chn font
ShowPrinter Xut hin hp đối thoi in
1. Hp đối thoi Open, Save
Thuc tính Ý nghĩa
DialogTitle Tiêu đề Dialog.
InitDir Đường đẫn thư mc đầu tiên xut hin trong Dialog
FileName Gán hoc ly tên tp tin đưc chn (đầy đủ đường dn)
FileTitle Tên tp tin không có đưng dn
Filter Chui cha các loi tp tin được trình bày trong Dialog.
Ví d: Text (*.txt)|*.txt|Pictures (*.bmp;*.ico)|*.bmp;*.ico
FilterIndex Ch s qui định loi tp tin được chn đầu tiên khi trình bày
dialog (Loi đầu tiên có Index=1)
DefaultExt Chui ký t qui định phn m rng mc định
CancelError True/False: Gây li h thng khi người dùng bm nút Cancel
Giáo trình Visual Basic 6.0 107
flags Thuc tính tùy chn tính cht ca hp thoi, có các giá tr:
cdlOFNReadOnly – Đặt tùy chn ch đọc khi m tp tin
cdlOFNAllowMultiselect – Cho phép chn nhiu tp tin
cdlOFNHideReadOnly – B nút chn Read-Only trên hp thoi
Ví d 1: Viết lnh x lý s kin click mc chn Open trên menu
Private Sub mnuOpen_Click()
On Error GoTo ErrorOpen
With CmDlg
.InitDir = "C:\"
.Filter = "Text (*.txt)|*.txt|Pictures (*.bmp;*.ico)|*.bmp;*.ico"
.FilterIndex = 2
.CancelError = True
.ShowOpen
...
End With
ErrorOpen:
End Sub
Hình 10.2: Hp thoi Open
Ví d 2 : Viết lnh x lý s kin click mc chn Save trên menu
Private Sub mnuSave_Click()
On Error GoTo ErrorOpen
With CmDlg
.InitDir = "C:\"
.Filter = "Text (*.txt)|*.txt|Pictures (*.bmp;*.ico)|*.bmp;*.ico"
.FilterIndex = 2
Giáo trình Visual Basic 6.0 108
Nguyn Đăng Quang
.CancelError = True
.ShowSave
...
End With
ErrorOpen:
End Sub
2. Hp thoi chn màu
Cho phép người s dng chn màu hoc định nghĩa thêm mt màu tùy chn ngoài
các màu có sn ca h thng.
Để m hp thoi chn màu, s dng phương thc ShowColor. Hp thoi chn
màu xut hin dng như hình bên
Để th chn đưc nhiu màu hơn hoc định nghĩa
màu tùy ý người s dng phi bm nút Define Custom
Colors để m thêm bng bên phi (Hình 10.3). Trong
chương trình có th thc hin điu này bng cách gán giá
tr cdlCCFullOpen cho thuc tính Flags như sau:
With Cmdlg
.Flags = cdlCCFullOpen
.ShowColor
End with
nh 10.3: Hp thoi chn màu đầy đủ
Giá tr màu chn sau khi người s dng bm nút OK được ly thông qua thuc
tính color.
Giáo trình Visual Basic 6.0 109
Chương 11
Kiu bn ghi – Tp tin
I. KIU BN GHI
1. Định nghĩa:
Là kiu d liu gm nhiu thành phn gi vùng/trưng (Fields), mi thành phn
dùng t mt đặc đim ca đối tượng. Bn ghi được s dng để lưu tr các đối
tưng mà mô t v đối tượng đó cn nhiu thông tin.
2. Khai báo:
Type <Tên>
<Vùng 1> As <Kiu>
<Vùng 2> As <Kiu>
...
End Type
Ví d:
Type Sinhvien
Hoten As String*25
Phai As Byte
DiemToan As Single
DiemLy As Single
DiemHoa As Single
End Type
khai báo biến:
Dim SV As Sinhvien
Lưu ý:
Khai báo Type phi được viết trong tp tin module.
II. TP TIN
1. Định nghĩa:
đối tưng đưc s dng để lưu tr d liu trên b nh ngoài.
2. Phân loi:
Theo cách truy xut, có 2 loi tp tin:
Giáo trình Visual Basic 6.0 110
Nguyn Đăng Quang
Tp tin truy xut ngu nhiên (Random Access File): Là tp tin cho phép đọc
hoc ghi v trí bt k trên file. D liu ghi trên tp tin truy xut ngu
nhiên được t chc thành các mu tin (Record) có kích thưc ging nhau.
Tp tin truy xut tun t (Sequential Access File): D liu ghi lên tp tin có
kích thước mi phn t không ging nhau, để phân bit các phn t vi
nhau, s dng ký hiu phân cách gia các phn t.
3. Th tc truy xut d liu trên tp tin:
Vic truy xut trên tp tin được thc hin thành 3 bưc:
M tp tin
Truy xut (Đọc/Ghi)
Đóng tp tin
4. c lnh trên tp tin truy xut ngu nhiên
Lnh Open <Đưng dn> For Random As #n Len= <RecLen>
M tp tin để đọc hoc to mi.
Trong đó:
<Đường dn> Chui ký t đưng dn tên tp tin
n S th t tên tp tin m, giá tr này là s nguyên duy nht đối vi
mi tp tin, tp tin m đầu tiên giá tr là 1. Để ly s th t
ca tp tin có th m kế tiếp, s dng hàm freefile()
<Reclen> Kích thưc mi phn t
Lưu ý:
Để tính kích thước ca mt kiu d liu, s dng hàm Len(<Tên>). Trong đó
<Tên> là tên ca mt biến.
Ví d:
Type Sinhvien
Hoten As String*25
Phai As Byte
DiemToan As Single
DiemLy As Single
DiemHoa As Single
End Type
Dim sv As SinhVien
Dim fnum As Integer
fnum = freefile() ‘ Ly s th t tp tin m kế tiếp
Open “Thu.dat” for Random As #fnum Len = Len(sv)
Giáo trình Visual Basic 6.0 111
Lnh Put #n, [<V trí>], <Biến>
Ghi giá tr ca <Biến> lên tp tin ti <V trí>
Ví d:
Type Record
ID As Integer
Name As String * 20
End Type
Dim MyRecord As Record, RecordNumber
Dim fnum As Integer
fnum = freefile()
' M file.
Open "TESTFILE" For Random As #fnum Len = Len(MyRecord)
For RecordNumber = 1 To 5
MyRecord.ID = RecordNumber
MyRecord.Name = "My Name" & RecordNumber
Put #1, RecordNumber, MyRecord ' Ghi record lên file
Next RecordNumber
Close #1 ' Đóng file.
Lưu ý:
- V trí các mu tin trên tp tin có th t bt đầu t 1.
- Mu tin ghi lên tp tin phi có chiu dài đúng bng chiu dài khai báo khi
m tp tin. Trường hp ghi mu tin kích thước nh hơn, vb t động đin
cho đủ (vi các giá tr ngu nhiên). Trưng hp ngưc li s cho thông báo
li.
- Không th ghi đối tượng lên tp tin.
- Tham s v trí tu chn, khi không tham s này, d liu s được ghi
vào kế sau mu tin va truy xut.
- Mun ghi d liu vào cui tp tin, cho giá tr ca <v trí> ln hơn s mu
tin hin trong tp tin. d sau m ghi d liu vào cui tp tin bng
cách s dng m LOF
Type Record
ID As Integer
Name As String * 20
End Type
Dim MyRecord As Record, RecCount
Dim fnum As Integer, fsize As long
Dim recsize As Integer
fnum = freefile()
Giáo trình Visual Basic 6.0 112
Nguyn Đăng Quang
recsize = Len(MyRecord)
' M file.
Open "TESTFILE" For Random As #fnum Len = recsize
fsize = LOF(fnum) ‘ Ly kích thước tp tin
RecCount = fsize \ recsize ‘ Tính s mãu tin
MyRecord.ID = RecCount+1
MyRecord.Name = "My Name" & RecCount
Put #fnum, RecordNumber, MyRecord
Close #fnum
Lnh Get #n, [<V trí>], <Biến>
Đọc t <v trí> n o <Biến> t tp tin. Lnh đọc o li khi <v trí> ln hơn s
mu tin hin có .
Ví d 1:
Type Record
ID As Integer
Name As String * 20
End Type
Dim MyRecord As Record, Position
' M file
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
Position = 3
Get #1, Position, MyRecord ' Đọc mu tin th 3
Close #1 ' Đóng file.
Ví d 2: Đọc tun t t tp tin
Type Record
ID As Integer
Name As String * 20
End Type
Dim MyRecord As Record
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
Do While Not EOF(1)
Get #1, , MyRecord
Debug.Print Myrecord.ID, MyRecord.Name
Loop
Close #1
Sa cha mt mu tin
Giáo trình Visual Basic 6.0 113
Để sa cha mt mu tin, thc hin các bước sau:
- Đọc mu tin cn sa cha bng lnh Get
- Sa cha mu tin vi giá tr mi
- Ghi lên tp tin ti v trí cũ bng lnh Put
Ví d:
Get #1, 2, MyRecord
MyRecord.Name = “New Name”
Put #1, 2, MyRecord
Lnh Close #n
Đóng tp tin
III. CÁC LNH TRÊN TP TIN VĂN BN
Lnh Open <PathName> For <Mode> As #n
Trong đó:
<PathName>: Chui ký t đường dn tên tp tin
<Mode>: Chế độ truy xut tp tin, gm:
Output To tp tin mi, nếu tên tp tin đã có trên dĩa, tp tin cũ b
xoá
Input M tp tin để đọc
Append M tp tin để viết thêm ni dung
n: S th t tên tp tin m, mi tp tin đưc m vi 1 s duy nht. Có giá tr 1-511
Ví d: M tp tin readme.txt để đọc
Dim fnum As Integer
fnum = FreeFile()
Open "readme.txt" For Input As #fnum
Lnh Print #n,<Danh sách biến>
<Danh sách biến>: Danh sách các biến mun ghi giá tr, s dng du ; gia các
biến, mi lnh in danh sách tr trên mt dòng.
Ví d: To tp tin văn bn có 10 dòng
Private Sub Command1_Click()
Open "F:\Test.txt" For Output As #1
For i = 1 To 10
Print #1, "Line " & i
Next
Close #1
End Sub
Giáo trình Visual Basic 6.0 114
Nguyn Đăng Quang
Lưu ý:
Du “;” cui danh sách biến s làm cho dòng được in không có t xung dòng
cui dòng
Để đọc tp tin ghi dng này, s dng lnh Input
Ví d: Th tc ghi Text File vi tu chn ghép thêm hoc to mi
Private Sub WriteTextFileContents(Text As String, filename As String,
Optional AppendMode As Boolean)
Dim fnum As Integer
fnum = FreeFile()
If AppendMode Then
Open filename For Append As #fnum
Else
Open filename For Output As #fnum
End If
Print #fnum, Text
Close #fnum
End Sub
Lnh Write #n,<Danh sách biến>
In giá tr các biến lên tp tin , giá tr được o bng du nháy kép “” , du phy
hiu phân cách các giá tr ghi.
d lnh Write #1, Maso, Hoten, Quoctich vi Maso, Hoten, Quoctich các
biến cha giá tr s cho kết qu ghi lên tp tin như sau:
“001”,” Tigana”,”Phap”
S dng lnh Input để đọc tp tin ghi dng y
Lnh input #n,<Biến chui>
Đọc tp tin văn bn ghi bng lnh Print #n, <Chui>
Ví d:
Tp tin to bng đon chương trình
Open "F:\Test.txt" For Output As #1
For i = 1 To 10
Print #1, "Line " & i
Next
Close #1
S được đọc như sau
Open "F:\Test.txt" For Input As #1
For i = 1 To 10
Giáo trình Visual Basic 6.0 115
Input #1, Line
Debug.Print Line
Next
Close #1
Lnh input #n,<Danh sách biến >
Đọc tp tin văn bn ghi bng lnh Write #n, <Danh sách biến>
Ví d:
Tp tin to bng đon chương trình
Open "C:\test.txt" For Output As #1
...
Write #1, txtMa.Text, txtHoten.Text, iCQT.Text
...
Close #1
S được đọc như sau
Open "C:\test.txt" For Input As #1
Do While Not EOF(1)
Input #1, Maso, Hoten, QT
Debug.Print Maso, Hoten, QT
Loop
Close #1
Lnh Line input #n,<Biến chui>
Đọc 1 dòng t văn bn (không k ký t xung dòng)
Ví d: Đọc d liu t tp tin văn bn
Private Sub Command1_Click()
Open "F:\Test.txt" For Input As #1
Do while not eof(1)
Line input #1, Line
St = St & Line & vbCRLF
Loop
Close #1
Text1.Text = St
End Sub
Hàm input (<bytenum>,#n)
Hàm đọc d liu t tp tin, kết qu tr v là mt chui. Nếu đọc t tp văn bn,
chui tr v gm tt c các ký hiu xung dòng.
Trong đó:
Giáo trình Visual Basic 6.0 116
Nguyn Đăng Quang
<bytenum> S byte mun đọc
n S th t tp tin
d: Định nghĩa m ReadTextFileContents đọc tp tin văn bn, d liu đọc
cha vào mt chui.
Function ReadTextFileContents(filename As String) As String
Dim fnum As Integer
' Ly s th t tp tin m kế tiếp
fnum = FreeFile()
Open filename For Input As #fnum
' Đọc toàn b ni dung file bng mt lnh
ReadTextFileContents = Input(LOF(fnum), fnum)
Close #fnum
End Function
Np tp tin Bootlog.txt vào textbox
Text1.Text = ReadTextFileContents("c:\bootlog.txt")
Ví d: Đọc tp tin văn bn vào listbox
Sub TextFileToListbox(lst As ListBox, filename As String)
Dim items() As String, i As Long
' Đọc ni dung file ri s dng hàm split để chuyn các dòng
‘ vào mng chui
items() = Split(ReadTextFileContents(filename), vbCrLf)
' Np các chui khác rng vào ListBox.
For i = LBound(items) To UBound(items)
If Len(items(i)) > 0 Then lst.AddItem items(i)
Next
End Sub
Lưu ý:
Hàm Split(<chui>,<Ký hiu>[,<s chui con>]) cho g tr mt mng chui
con được trích ra t <chui> vi hiu phân ch đưc cho trong tham s <
hiu> , tham s th ba qui định s chui con mun trích ra.
Giáo trình Visual Basic 6.0 117
Chương 12
Microsoft Windows Common Controls
Imagelist - Listview - Imagecombo
Windows Common Controls là tên gi chung ca các loi đối tượng điu khin ch
trong Windows 9x. Các đối tượng này cha trong thư vin Microsoft Windows
Common Controls. S dng phương pháp đã t chương trước để np đối
tưng lên Toolbox .
I. IMAGELIST
Đối tượng được s dng để qun mt mng hình nh hay danh sách hình nh.
Danh sách hình nh đưc s dng trong c ng dng cn to các hiu ng hình
hnh động hoc s dng kết hp vi các đối tượng điu khin khác có s dng
hình nh như Listview, ImageCombo...
S dng ImageList
- Nhp đúp biu tưng ImageList trên ToolBox để đặt ImageList lên form
- Nhp phím phi trên biu tưng ImageList trên form
- Chn Properties trên menu xut hin hp thoi Property Pages, chn th
Images
- Bm nút Insert Picture để chn c hình (*.BMP, *.ICO) đưa o danh sách
hình nh.
Thuc tính Index ch th t ca hình trong danh sách, giá tr này đưc t động gán
cho mi hình
Thuc tính ImageCount cho biết tng s hình hin trong danh sách, giá tr này
được t động tăng lên khi có mt hình mi được chèn thêm vào danh sách
Bm nút Remove Picture để xoá 1 hình trong danh sách.
II. LISTVIEW
đối tượng điu khin được s dng để trình bày danh sách đối tượng. Các đối
tưng trong Listview có th trình bày theo nhiu kiu khác nhau.
Giáo trình Visual Basic 6.0 118
Nguyn Đăng Quang
1. Các thuc tính
View: Thay đổi cách trình bày các đối tượng trong listview, có các giá tr như sau:
Hng Giá tr Ý nghĩa
lvwIcon 0 Trình bày đối tượng bng icon ln vi nhãn phía dưi
lvwSmallIcon 1 Các đối tượng được trình bày bng icon nh, nhãn phía
bên phi, các đối tượng được lit kê theo chiu ngang
lvwList 2 Các đối tưng đưc trình bày bng icon nh, nhãn phía
bên phi, các đối tượng được lit kê theo chiu dc
lvwReport 3 c đối tưng đưc trình y bng icon nh vi nhãn
ct đầu tiên, các thông tin khác v đối tượng được trình
bày trong các ct kế tiếp
Thay đổi chế độ trình bày ca Listview bng lnh trên menu
Private Sub mnuLarge_Click()
ListView1.View = lvwIcon
End Sub
Private Sub mnuList_Click()
ListView1.View = lvwList
End Sub
Giáo trình Visual Basic 6.0 119
Private Sub mnuRpt_Click()
ListView1.View = lvwReport
End Sub
Private Sub mnuSmall_Click()
ListView1.View = lvwSmallIcon
End Sub
GridLine (True/False): K đưng lưi trong chế độ ReportView
FullRowSelect (True/False): Phn t chn được highlight c dòng.
MultiSelect (True/False): Qui định thuc tính cho phép chn nhiu
CheckBoxes: (True/False): Cóï/ không có checkbox
Text: Nhãn/giá tr ct đầu tiên trong listview khi chế độ Report
LabelEdit :(0-lvwAutomatic, 1-lvwmanual) Qui định nhãn đối tưng (text) th
sa cha trc tiếp trên listview khi người dùng Click trên nhãn
Các thuc tính t trên th chn trc tiếp trong Property Pages/General ca
Listview (bm phím phi mouse)
ListItems: Thuc tính quan trng nht, cha danh sách các phn t được trình bày
trong listview. Mi phn t là mt đối tưng kiu ListItem. Cách truy xut các
phn t trong listItems cũng ging như mng
Ví d:
With lvw
For i = 1 to .ListItems.Count
Debug.Print .ListItems(i).Text
Next
End with
SelectedItem: Cho giá tr đối tưng ListItem đang được chn trong Listview
hoc dùng chn mt phn t trong Listview
- Chn phn t đầu tiên trong listview
Set lvw.SelectedItem = lvw.ListItems(1)
- Ly giá tr phn t đang được chn
Dim Item as ListItem
Set Item = lvw.SelectedItem
ImageList: Tham chiếu đến đối tương ImageList qun danh sách hình s dng
trong Listview
Để định nghĩa danh sách hình cho Listview, s dng th Image Lists trong
Property Pages ca Listview
Mi Listview có th liên kết vi 3 loi danh sách hình:
Giáo trình Visual Basic 6.0 120
Nguyn Đăng Quang
- Normal : danh sách hình để xem listview dng Large Icon - Kích thưc
mc định ca biu tượng là 32x32
- Small : danh sách hình để xem listview dng Small Icon.- Kích thước
mc định ca biu tượng là 16x16
- Column Header: danh sách hình s dng cho dòng tiêu đề ct - Kích thưc
mc định ca hình là 16x16
Như vy khi viết ng dng s dng Listview thì các danh sách hình phi đưc
định nghĩa trước ri mi được liên kết vi Listview bng th Image Lists như hình
trên.
2. Các thuc tính ca đối tượng ListItem
Thuc tính Ý nghĩa
Text Chui t t đối tưng, nhãn đi kèm vi biu tượng trong
listview, cũng chính là ni dung ct đầu tiên trong chế độ Report
Index Ch s ca phn t trong mng ListItems
Key Chui ký t duy nht xác định phn t trong danh sách ListItems
Icon,
SmallIcons
Gán hoc ly ch s ca nh (index) tương ng trong danh sách
hình (Imagelist) liên kết vi listView.
Ví d: lvw.ListItems(5).SmallIcons=1
Selected (True/False): Cho biết phn t được chn trong Listview hay
không
SubItems Mng chui cha các thông tin khác ca đối tưng, c thông tin
này được trình bày trong chế độ Report, s phn t ca mng phi
tương ng vi s ct trong listview
Ghosted (True/False) Làm m icon ca phn t trong listview
ColumnHeaders: Thuc tính qun lý danh sách ct trong Listview khi s dng
chế độ Report view. Mi ct mt đối tưng kiu ColumnHeader. Cách truy
xut các ct trong ColumnHeaders cũng ging như truy xut các phn t trong
ListItems. Mt s phương thc cũng được áp dng chung cho c hai đối tưng.
Ví d:
In danh sách các ct trong Listview chế độ report
With lvw
For i = 1 to .ColumnHeaders.Count
Debug.Print .ColumnHeaders(i).Text
Next
End with
3. Các phương thc
Giáo trình Visual Basic 6.0 121
Add <Danh sách tham s>
Thêm 1 phn t vào danh sách ListItems hoc ColumnHeaders.
Dng áp dng cho ListItems:
Add [Index][, Key][, Text][, Icon][, SmallIcon]
Trong đó:
Index V trí thêm, nếu không có : thêm vào cui danh sách
Key Khoá ca phn t thêm
Text Giá tr thêm
Icon Biu tượng ln
SmallIcon Biu tượng nh
Ví d 1: Thêm 5 giá tr vào ListItems không s dng Icon
For i = 1 to 5
Listview1.ListItems.Add , , “Item No. “ & i
Next
Ví d 2:Thêm các giá tr vào listview s dng c Icons và SmallIcons
With ListView1.ListItems
.Add , , "Brazil", 1, 1
.Add , , "Italia", 2, 2
.Add , , "Japan", 3, 3
.Add , , "Usa", 4, 4
End with
Dng áp dng cho ColumnHeaders:
Add [Index][, Key][, Text][, Width][,Alignment]
Trong đó:
Index V trí thêm, nếu không có : thêm vào cui danh sách
Key Khoá ca ct thêm
Text Tiêu đề ct
Width B rng ct
Alignment Chế độ canh l ct
Ví d 1: Thêm 2 ct Name, Phone vào Listview vi các độ rng 1400, 1500
With ListView1.ColumnHeaders
.Add , , “Name”, 1400
.Add , , “Phone”, 1500
End with
d 2: To mt listview chế độ Report 3 ct vi tiêu đề Col 1, Col 2, Col 3
thêm vào đó 10 phn t
Giáo trình Visual Basic 6.0 122
Nguyn Đăng Quang
Private Sub Form_Load()
Dim clm As ColumnHeader
Dim itm As ListItem
Dim i As Integer
For i = 1 To 3
Set clm = ListView1.ColumnHeaders.Add()
clm.Text = "Col " & i
Next i
For i = 1 To 10
Set itm = ListView1.ListItems.Add()
itm.SmallIcon = 1
itm.Text = "ListItem " & i
itm.SubItems(1) = "Subitem 1"
itm.SubItems(2) = "Subitem 2"
Next i
End Sub
Chương trình khi chy s có dng như hình 12.1
Hình 12.1: Form chương trình ví d 2
FindItem(String, Val
ms, th qui định vic tìm kiếm được
ue, Index, Match)
Tìm kiếm 1 giá tr trong danh sách ListIte
thc hin trên thuc tính text, subitems . Phương thc cho giá tr là tham chiếu đến
đối tượng ListItem tìm thy. Trong đó:
String Giá tr cn tìm
Value Qui định loi thuc tính tìm kiếm
ext (*) lvwText - 0 : Tìm trên thuc tính T
lvwSubItem - 1: Tìm trên SubItem
Index hui, ý nghĩa là Key, khi là Có th 1 chui hoc 1 s. Khi c
s, có ý nghĩa là Index. Dùng để qui định v trí bt đầu tìm kiếm
Giáo trình Visual Basic 6.0 123
Match
vn (*)
Qui định phương thc tìm kiếm
lvwWholeWord - 0: Tìm t toàn
lvwPartial - 1: Tìm 1 phn
Ví d:
i có h là Nguyn Th trong danh sách:
)
tham chiếu đến đối tưng đầu tiên xut hin trong Listview
ti v trí Index
các phn t trong danh sách ListItems
object_ItemClick(ByVal Item As ListItem)
đại din cho đối tượng.
Tìm ngư
Set It = lvw.FindItem(“Nguyen Thi”, , ,lvwPartial
GetFirstVisible
Hàm cho giá tr
Remove Index
Xoá mt phn t
Clear
Xoá tt c
4. S kin
Private Sub
S kin xy ra khi click trên biu tưng hoc hình nh
Tham s ca th tc là đối tượng ListItem mà s kin xy ra trên đó
Ví d :
Private Sub lvw_ItemClick(ByVal Item As ListItem)
Lưu ý:
Item.Ghosted = Abs(Item.Ghosted) - 1
End Sub
Trên listview cũng có s kin click nhưng s kin này xy ra khi người
lumnheader As ColumnHeader)
đối
dùng click ti mt vùng bt k trên listview.
Private Sub object_ColumnClick(ByVal co
S kin xy ra khi click trên dòng tiêu đề ca listview. Tham s ca th tc
tưng ColumnHeader mà s kin xy ra trên đó.
Ví d: S dng thuc tính Sorted và Sortkey để sp xếp ni dung Listview theo ct
er)
mnHeader.Index - 1
End Su
AGECOMBO
ging ComboBox nhưng
uc tính quan trng nht, cha danh
sách các phn t đưc trình bày trong ComboItems. Mi
Private Sub lvw_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHead
lvw.Sorted = True
lvw.SortKey = Colu
b
III. IM
đ i tượng điu khin
thêm hình nh đi kèm.
1. Các thuc tính
ComboItems: Th
Giáo trình Visual Basic 6.0 124
Nguyn Đăng Quang
phn t mt đối tượng kiu ComboItem. Thuc tính này cũng ging như
ListItems ListItem trong Listview. Cách truy xut các phn t trong
ComboItems cũng ging như mng
Ví d:
With ImageCombo1
For i = 1 to .ComboItems.Count
i).Text
Select ho giá tr tham chiếu (reference) đến đối tượng ComboItem
Debug.Print .ComboItems(
Next
End with
edItem: C
đang đưc chn trong ImageCombo hoc dùng chn mt phn t trong
ImageCombo
Chn phn t đầu tiên trong ImageCombo
mbo1.ComboItems(1) Set ImageCombo1.SelectedItem =ImageCo
.SelectedItem
Image qun danh sách hình s dng
ImageCombo đưc định nghĩa bng Property Pages/General
t hin ch trng thái ch
c thuc tính ca đối tượng ComboItem
Ly giá tr phn t đang đưc chn
Dim icItem as ComboItem
Set icItem = ImageCombo1
List: Tham chiếu đến đối tương ImageList
trong ImageCombo
Danh sách hình cho
ca ImageCombo (Bm phím phi ri chn properties)
Locked: (True, False) Thuc tính qui định các giá tr xu
đọc
2. Cá
Thuc tính Ý nghĩa
Text Chui ký t giá tr xut hin trong ImageCombo
Index
t trong danh sách
SelImage h (index) tương ng trong danh sách hình (Imagelist)
Image h hình
d geCombo
Indentation qui định khong canh l ca đối tượng so vi l trái ca
Ch s ca phn t trong mng ComboItems
Key Chui t duy nht xác định phn
ComboItems
Ch s ca hìn
liên kết vi ImageCombo khi phn t đưc chn
Ch s ca hình (index) tương ng trong danh sác
Selecte (True/False): Cho biết phn t đưc chn trong Ima
hay không
S nguyên
ImageCombo
Giáo trình Visual Basic 6.0 125
3. Các phươ
Add [Index][, key][, Text][, Image][, SelImage][, Indentation]
danh sách ComboItems ca ImageCombo
ng thc
Thêm mt phn t vào
Trong đó:
Index Ch s ca phn t trong mng ComboItems
Key Chui t duy nht xác định phn t trong danh sách
ComboItems
bo
e
SelImage h (index) tương ng trong danh sách hình (Imagelist)
tion l trái ca
Text Chui ký t giá tr xut hin trong ImageCom
Imag Ch s ca hình (index) tương ng trong danh sách hình
Ch s ca hìn
liên kết vi ImageCombo khi phn t đưc chn
Indenta S nguyên qui định khong canh l ca đối tượng so vi
ImageCombo
Ví d:
Private Sub F
ImageCombo1.ComboItems
dItem = ImageCombo1.ComboItems(1)
ble
ImageCombo
ndex
i v trí Index
n t trong danh sách ComboItems.
dĩa (và nhãn dĩa) vào ImageCombo.
S dng Add để khi động ImageCombo trong s kin Form_Load.
orm_Load()
With
.Add , , "Brazil", 1, , 1
.Add , , "Italia", 2, , 2
.Add , , "Spain", 3, , 3
.Add , , "Usa", 4, , 4
End With
Set ImageCombo1.Selecte
End Sub
GetFirstVisi
Hàm cho giá tr là tham chiếu đến đối tưng đầu tiên xut hin trong
Remove I
Xoá mt phn t t
Clear
Xoá tt c các ph
Ví d sau minh ha cách np các
Giáo trình Visual Basic 6.0 126
Nguyn Đăng Quang
Sub LoadDrivesIntoImageCombo(ImgCombo As ImageCombo)
r"
mage = "FloppyDrive"
ge = "CDDrive"
y Then
rLabel = drLabel & "[" & _
e & "]"
, dr.DriveLetter, drLabel, drImage, , 2
gCombo.SelectedItem = ImgCombo.ComboItems(Left$(CurDir$, 1))
Dim fso As New Scripting.FileSystemObject, dr As Scripting.Drive
Dim drLabel As String, drImage As String
' ImageCombo phi đưc liên kết vi mt danh sách hình đã
' có sn biu tượng các loi dĩa
ImgCombo.ComboItems.Add , , "My Computer", "MyCompute
For Each dr In fso.Drives
Select Case dr.DriveType
Case Removable: drI
Case CDRom: drIma
Case Else: drImage = "HardDrive"
End Select
drLabel = dr.DriveLetter & ": "
If dr.IsRead
If Len(dr.VolumeName) Then d
dr.VolumeNam
End If
ImgCombo.ComboItems.Add
Next
' Chn dĩa hin ti.
Set Im
End Sub
Hình 12.2: Giao din chưong trình ví d
Giáo trình Visual Basic 6.0 127
Chương 13
Microsoft Windows Common Controls
Toolbar - Statusbar - DTpicker
I. TOOLBAR
Toolbar thanh công c, đưc s dng để trình bày các chc năng thường s
dng trong chương trình. Trên Toolbar có th gm các loi đối tượng sau:
- Nút bm thưng
- Nút bm dng Check
- Nút bm hot động theo nhóm (Option Buttons)
- ComboBox hoc TextBox
Ni dung trình bày trên nút bm ca Toolbar th text hoc hình nh. Hình
nh xut hin trên các nút bm ca Toolbar được qun lý thông qua ImageList.
1. S dng Toolbar
- Nhp đúp biu tưng Toolbar trên ToolBox
- Nhp phím phi trên biu tưng Toolbar trên form
- Chn Properties, xut hin hp thoi Property Pages
a. Th General
Qui định các thuc tính cơ bn nht ca mt ToolBar, gm :
Thuc tính Ý nghĩa
MousePointer
Chn dng con tr .
ImageList
Tên Imagelist qun lý danh sách hình .
BorderStyle
Kiu vin (0 - ccNone, 1 - ccFixedSingle)
Appearance
Dng ToolBar (0-ccFlat, 1-cc3D)
ButtonHeight
Chiu cao nút bm.
ButtonWidth Chiu rng t bm.
AllowCustomize
Cho phép thay đổi các nút trên Toolbar khi chy chương trình
Wrappable
Cho phép cun toolbar thành nhiu hàng nút
ShowTips
Xut hin li nhc chc năng ca nút
Giáo trình Visual Basic 6.0 128
Nguyn Đăng Quang
Hình 13.1: Th Button
b. Th
c nút bm trên Toolbar được qun lý trong mng Buttons (là mt thuc tính ca
c tính ca mi nút bm được trình bày trong th Buttons:
Button
Toolbar). Các thu
Thuc tính Ý nghĩa
In
th t ca nút trên Toolbar
dex
S
Caption Ni út
Tên
Tr sed)
Lo – tbrButtonGroup, 3 –
brS holder, 5- Dropdown
Li uyn trên nút
Độ
dung xut hin trên n
Key
nút đưc s dng trong chương trình
Value
ng thái ca nút (0 - tbrUnpressed, 1 - tbrPres
Style
i nút: 0 – tbrDefault, 1 – tbrCheck, 2
t eparator, 4 – tbrPlace
ToolTipText
nhc khi con tr di ch
Image
Ch s hình trong ImageList
Width
rng khong cha ch trên Toolbar
Hình 13.2: Các loi nút trên Toolbar
tbrPlaceHolder tbrDefault tbrPlaceHolder tbrSeparator tbrCheck tbrGroup
Giáo trình Visual Basic 6.0 129Giáo trình Visual Basic 6.0 129
Định nghĩa Toolbar
- Định ngĩa ImageList cha danh sách hình s s dng trên Toolbar,
- Đặt Toolbar lên form,
- Trong hp thoi Property Pages ca Toolbar:
Th General
- Chn danh sách hình đã định nghĩa (thuc tính ImageList)
- Chn dng th hin (Flat, 3D), vin/không có vin (thuc tính Appearance)
- Chn kích thước nút bm
Th Buttons
- Bm nút Insert Button để thêm nút mi. Qui định thuc tính cho mi nút :
o Key: Chui tên dùng trong chương trình
o Style: Loi nút: bình thường, thanh phân cách, dành ch cho
combobox...
o Value:Giá tr ban đầu cho nút (nếu nút bm loi check)
o Image:Chn ch s hình trong ImageList
- Bm Apply sau khi định nghĩa xong 1 nút
- Lp li nhiu ln để định nghĩa cho các nút khác
- Viết lnh
Nhp đúp trên toolbar, xut hi
b Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button)
T s Button cha thông tin v n m trên Toolbar.
định nú c tính Index hoc Key ca Button:
b To on As ComctlLib.Button)
lect C
C
C
..
nd Sele
End Sub
Hoc
Private Sub Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button)
Case 1
2.
n khai báo
Private Su
End Sub
rong đó tham út được b
Để xác t được bm, có th s dng thu
tPrivate Su
Se
olbar1_ButtonClick(ByVal But
ase Button.Key
ase “FileOpen”
Do_Open
ase “FileSave”
Do_Save
.
E ct
Select Case Button.index
Giáo trình Visual Basic 6.0 130
Nguyn Đăng Quang
Do_Open
e
t
En u
3.
y chương trình bng phương thc Add vi
dn
Ad
Trong đó:
Ind
Key y nht
Ca
Sty
Case 2
Do_Sav
...
End Selec
d S b
Đ nh nghĩa nút Toolbar lúc chy chương trình
th thêm nút Toolbar lúc ch
g như sau:
d ([Index], [key], [caption], [Style], [Image]) As Button
ex v trí nút thêm vào.
Chui du
ption Chui xut hin trên nút.
le Loi nút.
Image Ch s hình trong danh sách hình.
d 1: Thêm mt nút bm hot động theo kiu CheckBox lên Toolbar.
tn.Value = tbrPressed
Ví d
Dim btn As Button
Set btn = Toolbar1.Buttons.Add(, , , tbrCheck, "Lock")
b
2: Thêm mt nút phân cách trên Toolbar.
Toolbar1.Buttons.Add , , , tbrSeparator
Ví d 3: Thêm hai nút hot động theo nhóm trên Toolbar.
Set btn = Toolbar1.Buttons.Add(, , , tbrButtonGroup, "Green")
(, , , tbrButtonGroup, "Red")
d
Set btn = Toolbar1.Buttons.Add
btn.Value = tbrPressed
4: Thêm khong trng trên Toolbar đặt ComboBox vào khong trng đã
to.
t btn = Toolbar1.Buttons.Add(, , , tbrPlaceholder)
btn.Width = cboFontSizes.Width
ft, btn.Top
Dim btn As Button
Se
Set cboFontSizes.Container = Toolbar1
cboFontSizes.Move btn.Le
Giáo trình Visual Basic 6.0 131
Trườn ropDown, có th định nghĩa c mc chn
khi ng tên bên phi nút bng phương thc Add như sau:
Add ([ ], [Image]) As ButtonMenu
Ví d
g hp nút to ra Style = tbrD
ười s dng bm mũi
Index], [key], [caption], [Style
: i Drop-down ri to menu có 3 mc chn.
t btn = Toolbar1.Buttons.Add(, , , tbrDropDown, "New")
.Add , , "File"
, "Image"
ttonMenuClick xy ra khi mc chon trên menu kéo xung ca nút bm
kiu d n đ trình y lnh x s kin khi nút bm
được c
ub ck(ByVal ButtonMenu As
omc nMenu)
t C
eNewDocument
Image
End Select
II. ST
báo tình trng hot động
ca ch
1. S d
Đặt statusbar lên form. Click mc (Custom) ti properties windows, xut hin hp
Thêm nút bm lo
Dim btn As Button
Se
With btn.ButtonMenus
.Add , , "Document"
.Add ,
End With
S kin Bu
rop-dow ược chn. d sau
hn.
Private S Toolbar1_ButtonMenuCli
MSC tlLib.Butto
Selec ase ButtonMenu.Key
Case "Document"
Call mnuFil
Case "Image"
Call mnuFileNew
End Sub
ATUS BAR
Đối tượng điu khin thưng đặt phía dưới form để thông
ương trình hoc thông báo trng thái ca các nút bm.
ng
thoi Property Pages.
Giáo trình Visual Basic 6.0 132
Nguyn Đăng Quang
Giáo trình Visual Basic 6.0
Nguyn Đăng Quang
132
Hình 13.3: Th general
a. Th
Panels
dng Normal
Hình 13.4
General
StatusBar dng Simple
Style Loi Status bar (0 - sbrNormal, 1 - sbrSimple)
SimpleText Chui xut hin trên Toolbar khi style = 1
StatusBar
: Các Style ca StatusBar
anel b. Th P
Hình 13.5: Th Panel
Giáo trình Visual Basic 6.0 133
Index Ch s các panel trên toolbar
Text Chui xut hin trong Panel
ToolTipText Li nhc khi mouse di chuyn trên Panel
Minimum
width
B rng ti thiu ca Panel
Alignment Dng canh l text trong panel (0-sbrLeft,1-Center,2-
Right)
Style Loi Panel
0-sbrText
1-sbrCaps
2-sbrNum
3-sbrIns
4-sbrCtrl
e
6-sbrDate
evel Kiu v -
s
AutoSize T động điu chnh text xut hin trong Panel
0 - sbrNoAutosize, 1-sbrSprings, 2-sbrContents
Picture Hình xut hi
5-sbrTim
B in ca Panel (0-sbrNoBevel,1-sbrInset, 2
sbrRai ed)
n trong Panel
Để c
tính c
Để điu chnh thuc tính ca mt Panel, click nút mũi tên bên phi hp Index để
chn, điu chnh giá tr thuc tính r Apply.
Để xóa mt Panel, bm nút R
2. Viết l s
Khi viết lnh cho statusbar, phân bit hai trưng hp:
thêm Panels cho StatusBar dng Normal, bm nút Insert Panel, gán các thu
n thiết cho Panel.
i bm nút
emove Panel.
nh cho Statu bar
StatusBar có Style = sbrSimple: S dng thuc tính Simple Text
Statusbar1.SimpleText = “StatusBar with Simple text”
StatusBar có Style = sbrNormal: S dng thuc tính Text ca các Panels
StatusBar1.Panels(1).Text = “Edit mode”
Các Panel loi sbrCaps, sbrNum, sbrIns, sbrCtrl,sbrTime.sbrDate t động cp
nht propert text theo thi gian, trng thái ca các phím tương ng trên bàn
phím.
Vi các thông báo dài, th tm thi chuyn Style thành sbrSimple để trình
bày thông báo ri chuyn tr li Style Normal:
StatusBar1.Style = sbrSimple
StatusBar1.SimpleText = "Saving data to file..."
' ...
' Chuyn tr li sbrSimple
StatusBar1.Style = sbrText
Giáo trình Visual Basic 6.0 134
Nguyn Đăng Quang
th thêm mt g phương thc Add, dng như sau:
[Index], [K ) As Panel
Panel trong chương trình bn
Add ( ey], [Text], [Style], [Picture]
Ví d: Thêm 1 P
Statu rary", "Hello World", sbrText)
evel
.AutoSize = sbrContents
End With
a mt Panel b thc Remove v v trí ca Panel.
d sau yêu c ng nhp ni du l khi người s dng nhp
Private Su
im s A
If Pane
s = I r this panel")
Chương trình s dng mng
răng các v trí khác nhau.
imer()
St
th
A
KeyState As Byte) As
anel loi Text vào bên trái StatusBar
With sBar1.Panels.Add(1, "tempo
.Alignment = sbrCenter
.B = sbrNoBevel
ng phương
u người s d
i tham s
ng cho Pane
đúp ti Panel.
b StatusBar1_PanelDblClick(ByVal Panel As
MSComctlLib.Panel)
D s String
l.Style = sbrText Then
nputBox("Enter a new text fo
If Len(s) Then Panel.Text = s
End If
End Sub
d sau to hình nh mt mt trăng xoay trên Panel.
đối tượng Image để qun 8 hình nh mt t
Private Sub Timer1_T
Static n As Integer
StatusBar1.Panels("moon").Picture = imgMoon(n).Picture
n = (n + 1) Mod 8
End Sub
atusB ck (Caps, Num…) nhưng char th thông báo trng thái các phím Lo
thay đổi trng thái các phím y bng bàn phím. d sau s dng các hàm
PI để thay đổi trng thái các phím Lock bng mouse.
' Khai báo s dng hàm API
Declare Function GetKeyboardState Lib "user32" (KeyState As Byte) As
Long
State Lib "user32" (Declare Function SetKeyboard
Long
ate Sub StatusBar1_PanelDblClick(ByVal Panel As Priv
MSComctlLib.Panel)
Select Case Panel.Style
Giáo trình Visual Basic 6.0 135
Case sbrCaps: ToggleKey vbKeyCapital
CodeConstants)
thái
eys(0)
III. DT
đối
- ngày gi theo định dng,
- tr ngày gi theo dng và phm vi định trước,
Calend
Calend
Calend
CalendarTitleBackColor
c thuc tính màu nn, màu ch lch, màu nn màu
ăm đang chn
MinDa định phm vi chn ngày tháng
Value
Format Qui định loi định dng s dng. có các giá tr:
1-dtpShortDate. Ví d 11/14/1972
tpCustom. Định dng theo kiu ca ngưi s dng
Case sbrNum: ToggleKey vbKeyNumlock
Case sbrScrl: ToggleKey vbKeyScrollLock
Case sbrIns: ToggleKey vbKeyInsert
End Select
StatusBar1.Refresh
End Sub
Sub ToggleKey(vKey As Key
Dim keys(255) As Byte
' Đọc trng thái hin ti t bàn phím.
GetKeyboardState keys(0)
keys(vKey) = keys(vKey) Xor 1 ‘ Thay đổi trng
' Gán giá tr mi
e k SetKeyboardStat
End Sub
PICKER
tưng điu khin có 3 chc năng:
Thông báo
Nhp giá
- T động kim tra giá tr nhp ngày gi theo định dng.
1. Thuc tính
arBackColor,
arForeColor, ch tiêu đề
arTitleForeColor,
DayOfWeek Giá tr ngày trong tun (1-Ch nht, 2- Th hai,...7-Th
by) ca ngày đang chn
Day, Month, Year Giá tr ngày (1-31), tháng (1-12), n
te, MaxDate Các thuc tính qui
Giá tr ngày đang chn
0-dtpLongDate . Ví d Friday, Nov 14, 1972
2-dtpTime. Ví d 5:31:47 PM
3-d
Giáo trình Visual Basic 6.0 136
Nguyn Đăng Quang
Custom t qui định dng ngày gi xut hin trong
khi thuc tính Format giá
Format Chui
DTPicker. Ch có tác dng
tr dtpCustom
ý nghĩa:
d Giá y 1 hoc 2 ch s (1-31)
c loi ký t s dng trong chui CustomFormat và
tr ngà
dd có ch s 0 phía trước (01-31) Giá tr ngày 2 ch s
ddd i 3 t đầu tiên viết tt tên ngày tiếng anh (Sun, Tue,
Wed...)
Chu
dddd y, Wednesday...) Chui tên ngày tiếng anh (Sunday, Tuesda
h s (1-12) Giá tr gi 1 hoc 2 ch
hh trưc (01-12) Giá tr gi 2 ch s có ch s 0 phía
H (0-23) Giá tr gi 1 hoc 2 ch s
HH Giá tr gi 2 ch s có ch s 0 phía trước (0-23)
m c 2 ch s (0-59) Giá tr phút 1 ho
mm h s 0 phía trước (01-59) Giá tr phút 2 ch s có c
M Giá tháng 1 hoc 2 ch s (1-12) tr
MM Giá tr tháng 2 ch s có ch s 0 phía trước (01-12)
MMM Chui 3 t đầu tiên viết tt tên tháng tiếng anh (Jan, Feb,
Mar...)
MMMM Chui tên tháng tiếng anh (January, February, March...)
s Giá tr giây 1 hoc 2 ch s (0-59)
ss Giá tr giây 2 ch s có ch s 0 phía trước (01-59)
t (1 ký t) AM-PM
tt AM-PM (2 ký t)
X Vùng CallBack
y Giá tr 1 ch s cui ca năm
yy Giá tr 2 ch s cui ca năm
yyy Giá tr năm đầy đủ (4 ch s)
Mt s ví d v cách s d at như sau:
tpCust
“MM
08:24:24
.Format = dtpCust
mFormat = “MM
cho kết qu: January/Monday/1999
dtpDate.Format = dtpCust
dtpCustomFormat = “dddd
ay , February 14,
dtpDate.Format = dtpCust ết qu: Thursday Feb 14, 2002
ng thuc tính CustomForm
dtpDate.Format = d om S cho kết qu: 01/25/1999
dtpCustomFormat = /dd/yyy hh:mm:ss
dtpDate om S
dtpCusto MM/dddd/yyy”
om S cho kết qu: Thursd
, MMMM dd, yyy” 2002
om S cho k
Giáo trình Visual Basic 6.0 137
dtpCustomFormat = “dddd MMM d, yyy”
Vùng CallBack (callb
Ngoài các loi ký t cho
thêm các vùng trong chu t vi ni dung tu ý, các vùng y đưc
m h các vùng khác
au trong
:
ack fields)
trong bng trên, ngưi lp trình còn th định nghĩa
i CustomForma
ô t bng chui các t X. S lượng t X liên tiếp xác địn
nh chui CustomFormat.
Ví d
hui S vùng CallBack C
MMMM ddXXX yyy 1
MMMM ddXXX yyyy hh:mm:ss XXXX 2
Giá tr ca t lnh trong s kin
mat. S n b trình bày giá tr ca nó.
. S
ate Su As
g)
n x trình bày s được
v
Private Su _FormatSize(CallbackField As String, Size As Long)
hát đủ b nh
a chu kin này cùng vi s kin Format
d:
các vùng CallBack đưc c định bng cách viế
For kin này xy ra khi DTPicker chu
2 kin
Priv
Strin
b object_Format(CallbackField As String, FormattedString
S ki y ra trước khi DTPicker trình y giá tr. Giá tr cn
xác định à gán cho chui FormattedString
b object
S kin x y ra trưc khi Format đuc s dng để DTPicker cp p
ch i CallBack. Thưng viết lnh cho s
un trình i “st”, “nd”, “rd” sau giá tr ngày có dng Thursday,
bruary 2 ustomFormat phi dng dddd, MMMM dXXX,
y. Viết Format như sau:
rivate Su allbackField As String, FormattedString
tring)
Callba
Case Else
M bày thêm các chu
Fe nd, 2002 , chui C
yyy lnh cho s kin
P b DTPicker1_Format(ByVal C
As S
If ckField = "XXX" Then
Select Case DTPicker1.Day Mod 10
Case 1
FormattedString = "st"
Case 2
FormattedString = "nd"
Case 3
FormattedString = "rd"
Giáo trình Visual Basic 6.0 138
Nguyn Đăng Quang
FormattedString = "th"
Size = 2
nd Sub
End Select
End If
End Sub
Private Sub DTPicker1_FormatSize(ByVal CallbackField As String, Size As
Integer)
If CallbackField = "XXX" Then
E
Giáo trình Visual Basic 6.0 139
Chương 14
ft Windows Common Controls
Progressbar
IEW
đối tượng điu khin thưng được s dng để trình bày cu trúc t chc ca
mt đối tượng như cu trúc cây thư mc, t chc mt cơ quan, mt đơn v
1. Các thuc tính
Nodes: Thuc tính quan trng nht ca Treeview, mt danh sách các đối tượng
Node. Mi Node được xem là mt cây con, có các nút con, nút cháu...
Hình 14.1
Microso
Treeview - Updown - Slider -
I. TREEV
: Đối tượng Nodes
ImageList: Tham chiếu đến đối tương ImageList qun danh sách hình liên kết
vi TreeView. Gán giá tr này trong Property Pages
Hoc gán bng lnh như sau:
Private Sub Form_Load()
Set TreeView1.ImageList = ImageList1
End Sub
CheckBoxes (True/False): Làm xut hin Checkbox bên trái mi nút
LabelEdit:Chế độ sa cha giá tr nhãn (0-tvwAutomatic, 1-tvwManual)
Linestyle: Chế độ v đường ni gia nút và nút cha , có hai giá tr 0-tvwTreelines,
1- tvwRootLines
Nodes
Node_
a
Node 1 Node 2
Node 3 Node 4 Node 5
Node_
b
Node 2
Node 1
Giáo trình Visual Basic 6.0 140
Nguyn Đăng Quang
Hình 14.2: Thuc tính Linestyl
SelectedItem: Cho giá tr tham chiếu (reference) đ
View hoc dùng chn mt Node trong TreeView
e
ến đối tượng Node đang
được chn trong Tree
Chn nút gc trong Treeview
Set Treeview1.SelectedItem =Treeview1.Nodes(“Root”)
In giá tr nút đang đưc chn
Dim nd as Node
Set nd = Treeview1.SelectedItem
Debug.Print nd.Text
2. Các thuc tính ca đối tượng Node
Child
Tham chiếu đến nút con đầu tiên
Children
S nút con
Expanded
(True/False) xut hin các nút con ca mt nút - Tương đương
vi vic nhp đúp ti nút hoc click ti du +/- để trin khai/thu gn
mt nút
FirstSibling
Tham chiếu đến nút con đầu tiên cùng cp
astSibling
Next
c
Sorted cùng cp theo th t alphabet
Text
Index
th t ca nút trong mng các nút cùng cp
Current = pnod.Child ‘ Tham chiếu đến nút con đầu tiên
For i = 1 To pnod.Children ‘ Lp qua s nút con
Debug.Print pnodCurrent.Text ‘ In thuc tính Text
L
Tham chiếu đến nút con cui cùng cùng cp
Tham chiếu đến nút con kế sau cùng cp
Previous
Tham chiếu đến nút con kế trước cùng cp
Parent
Tham chiếu đến nút cha ca mt nút
Root
Tham chiếu đến nút g
Sp xếp các nút con
Chui xut hin bên phi nút
S
Chương trình con sau in nhãn (Text) các nút con ca mt nút
Private Sub ListChildren(pnod As Node)
Dim pnodCurrent As Node
Set pnod
Giáo trình Visual Basic 6.0 141
Set pnodCurrent = pnodCurrent.Next Tr sang nút con kế tiếp
Next
End Sub
In các nút con ca nút gc
Private sub Command1_Click()
Dim nd as Node
Set nd = Treeview1.Nodes(“Root”)
ListChildren n
Add [ ge]
Thêm des trong Treeview. Trong đó
Relative Key Index ca nút mà nút mi đưc thêm vào
i nút cho trong tham s relative, có các giá tr
m nút đầu tiên so vi các nút cùng cp
tham s relative
i các nút cùng cp
ve
s
n ca nút cho trong tham
ng (Ly t Imagelist)
e agelist)
d
End sub
3. Phương thc
Relative][, Relationship][, Key][, Text][, Image][, SelIma
mt nút mi vào danh sách No
hoc
Quan h ca nút mi so v
như sau:
0-tvwFirst Nút đưc thê
Relationship
vi nút cho trong
Nút đưc thêm nút sau cùng so v1-tvwLast
vi nút cho trong tham s relative
2-tvwNext Nút được thêm vào sau nút cho trong tham s relati
3-tvwPrevious Nút được thêm vào trước so vi nút cho trong tham
relative
4-tvwChild Nút đưc thêm vào là nút co
s relative
Key Chui mã s duy nht cho mi nút
Text
Chui xut hin bên phi nút
thái bình thườImage Hình nh ca nút trng
SelImag nh nh ca nút trng thái được chn (Ly t Im
d: S dn y Kova như
sau:
g đối tượng Treeview trình bày sơ đồ t chc ca công t
hình
S dng đối tượng ImageList vi các hình nh đưc chn như
Giáo trình Visual Basic 6.0 142
Nguyn Đăng Quang
Hình 14.3: Th general
Lnh cho s kin Form_load
With tvw.Nodes
.Add , , "R
.Add "Ro
.Add "Ro
.Add "Roo "VT
End With
Lnh .Add , ova
dng hình th ba (
Lnh .Add hild
vi Key=KD h
Lnh .Add "Root", tvwChild, "KT", "P.Ke toan", 1, 2 to nút con dưới gc vi
Key=KT, T oan”
Lnh .Add Root", tvwChild at tu", 1, 2 to nút con dưi gc vi
ey=VT, T , 2 trong ImageList
viết khác
d As N
tvw
nd = tvw.Nodes.Add("Root", tvwChild, "KT", "P.Ke toan", 1, 2)
un thêm 5 nhân viên vào phòng kinh doanh như hình , viết thêm lnh như sau:
For i = 1 To 5
Set nd = tvw.Nodes.Add("KD", tvwChild, , "Nhan vien #" & i, 4, 5)
oot", "Kova Co.ltd", 3
ot", tvwChild, "KD", "P.Kinh doanh", 1, 2
ot", tvwChild, "KT", "P.Ke toan", 1, 2
t", tvwChild, ", "P.Vat tu", 1, 2
, "Root", "K Co.ltd", 3 to nút gc vi Key=Root, Text=”Kova
3) trong Imagelist Co.ltd” s
"Root", tvwC , "KD", "P.Kinh doanh", 1, 2 to nút con dưới gc
, Text = “P.Kin doanh” s dng các hình 1, 2 trong ImageList
ext = “P.Ke t s dng các hình 1, 2 trong ImageList
, "VT", "P.V "
K ext = “P.Vat tu” s dng các hình 1
Cách
Dim n ode
Set nd = .Nodes.Add(, , "Root", "Kova Co.ltd", 3)
Set nd = tvw.Nodes.Add("Root", tvwChild, "KD", "P.Kinh doanh", 1, 2)
Set
Set nd = tvw.Nodes.Add("Root", tvwChild, "VT", "P.Vat tu", 1, 2)
M
Giáo trình Visual Basic 6.0 143
Next
nd.Expande
th viế
Private Sub Form_Load()
Dim DptStr
DptStr =
tu")
Dim nd As No
Set nd = tvw.Nodes.Add(
For i = 0 To 2
(i), 1, 2)
& j, 4, 5)
d = True
t cách khác như sau:
Array("P.Kinh doanh", "P.Ke toan", "P.Vat
de, nd1 As Node
, , "Root", "Kova Co.ltd", 3)
Set nd = tvw.Nodes.Add("
nd.Expanded = True
Root", tvwChild, , DptStr
For j = 1 To 5
Set nd1 = tvw.Nodes.Add(nd.Index, tvwChild, , "Nhan vien #"
Next
Next
End sub
Remove Index
Xoá nút ti v trí Index hoc nút có Key cho trước
d:
Xoá nút đang được chn trên Treeview khi nhp đúp trong Treeview
Private Sub tvw_DblClick()
Dim nd As Node
Set nd = tvw.SelectedItem
idx = nd.Index
tvw.Nodes.Remove idx
End Sub
Clear
Xoá toàn b cây trong Treeview
Ví d:
Private Sub tvw_DblClick()
tvw.Nodes.Clear
End Sub
4. S kin
Private Sub object_NodeClick(ByVal node As Node)
S kin xy ra khi ngưi dùng click ti mt nút trên Treeview
Giáo trình Visual Basic 6.0 144
Nguyn Đăng Quang
Ví d:
In giá tr Key Text lên tiêu đề form khi ngưi s d
Private Sub tvw_NodeClick(ByVal Node As Node)
ex = " & Node.Index & " Text:" & Node.Text
ng Click ti mt nút trên
Treeview
Me.Caption = "Ind
End Sub
Ví d:
In tt c các nút con khi ngưi s dng Click ti mt nút bng cách s dng
hn trên.
)
ren Node
i mt
khác để tăng hoc gim giá tr ca đối tượng gn lin vi
ác thuc tính
T động chn đối tưng đi kèm vi Updown da trên
được chn, thuc tính Buddy
Control cũng được t động chn (True/False)
ng chn khi
Buddy
thuc tính mun thay đổi giá tr ca đối tưng đi kèm
Min
nh giá tr nh nht trên đối tượng khi bm nút down
Max
ln nht trên đối tượng khi bm nút up
Increm
Qui định độ tăng giá tr khi bm nút Up/Down (Luôn dương)
Giá tr đang chn
ng đối tưng đưc t đông quay v min/max khi
tăng/gim đến hết phm vi giá tr (True/False)
2.
Privat e()
S kin xy ra khi Updown thay đổi giá tr
Private Sub object_DownClick()
S kin xy ra bm nút Down
chương trình con ListChildren p
Private Sub tvw_NodeClick(ByVal Node As Node
ListChild
End Sub
II. UPDOWN
Đối tượng điu khin hot động theo kiu thanh cun nhưng luôn gn lin v
đối tượng
1. C
AutoBuddy
TabIndex, khi thuc tính này
BuddyControl
Tên đối tượng đi kèm vi Updown. Đưc t độ
Autobuddy=True
Property
Qui định
vi updown
Qui đị
Qui định giá tr
ent
Value
Wrap
Giá tr chn tro
S kin
e Sub object_Chang
Giáo trình Visual Basic 6.0 145
Private Sub object_UpClick()
S kin xy ra bm nút Up
hay đổi độ tăng, gim giá tr bng cách định nghĩa thuc tính Increment
khác n
1.Increment = 5
nd Sub
III. SL
khin dùng để chn mt giá tr trong mt phm vi xác định trưc.
alue,
Text: Ni dung xu
TextPosition:V t tr
e
1-sldBelow thanh trưt
n
0-sldBottom giá tr xut hin phía dưới thanh trượt
1-sldTopLe
2-sldBoth
one ch giá tr
hương trình
thanh trưt
b Form_Load()
With combo1
ght"
.AddItem "None"
d sau t
hau khi bm nút up, down
Private Sub Updown1_UpClick()
Updown
E
Private Sub Updown1_DownClick()
Updown1.Increment = 1
End Sub
IDER
Đối tưng điu
Slider cũng các thuc tính ging thanh cun ngang. ngoài ra còn có thêm
kh năng chn mt phm vi giá tr.
1. Thuc tính
Min, Max, V SmallChange, LargeChange:Ging Scrollbar
t hin trong Tooltip khi kéo thanh trưt
rí xut hin Text khi kéo thanh trưt, có các giá
0-sldAbov Left Phía trên thanh trưt
Right Phía dưới
TickStyle: Qui đị h các trình bày các vch giá tr trên thanh trưt, có các giá tr
Right Vch
ft Vch giá tr xut hin phía trên thanh trượt
Vch giá tr xut hin c trên & dưới thanh
trưt
3-sldN Không có v
Đon c sau s dng ComboBox để chn thuc tính TickStyle cho mt
Private Su
.AddItem "Bottom/Ri
.AddItem "Top/Left"
.AddItem "Both"
Giáo trình Visual Basic 6.0 146
Nguyn Đăng Quang
.ListIndex = 0
End With
End Sub
lick()
TickF hong vch xut hin
SelectR ính qui định chế độ chn phm vi giá tr
SelSta bt đầu phm vi chn trên thanh trượt
SelRange: Giá tr phm v chn
Thưn c kích hot khi ngưi dùng bm phím
SHIFT
2. hc
phm vi chn trên thanh trượt
MsgBox Slider1.GetNumTicks
x = Slider1.Max + 10
Privat ll
S ki tr y xy ra trước s kin Click
S ki i thu
Ví d hot độ h bm phím
SHIFT khi click trên thanh
Privat 1_Mous er, Shift As Integer, x As Single,
vbShiftMask Then
' B ang chế độ chn phm vi.
Slider1.SelectRange = True
S
S lue
Private Sub combo1_C
Slider1.TickStyle = combo1.ListIndex
End Sub
requency: Thuc tính qui định s k
ange (True/False): Thuc t
rt: Giá tr
g lp trình chế độ chn phm vi đượ
Phương t
ClearSel: Xoá
GetNumTicks: Phương thc cho s vch giá tr xut hin trên thanh trưt
Ví d:
Private Sub Slider1_Click()
Slider1.Ma
End Sub
3. S kin
e Sub object_Scro ( )
n xy ra khi thanh ưt di chuyn. S kin
Private Sub object_Change( )
n xy ra sau kh c tính Value đã thay đổi giá tr
sau minh ho ng chn phm vi giá tr trên slider bng các
trưt
e Sub Slider eDown(Button As Integ
y As Single)
If Shift =
m phím SHIFT, chuyn s
lider1.SelLength = 0
tartSelection = Slider1.Va
Giáo trình Visual Basic 6.0 147
Else
' B i.
Slider1.SelectRange = False
End
End Su
Privat
Slid
If Slider1.SelectRange Then
n
lider1.SelLength = StartSelection - Slider1.Value
End If
Đối tư độ hoc thi gian thc hin ca mt hot động
mt m máy như hot động m File, sao chép,
truyn
ính
Mi
r nh nht
Scrolling
Thuc tính qui định tính cht ca vch t tiến trình, có các
chế độ chn phm v
If
b
e Sub Slider1_Scroll()
er1.Text = "Value = " & Slider1.Value
If Slider1.Value > StartSelection Then
Slider1.SelStart = StartSelection
Slider1.SelLength = Slider1.Value - StartSelectio
Else
Slider1.SelStart = Slider1.Value
S
End If
End Sub
IV. PROGRESSBAR
ng điu khin trình bày tc
t khong thi gian khá lâu trên
d liu trên mng...
c Thuc t
n
Giá t
Max
Giá tr ln nht
Value
Giá tr hin ti
giá tr:
0-
ccScrollingStandard
1-ccScrollingSmooth
thc hin. Trong quá trình thc hin tiến trình (thường vòng lp),
00 phn t
ad()
Lp trình trên ProgressBar thường gm vic qui định các gía tr Min, Max trước
khi tiến trình
giá tr Value s được cp nht
Ví d sau minh ho tiến trình n giá tr cho mt mng có 10
Dim A(1000) As Integer
Private Sub Form_Lo
Giáo trình Visual Basic 6.0 148
Nguyn Đăng Quang
With ProgressBar1
.Min = 0
nd With
d Sub
Click()
.Max = 1000
.Value = 0
E
En
Private Sub CmdStart_
For i = 0 To 1000
A(i) = i
ProgressBar1.Value = i
Next
End Sub
Giáo trình Visual Basic 6.0 149
Chương 15
RichTextbox – Form MDI
I. X
m ox đặc bit, ngoài các thuc tính cơ bn ca mt textbox.
RichT n bao gm các thuc tính định dng văn bn như:
-
- hư bullet, canh l,
- ng đối tượng (Object Embedding),
- xt hoc dng định dng (RTF - Rich Text
.
RichTextBox không sn trên ToolBox. S dng hp thoi Components để np
RichT ox lên ToolBox.
1. Các thuc tính
Các thuc tính b sung so vi textbox
SelRTF
Ging thuc tính SelText ca TextBox nhưng có thêm định
dng
SelFontName
Chn font
SelFontsize
Chn font size
SelFontColor
Chn màu
SelBold
(True/False) Chn ch đậm
SelItalic
(True/False) Chn ch nghiêng
SelUnderline
(True/False) Chn ch gch chân
SelAlignment
Canh l cho đon văn, có các giá tr:
Null : Phn văn bn chn trên nhiu đon có trng thái canh
l khác nhau
0 - rtfleft: Canh trái (default)
1 - rtfRight: Canh phi
2 - rtfCenter: Canh gia
SelBullet
(True/False) Đánh bullet cho đon văn
SelIndent
Qui định l trái
SelRightIndent
Qui định l phi
SelHangingIndent
Qui định đon tht vào ca dòng đầu tiên trong đon
AutoverbMenu
(True/False) Cho phép xut hin menu popup khi bm phím
phi trên richtextbox
RICHTEXTBO
t loi Textb
extBox cò
Định dng font ch,
Định dng đon văn n
Kh năng nhú
Kh năng lưu văn bn dng te
Format)
extB
Giáo trình Visual Basic 6.0 150
Nguyn Đăng Quang
2. Các phương thc
a. LoadFile Path, Filetype
Np tp tin Text hoc RTF
Path: Đưng dn
(0 - rtfRTF, 1 - rtfText). Giá tr mc định là rtfRTF
rorOpen
rIndex = 2
.LoadFile .FileName, rtfRTF
b
rorOpen:
End Sub
ath, File
ichTe và tu chn ging LoadFile
lên RichTextBox. Trong đó:
FileType: Loi tp tin np
Ví d:
Private Sub mnuOpen_Click()
On Error GoTo Er
With CmDlg
.InitDir = "C:\My Documents"
.Filter = "Text (*.txt)|*.txt|RichText format (*.rtf)|*.rtf
.Filte
.CancelError = True
.ShowOpen
rtfData
Eîxit su
End With
Er
b. SaveFile P type
Ghi ni dung R xtBox lên tp tin. Các tham s
Ví d:
Private Sub mnuSav
ror G
mDlg
.InitDir =
.Filter = .txt|RichText format (*.rtf)|*.rtf
.FilterInd
.CancelE
.ShowSav
rtfData.S
Eîxit sub
h
"N
End Sub
e_Click()
On Er oTo ErrorSave
With C
"C:\My Documents"
"Text (*.txt)|*
ex = 2
rror = True
e
aveFile .FileName, rtfRTF
End Wit
ErrorOpen:
MsgBox ot save"
Giáo trình Visual Basic 6.0 151
c. Find(string, start,
rong RichTextBox, chui m thy đưc highlight. Phương
u tiên ca chui trong RichTextBox
t đầu (v trí đầu tiên = 0)
Qui định cách thc tìm:
t trn vn
ch thường, ch in
kết hơp bng phép OR
Ví d:
end, option)
Tìm kiếm mt chui t
thc tr v giá tr là v trí đầ
Các tham s:
String Chui cn tìm
Start V trí b
End V trí kết thúc tìm kiếm
Option
2 - rtfWholeword: Tìm
4 - rtfMatchCase: Phân bit
Các tham s trên có th
Private Sub mnuFind_Click()
Static p As Long
p = Form1.Richtxt.Find(txtFind.Text, p + 1)
"Search text not found"
d Sub
rpos)
If p <> -1 Then
MsgBox "Find text at position " & p
Else
MsgBox
End If
En
d. GetLineFromChar(cha
Cho giá tr là s th t dòng cha v trí cn xét
Ví d:
Private Sub mnuFind_Click()
chtxt.Find(txtFind.Text, p + 1)
omChar(p)
ot found"
II. CHTEXTBOX
1. Font ch (Font style) bng nút lnh trên Toolbar
Click(ByVal Button As MSComctlLib.Button)
Static p As Long
p = Form1.Ri
If p <> -1 Then
MsgBox "Find text at line " & Form1.Richtxt.GetLineFr
Else
MsgBox "Search text n
End If
End Sub
S DNG RI
Chn dáng v
Private Sub tbr_Button
Giáo trình Visual Basic 6.0 152
Nguyn Đăng Quang
Select Case Button.Index
Case 8
rtfBox.SelBold
se 10
derline = Not rtfBox.SelUnderline
= rtfLeft
r
2. hoi Font
nt_Click()
Cmdlg.ShowFont
ontName = Cmdlg.FontName
ontSize = Cmdlg.FontSize
.SelBold = Cmdlg.FontBold
tItalic
ine
3.
Do đon văn, font ch, ngưi lp trình còn viết lnh trên s
kin S n
văn... này xy ra khi con tr chèn thay đổi v trí hoc thay đổi phn chn
trong R
Ví d:
rtfBox.SelBold = Not
Case 9
rtfBox.SelItalic = Not rtfBox.SelItalic
Ca
rtfBox.SelUn
Case 11
rtfBox.SelAlignment
Case 12
rtfBox.SelAlignment = rtfCente
Case 13
rtfBox.SelAlignment = rtfRight
End Select
End Sub
Chn Font ch bng lnh trên menu và hp t
Private Sub mnuFo
Cmdlg.Flags =CdlCFBoth
With rtfBox
.SelF
.SelF
.SelItalic = Cmdlg.Fon
.SelUnderline = Cmdlg.FontUnderl
End With
End Sub
S kin SelChange
thêm tính cht ca
elchange để thông báo tính cht ca font ch, trng thái canh l ca đo
S kin
ichTextBox
Chươn n tho văn bn có RichTextBox và Toolbar vi các nút bm
Private Sub rtfBox_SelChange()
' Trang thai Text - Bold, Italic, Underline
g trình so
Giáo trình Visual Basic 6.0 153
If rtfBox.SelBold Then
tbr.Buttons(8).Value = tbrPressed
Else
tbr.Buttons(8).Value = tbrUnpressed
End If
If rtfBox.SelItalic Then
tbr.Buttons(9).Value = tbrPressed
Else
tbr.Buttons(9).Value = tbrUnpressed
End If
lUnderline Then If rtfBox.Se
tbr.Buttons(10).Value = tbrPressed
d
x.SelAlignment = rtfCenter Then
rPressed
s(i).Value = tbrUnpressed
III.
1.
nuCopy_Click()
ard.SetText rtfBox.SelRTF
t d liu vào Clipboard (Cut)
Else
tbr.Buttons(10).Value = tbrUnpresse
End If
If rtfBox.SelAlignment = rtfLeft Then
s(12).Value = tbrPressed tbr.Button
tfBo ElseIf r
tbr.Buttons(13).Value = tbrPressed
ElseIf rtfBox.SelAlignment = rtfRight Then
tbr.Buttons(14).Value = tb
Else
For i = 12 To 14
tbr.Button
Next
End If
End Sub
S DNG CLIPBOARD
Sao chép vào clipboard (Copy)
Private Sub m
Clipbo
End Sub
2. Chèn d liu t Clipboard vào văn bn (Paste)
Private Sub mnuPaste_Click()
rtfBox.SelRTF = Clipboard.GetText
End Sub
3. C
Giáo trình Visual Basic 6.0 154
Nguyn Đăng Quang
Private Sub mnuCut_Click()
Clipboard.SetText rtfBox.SelRTF
rtfBox.SelRTF = ""
End Sub
IV. ONT CH C CH TRÊN
AR
Np fo
b Form_Load()
i = 0 to Screen.FontCount - 1
ith
8 To 72 Step 2
V. RM
lo ó giao din đa tài liu (Multiple
Docum trong nó có th m nhiu ca s
tài liu
1. Đặ
t chương trình
dng MDI
- a s y ch nm
- ca s con được cc đại, kích thước ca s bng kích thưc
y chính tiêu đề
S DNG COMBO BOX CHN F
TOOLB
nt ch và c ch trong s kin Form_load
Private Su
Dim i As Integer
With cmbFontName
For
.AddItem Screen.Fonts(i)
Next i
' Set ListIndex to 0.
.ListIndex = 0
End W
With cmbFontSize
For i =
.AddItem i
Next i
' Set ListIndex to 0
.ListIndex = 1 ' size 10.
End With
End Sub
MDI FO
i form được s dng trong các ng dng c
ent Interface) loi ng dng mi lúc
khác nhau.
c đim:
- Luôn là ca s chính ca m
- Mi chương trình ch có mt form
Ca s MDI cha các ca s khác n trong nó, các c
trong vùng m vic ca form MDI
Khi mt
vùng m vic ca ca s MDI tiêu đề ca ca s
ca ca s MDI
Giáo trình Visual Basic 6.0 155
- on ca s nm trong MDI ch
2.
- c nhiu form con. Để định nghĩa mt
DI, đặt thuc tính MDIChild thành True.
- MDI không th xut hin bên ngoài form MDI. Nếu mt form
c khi np form con.
tr thành menu ca form MDI
t (Active), chính thế thường ch định nghĩa
I.
3. g thc b sung so vi form thường
Thuc n focus trong MDIForm.
d
Khi mt ca s con được cc tiu, ic
không nm trên taskbar.
Form con MDI
Mt form MDI có th cha mt ho
form là con ca form M
Form con
con MDI đưc chn làm form bt đầu (startup) thì form MDI cũng được t
động np trư
- Menu thanh (nếu có) trên form con MDI s
khi form con đưc kích ho
Menu cho form MD
c thuc tính và phươn
tính ActiveForm: cho biết form con đang nh
: để đóng form đang hot động khi chn lnh
File/Close trên menu.
se_Click()
rm Is Nothing) Then Unload ActiveForm
Vi hiu form khác loi chng hn như ng dng va son
văn b nh (kiu Paint), phi có các thanh công c tương
ng ch ình định dng văn bn. Chương trinh phi kh năng
nhn b đang hot động để hin th ToolBar tương ng:
Privat k()
If TypeOf ActiveForm Is frmDocument Then
.Enabled = True
.Enabled = False
lse eForm Is frmDraw Then
<Option>
Sp xế
Trong
H
S dng thuc tính Activeform
Private Sub mnuFileClo
If Not (ActiveFo
End Sub
c ng dng MDI có n
n (kiu Wordpad) va v
o chc năng v h
iết loi form
e Sub mnuFilePrint_Clic
Tbr_Draw
Tbr_Doc
E If TypeOf Activ
Tbr_Draw.Enabled = False
Tbr_Doc.Enabled = True
End If
End Sub
Phương thc Arrange
p các ca s con bên trong ca s MDI
đó Option có các giá tr sau:
ng Giá tr Ý nghĩa
vbCas kiu Cascade cade 0 Sp xếp theo
Giáo trình Visual Basic 6.0 156
Nguyn Đăng Quang
vbT e
vbTile
vbArrangeIcons 3 Sp xếp các icon đang minimize trong MDI
il Horizontal 1 Sp xếp kiu Tile theo chiu ngang
Vertical 2 Sp xếp kiu Tile theo chiu dc
Ví d: Xp sếp các ca s con trong ng dng MDI bng lnh trên menu
Horizontally_Click()
Arrange vbTileHorizontal
En u
Privat
A a
End Su
Privat
A a
End Su
Private Sub mnuArrangeIcons_Click()
c thiết kế: <Tên form>.Show
- đã thiết kế
Dim
Lo
Private Sub mnuTile
d S b
e Sub mnuTileVertically_Click()
rr nge vbTileVertical
b
e Sub mnuCascade_Click()
rr nge vbCascade
b
Arrange vbArrangeIcons
End Sub
4. Np ca s con trong form MDI
- Khi form đã đượ
Np nhiu form tương t như form
<Tên> As New <Tên form đã thiết kế>
ad <Tên>
<Tên>.Show
Ví d:
Private sub mnuNew_Click()
Dim f As frmEdit
Load f
f.Show
End
p tho g to t động ng dng MDI vi Menu
ft. th s dng chc năng này để to nhanh
ng MDI. Các bưc thc hin như sau:
n File/New Project xut hin ca s New Project (Hình 15.1), chn VB
K.
sub
5. S dng Form Wizard to ng dng MDI
H i New Project chc năn
Toolbar có dng chun ca Microso
các ng d
1. Ch
Application Wizard, bm O
Giáo trình Visual Basic 6.0 157
Hình 15.1: Ca s chn New Project
ype, click chn loi giao din ng dng cn to
út Next (Hình 15.2).
Hình 15.2
2. Trong hp thoi Interface T
là MDI ri bm n
: Chn loi giao din MDI
menu menu con (submenu) mun s dng trong chương trình,
để chn lnh mun xut hin trên menu, Uncheck để b lnh xut
t xut hin các mc trên menu
3. Chn loi
Check
hin, bm nút hoc để di chuyn th
ri bm nút Next.
Giáo trình Visual Basic 6.0 158
Nguyn Đăng Quang
Hình 15.3: Chn menu trong Application Wizard
p thoi Customize Toolbar xut hin cho phép chn la lo4. H i nút lnh
mun xut hin trên Toolbar (Hình 15.4).
Hình 15.4: La chn nút lnh trên Toolbar
5. Bm nút Finish để kết thúc.
Giáo trình Visual Basic 6.0 159
Chươ
Lp trình Drag-and-Drop
NG QUAN
p trình Drag-and-Drop (o-nh) đã được h tr t nh
a Visual Basic, chương này trình bày k thut lp trình kéo-nh
Kéo-nh t động
tr hai chế độ kéo-nh: t động bng tay. Trong c
ười lp trình ch cn gán mt thuc tính trong lúc thiết kế
c trong lúc chy chương trình (run-time), Visual Basic s thc hi
ng 16
I. T
Kh năng l ng phiên bn
đầu tiên c trong
Visual Basic 6.0.
1.
Visual Basic h hế độ t
động, ng (design-time)
ho n mi vic;
ngưc
kin x ượng đang được kéo. Chế độ lp trình bng tay cho phép
ngưi lp trình tác động lên qui trình kéo-nh mt cách linh hot hơn.
Hu hết các đối khin ActiveX
h tr chế độ kéo- va
đ
động
Để xác định đối tượng là ngun trong hot động kéo-nh, người lp trình s dng
thuc tính OLEDragMode. Để xác đối tưng là đích trong hot động o-nh,
ngưi lp trình s dng thuc nh OLEDropMode. Bng 16.1 tóm tt mc độ h
tr ca các loi đối tượng trong hot động kéo-nh.
Bng 16.1
li trong chế độ bng tay, người lp trình phi viết lnh trong mt s s
y ra trong lúc đối t
tượng điu khin chun mt s đối tượng điu
nh. Mt s ch có thđối tưng đích, mt s khác có th
i tượng ngun, va đối tượng đích. Ch có mt s đối tượng có th hot
chế độ kéo-th t động.
Đối tượng OLEDragMode OLEDropMode
TextBox, PictureBox, Image,
RichTextBox, MaskEdBox
vbManual,
vbAutomatic
vbNone,
vbManual,
vbAutomatic
ComboBox, ListBox, DirListBox,
FileListBox, DBCombo, DBList,
TreeView, ListView, ImageCombo,
DataList, DataCombo
vbManual,
vbAutomatic
vbNone,
vbManual
Form, Label, Frame, CommandButton,
DriveListBox, Data, MSFlexGrid, SSTab,
TabStrip, Toolbar, S
ProgressBar, Slider, Animation, UpDown,
MonthView, DateTimePicker, CoolBar
Không h tr vbNone,
vbManual
tatusBar,
Giáo trình Visual Basic 6.0 160
Nguyn Đăng Quang
Đối vi đối tưng h tr chế độ kéo-nh t động, để lp t
trình ch cn gán các thuc tính OLEDragMode OL
vbAutomatic. Ví d để viết m
liu o-nh t các ng d
ngưi lp trình ch cn gán
OL RichTextBox.
p trình tác động n qui trình kéo-nh mt cách linh hot hơn.
n c viết lnh trên đối tưng ngun đích khi mun điu
nh kéo-nh, người lp
EDropMode có giá tr
t ng dng s dng RichTextBox cho phép nhn d
ng x văn bn khác như MS Word hoc WordPad,
giá tr vbAutomatic cho các thuc tính OLEDragMode
EDropMode ca
2. Kéo-nh điu khin bng chương trình
Chế độ o-nh điu khin bng chương trình (manual drag-and-drop) bng tay
cho phép người l
h 16.1 t các bướ
khin hot động kéo-nh bng chương trình.
Sub Source_MouseDown(…)
source.OLEDra
g
Hình 16.1: Các s kin được kích hot khi
kéo-nh điu khin bng chương trình
Sub Source_OLEStartDrag(Data, effects)
Data.SetData
[
b
y
tes
][,
format
]
Người s dng click trên
đ
i t
ư
ng
n
g
u
n
Đối tượng ngun định dng
d
li
u s
đ
ư
c c
h
u
y
n
đ
i
Người s dng di chuyn mouse
trên đối tượng đích. Đối tượng
đích gán mt hoc nhiu hiu
ng kéo-nh
Sub Target_OLEDragOver(Data, effects…)
Effects = vbDro
p
EffectCo
py
Sub Source_OLEGiveFeedback(Data, DefaultCursors)
reen.MousePointer=vbCustom Sc
Đối tượng ngun nhn phn hi
bng cách thay đổi dang con tr
N
g
ười s dn
g
nh
p
hím chu
Sub Target_OLEDragDrop(Data, effects…)
If Data.GetFormat(vbCFText) then
Te
x
t
=
Data.Ge
tData(vbCFT
e
xt)
t
Đối tượng ngun hoàn tt hot
động kéo-nh bng cách xóa d
liu ngun nếu là lnh Move
Sub Source_OLECompleteDrag(format)
Giáo trình Visual Basic 6.0 161
II. MT CHƯƠNG TRÌNH VÍ D
Phn này trình bày mt chương tnh ví d có giao din nhưnh 16.2
Hình 16.2: Giao din chương trình ví d
ương trình gm mt RichTextBox đưc s dng va làm đối tượng ngun, va
đối tượng đích cho các hot động o-nh. ListBox bên phi được s dng
đối tượng đích cho các thao tác kéo nh. Khi ni dung t RichTextBox hoc
mt chương trình son tho văn bn khác được kéo nh vào ListBox, nó s tách
, sp xếp ri đưa o thuc tính List như nh 16.2. Lnh viết cho tng s kin
theo sơ đồ hình 16.1 được ln lượt trình bày như sau:
1. Khi to hot động kéo-nh
i to hot động kéo-nh bng cách đặt thuc tính OLEDragMode thành
vbManual ri khi động quá trình kéo bng cách cho thc hin phương thc
OLEDrag trong s kin MouseDown:
Private Sub rtfText_MouseDown(Button As Integer, Shift As Integer, _
x As Single, y As Single)
' Khi động hot động kéo khi phím phi được bm
If Button = 2 Then rtfText.OLEDrag
End Sub
Khi phương thc OLEDrag được gi thc thi, s kin OLEStartDrag đưc kích
t trên đối tượng ngun. S kin này tham s đối tượng DataObject
tham s AllowedEffects. DataObject đối tưng cha d liu chuyn gia đối
ng ngun và đối tưng đích. D liu cũng th cha trong đối tưng này
Ch
làm
làm
t
t
Kh
ho
tư
Giáo trình Visual Basic 6.0 162
Nguyn Đăng Quang
bng phương thc SetData. Tương t như cách s dng Clipboard, d liu cha
n ng bng 16.2. th hiu dng khác nhau như tóm tt tro
Bng 16.2: Khai báo hng các loi d liu cha trong Clipboard
Hng Giá tr Ý nghĩa
vbCFText 1 Text
vbCFBitmap 2 Bitmap (BMP)
vbCFMetafile 3 Metafile (WMF)
vbCFEMetafile 14 Enhanced metafile (.emf)
vbCFDIB 8 Device independent bitmap (dib or bmp)
vbCFPalette 9 Color palette
vbCFFiles 15 List of files
vbCFRTF -16639 Rich Text Format (RTF)
d đối vi RichTextBox, d liu di chuyn có th dng RTF hoc Text không
định dng:
Private Sub rtfText_OLEStartDrag(Data As RichTextLib.DataObject, _
AllowedEffects As Long)
If rtfText.Se
ectMove Or vbDropEffectCopy
Basic kích hot biến c OLEDragOver trên
mi đố s
đối tư ect đã được chun b bi đối tượng ngun. Căn
c trên Effect giá tr tương
ng v i s dng nh chut trên đối tưng.
Giá tr th có giá tr như cho trong bng sau:
lLength Then
Data.SetData rtfText.SelRTF, vbCFRTF
Data.SetData rtfText.SelText, vbCFText
Else
Data.SetData rtfText.TextRTF, vbCFRTF
Data.SetData rtfText.Text, vbCFText
End If
AllowedEffects = vbDropEff
End Sub
2. Chun b cho thao tác nh trên đối tượng ngun
Khi hot động kéo đang xy ra, Visual
i tưng mouse di chuyn ngang qua nó. Biến c này nhn các tham
ng DataObject giá tr Eff
các thông tin này, người lp trình s gán cho tham s
i hot động s được thc hin khi ngư
effect có
Hng Giá tr
0 vbDropEffectNone
1 vbDropEffectCopy
Giáo trình Visual Basic 6.0 163
2 vbDropEffectMove
&H80000000 vbDropEffectScroll
Giá tr cu ó d
khi m i chuy ouse thanh cun c . Tham s trng thái
a giá tr xác định tr ái mouse đang di chuyn theo hướng vào hay
i chuy ngang q có giá tr như sau:
Hng Giá
i cùng ý nghĩa đối tượng đích s cun ni dung bên trong n
ouse d n trên m a Listbox
(State) ch ng th
ra khi hoc d n ua đối tượng và
tr
0 vbEnter
1
2 er
vbLeave
vbOv
Ví d sau làm thay đ
n As Integer, Shift As Integer, X As Single, Y As Single, State As Integer)
ropEffectCopy
thay đổi màu nn ListBox khi kéo mouse ngang qua listbox.
use ra khi Listbox
rds.BackColor = vbWindowBackground
n thành màu vàng khi di chuyn mouse vào Listbox
lstWords.BackColor = vbYellow
m khi thc hin thao tác sao
chép trên đối tượng đí
Private Sub lstWords_OLEGive ong, _
DefaultCursors As Boolean)
' effect là Copy, s dng dng con tr
i màu n n Listbox khi kéo mouse ngang qua Listbox
Private Sub lstWords_OLEDragOver(Data As DataObject, Effect As Long,
Butto
If Data.GetFormat(vbCFText) Then
Effect = Effect And vbD
Else
Effect = vbDropEffectNone
End If
' Làm
If State = vbLeave Then
' Khôi phc màu nn khi di chuyn mo
lstWo
ElseIf Effect <> 0 And State = vbEnter Then
' Đổi màu n
End If
End Sub
Ngay sau biến c OLEDragOver xy ra trên đối tượng ngun, Visual Basic kích
hot tiếp biến c OLEGiveFeedback trên đối tượng y để nhn biết hot động
kéo tác động như thế nào đối vi đối tưng đích để có th thc hin thao tác tương
ng d dng con tr mouse đưc thay đổi khác nhau vi hot động sao chép
hoc di chuyn. Ví d sau thay đổi dng con tr Custo
ch.
Feedback(Effect As L
custom.
Giáo trình Visual Basic 6.0 164
Nguyn Đăng Quang
If Effect = vb opEffectCopy
DefaultCu
DefaultCursors = True
End If
End Sub
Cn lưu ý là nếu không cn thay đổi d thì không phi viết lnh cho biến
c OLEGiveFeedback.
Khi ng
OLED
tham s ường hp này, tác dng ca tham s
Effect ó th hin hành vi đưc quyết
định tr ng đích.
Th t g biến c OLEDragDrop trên Listbox.
b lstWords_OLEDragDrop(Data As DataObject, Effect As Long,
box.
chuyn.
Then
t = vbDropEffectMove
Ngay hot biến c
OLEC i viết lnh trong biến c này để hoàn tt
Dr Then
rsors = False
Screen.MousePointer = vbCustom
'Dng con tr np trong đối tượng Image.
Screen.MouseIcon = imgCopy.Picture
Else
ng con tr
3. Nh trên đối tượng đích
ười s dng nh mouse trên đối tượng đích, Visual Basic kích hot biến c
ragDrop trên đối tượng đích. Ngoài tham s State, biến c này nhn các
tương t như OLEDragOver. Trong tr
hơi khác so vi biến c OLEDragOver n
ên đối tư
c dưới đây minh ha lnh viết tron
Private Su
Button As Integer, Shift As Integer, X As Single, Y As Single)
' Khôi phc màu nn List
lstWords.BackColor = vbWindowBackground
' Xác định giá tr tham s Effect: sao chép hay di
If Effect And vbDropEffectCopy Then
Effect = vbDropEffectCopy
ElseIf Effect And vbDropEffectMove
Effec
End If
' Trong c hai trường hp, ch nhn d liu dng Text
Dim text As String
text = Data.GetData(vbCFText)
' Lnh x lý Text và np o ListBox
End Sub
sau khi biến c OLEDragDrop xy ra, Visual Basic kích
ompleteDrag. Người lp trình ph
Giáo trình Visual Basic 6.0 165
thao ng hn như xóa phn text trong đối
tưng yn (effect = vbDropEffectMove) hoc khôi
phc d động sao chép. Th tc dưới đây
minh h n Listbox.
ct As Long)
ct = vbDropEffectMove Then
a phn Text chn.
xt.SelText = ""
ngth = 0
End Sub
o biến c OLESetData trên RichTextbox ca d trên
en
vbCFText
Then
ext.SelLength Then
F, vbCFRTF
End
c đã thc hin trên đối tưng ngun ch
ngun nếu hot động di chu
liu trên đối tượng ngun nếu hot
a lnh viết trong biến c OLECompleteDrag trê
Private Sub rtfText_OLECompleteDrag(Effe
If Effe
' Nếu di chuyn thì xó
rtfTe
Else
' Nếu là sao chép thì thôi chn.
rtfText.SelLe
End If
4. Np d liu theo yêu cu
Khi phương thc GetData ca đối tượng DataObject trên đối tượng đích để nhn
d liu mt dng o đó, Visual Basic ch hot biến c OLESetData trên đối
tượng ngun. Lnh viết ch
như sau:
Private Sub rtfText_OLESetData(Data As RichTextLib.DataObject, _
DataFormat As Integer)
If DataFormat = vbCFText Th
If rtfText.SelLength Then
Data.SetData rtfText.SelText, vbCFText
Else
Data.SetData rtfText.text,
End If
ElseIf DataFormat = vbCFRTF
If rtfT
Data.SetData rtfText.SelRTF, vbCFRTF
Else
Data.SetData rtfText.TextRT
End If
If
End Sub
5. Kéo-nh File
Giáo trình Visual Basic 6.0 166
Nguyn Đăng Quang
Windows Explorer h tr o nh tp tin nhiu ng dng windows th làm
đối tượng đích cho hot động kéo-nh t windows explorer. Phn y trình bày
cách thc hin thao tác kéo-nh tp tin.
Yếu t g DataObject. Nếu
ngưi đích cho hot động kéo-nh file thì
phi k liu dng vbCFFile hay
không np tên tp tin khi người s dng nh tp tin trên
Listbo
ount
es.AddItem Data.Files(i)
ng)
ight$(File1.path, 1) <> "\", "\", "")
- 1
ta.Files.Add path & File1.List(i)
Hình 1 giao din chương trình thc hin chc năng kéo nh tp tin.
Ca s n trình bày ni dung tp tin AutoDrop.vbp được o-nh t
Windows Explorer, còn ca s phía dưi trình bày danh sách tp tin được nh t
hp hi.
chính ca hot động này thuc tính files ca đối tượn
lp trình mun ng dng làm đối tượng
im tra xem đối tượng DataObject cha d
. Ví d sau minh ha cách
x :
If Data.GetFormat(vbCFFiles) Then
For i = 1 To Data.Files.C
lstFil
Next
End If
S kin OLEStartDrag viết sau đây minh ha đối tưng FileListBox làm đối tượng
ngun cho hot động kéo nh:
Private Sub File1_OLEStartDrag(Data As DataObject, AllowedEffects As
Lo
Dim i As Integer, path As String
path = File1.path & IIf(R
Data.Files.Clear
For i = 0 To File1.ListCount
If File1.Selected(i) Then
Da
End If
Next
If Data.Files.Count Then
Data.SetData , vbCFFiles
AllowedEffects = vbDropEffectCopy
End If
End Sub
6.3 là d
phía trê
thoi File bên p
Giáo trình Visual Basic 6.0 167
nh 16.3: Kéo nh file
Bài tập Visual Basic - Phần cơ bản
168
BÀI TẬP PHẦN CƠ BẢN
Bai tập 1
Viết 1 form nhập 2 số và bấm nút để cho kết quả phép
cộng
Chương trình khi chy sẽ cho kết quả như sau:
Hướng dẫn:
1. Khởi động Visual Basic , chọn New/ Standard
EXE
2. Điu chỉnh các thuộc tính của form1 theo nh ư
bảng sau:
Thuộc tính
(Property)
Giá trị (Value)
Name frmTinh
Caption Cong hai so
Height 2500
Width 2800
3. Nhấp đúp Label trên Toolbox đ đt Label lên
giữa form. Di chuyển đặt c thuộc tính
theo như bảng sau:
Thuộc tính
(Property)
Giá trị (Value)
Name Label1
Caption Nhap so thu 1
4. Làm tương tnhư ớc 3 vi các thuộc tính
theo như bảng sau:
Thuộc tính
(Property)
Giá trị (Value)
Name Label2
Caption Nhap so thu 2
5. Nhấp đúp Textbox trên Toolbox. Textbox th
nhất sẽ xuất hiện chính giữa form. Di chuyển
và điều chỉnh các thuộc tính theo bảng sau:
Thuộc tính
(Property)
Giá trị (Value)
Alignment 1 - Right justify
Name txtSo1
Height 315
Width 735
6. Nhấp đúp Textbox trên Toolbox. Textbox th
hai sxuất hiện chính giữa form. Di chuyển
và điều chỉnh các thuộc tính theo bảng sau:
Thuộc tính
(Property)
Giá trị (Value)
Alignment 1 - Right justify
Name txtSo2
Height 315
Width 735
7. Nhấp đúp Textbox trên Toolbox. Textbox th
ba sẽ xuất hiện chính giữa form. Di chuyển
điều chỉnh các thuộc tính theo bảng sau:
Thuộc tính
(Property)
Giá trị (Value)
Alignment 1 - Right justify
Name txtTong
Lock True
Height 315
Width 735
8. Nhấp đúp CommandButton trên Toolbox.
Button s xuất hiện chính giữa form. Di
chuyển và điu chỉnh các thuộc tính theo bảng
sau:
Thuộc tính
(Property)
Giá trị (Value)
Name CmdTinh
Caption Tinh
Height 330
Width 1335
9. Nhấp đúp CommandButton đ viết lệnh cho
chức năng tính toán khi người dùng bấm vào
nút này. Cửa s lệnh sẽ xuất hiện với phần
khai báo thtục khi bấm nút được định nghĩa
sẵn:
Private Sub CmdTinh_Click()
End Sub
Nhập lệnh đ cuối cùng ta có
Private Sub CmdTinh_Click()
txtTong.Text = Val(txtSo1.Text) +
Val(txtSo2.Text)
End Sub
10. Bấm nút Run trên Toolbar hoặc F5 để chạy
chương trình. Nhập 2 số vào 2 text box. Bấm
nút tính. Kết quả cộng 2 số xuất hiện trong ô
thứ 3.
11. Chọn File/Save Project để save các tập tin của
chương trình như sau:
FrmTinh.FRM Tập tin định nghĩa form
frmTinh)
Vd1.VBP Tập tin định nghĩa dự án)
Thử thay đối các property sau và quan sát các thay đổi trên form
Appearance -> Flat
BackColor Đổi màu nền form
BorderStyle Thay đổi các dạng viền form
Bài tập Visual Basic Phần căn bản
169
i tập 2
Thiết kế chương trình kiểm tra thuộc tính Alignment của Label bằng cách sử dụng đối tượng Option Button.
Chương trình khi hot động có dạng:
Khi click mouse vào 1 trong 3 option Left, Center, Right , Caption của Label sẽ đưc thay đổi tương ứng
Hướng dẫn
1. Chọn New/Standard EXE
2. Đặt các thuộc tính cho form như sau:
Thuộc tính Giá tr
Name frmMain
Caption Bai tap 1
BorderStyle 1 Fixed Single
Control Box False
3. Đặt Label với các thuộcnh
Thuộc tính Giá tr
Name lblNotify
Caption
BorderStyle 1 Fixed Single
4. Đặt Frame với các thuộc tính
Thuộc tính Giá tr
Name Frame1
Caption Label alignment
5. Đặt các Option Button trong Frame vi Name
và Caption lần lượt như sau:
Thuộc tính Giá tr
Name OpLeft
Caption Left
Name OpCenter
Caption Center
Name OpRight
Caption Right
6. Đặt CommandButton với các thuộc tính sau
Thuộc tính Giá tr
Name CmdClose
Caption Close
Định nghĩa lệnh cho các s kiện Form_Load
(Khi nạp Form), OpClick (Khi click các Option
Private Sub Form_Load()
OpLeft.Value = True
End Sub
Private Sub CmdClose_Click()
Unload Me
End Sub
Private Sub OpLeft_Click()
lblNotify.Caption = "Label is justified
left"
lblNotify.Alignment = 0
End Sub
Private Sub OpRight_Click()
lblNotify.Caption = "Label is justified
right"
lblNotify.Alignment = 1
End Sub
Private Sub OpCenter_Click()
lblNotify.Caption = "Label is justified
center"
lblNotify.Alignment = 2
Làm thêm
Điều chnh TabIndex ca các đi ợng để khi bắt đầu chy chương trình. Nút Close nhận Focus, sau
đó là c Option Button Left, Center, Right.
Bài tập Visual Basic - Phần cơ bản
170
End Sub
Bài tập 3
Viết 1 chương trình thực hiện một máy tính đơn giản gồm các nút bấm +, -, x, / . Nhp 2 số cần tính
và bấm nút tương ứng đ cho kết quả trong một Label. Form ch ương trình có dạng như sau:
Lưu ý:
Dạng viền của form - Không thay đổi kích thước
Font tiếng việt
Làm thêm:
Thay các nút bấm phép toán bằng các nút chọn (Option Button)
Bài tập 4
Viết chương trình thực hiện 1 form có dạng sau:
Họ tên được nhập vào TextBox
Khi bm nút Nhập , h tên nhập vào được cập nhật vào nội dung hiện phía d ưới
Viết lệnh thay đổi chiều cao FORM sao cho khi ch ưa bấm nút cập nhật, chiều cao FORM chỉ
đủ trình bày phần TextBox và bút bấm phía trên.
Bài tập Visual Basic - Phần cơ bản
i tập 5
Thiết kế chương trình có dng sau:
Các Option Button dùng đ
Enable/Disable ho
Button Exit dùng đ kế
t thúc chương tr
Form th 2 luôn xuất hi
n bên dư
Hãy viết lệnh để khi bấm nút Exit (kế
t tc chương
i tập 6
Thiết kế chương trình ki
m tra các sự kiện MouseMove, MouseDown trên form:
 
   
ư
 ươ   
ướ
1. Đặ
2.  
3.    

Enable/Disable ho
ạt động của Button Show.
t thúc cơng tr
ình nhưng ch xuất hiện khi form th
hai xu
n n
ới form th 1
t thúc chương
trình ), c 2 form đóng lại.
m tra các s kin MouseMove, MouseDown trên form:
 
ư
ển mouse trên form
ặc phải ược bấm
   
   xảy ra sự kiện
               
171
hai xu
ất hiện.
     
Bài tập Visual Basic - Phần cơ bản
Bài tập 7
Viết chương trình nh
ập họ tên, phái ngày tháng n
báo tuổi và nhân xưng của người
đó theo tu
Nam:
Tuổi Nn xưng
1-10 Cháu
11
-
17
Em
18-34 Anh
35-70 Ông
71
-
C
Nữ
Tuổi Nn xưng
1-10 Cháu
11-23 Em
24-30 Ch
31-65
66- Cụ
Lưu ý:
Chương trình ki
ểm tra dữ liệu nhp ngày tháng thông o lỗi nếu d liu nhập không
hợp lệ bằng hàm MsgBox.
Phái nhp đư
ợc chọn bng các Option Button
Đ
ịnh nghĩa Tabstop và hotkey cho các ô nhp dữ liu
Sử dụng lệnh End đ
kết thúc ch
Bài tập 8
Viết chương trình giải và biện luận ph
ương tr
thông báo l
ỗi và thông báo kết quả sử dng MsgBox
Bài tập 9
Viết chương trình kim tra hoạt đ
ộng ca các vòng lp For..Next, Do While.. Loop và Do..Until
b
ằng cách thiết kế form có dạng hình bên:
Mỗi nút bấm s làm xuất hi
ện 20 dòng
trong textbox bên trái t
loại vòng lp
sử dụng
lệnh đ
ịnh nghĩa cho Button For..Next
như sau.
Private Sub cmdFor_Click()
Dim strBegin As String
Dim strEnd As String
Dim strMsg As String
Dim i As Integer
strBegin = "This is line #"
strEnd = " of a For..Next Loop"
For i = 1 To 20
strMsg = strMsg & strBegin
strMsg = strMsg & i
strMsg = strMsg & strEnd & vbCrLf
txtReport.Text = strMsg
Next I
End Sub
p h tên, phái và ngày tháng n
ăm sinh của một người. Ch
ương tr
đó theo tu
ổi. Thang phân loại như sau:
m tra d liệu nhập ngày tháng thông báo lỗi nếu dữ liu nhp không
c chn bng các Option Button
nh nghĩa Tabstop và hotkey cho các ô nhập dữ liệu
kết thúc ch
ương trình thay vì dùng lệnh Unload Me
ương tr
ình bậc 2. Chương trình có ki
ểm tra dữ liệu nhập. Các
ỗi và thông báo kết qu s dụng MsgBox
ng của các vòng lặp For..Next, Do While.. Loop và Do..Until
ng cách thiết kế form có dng hình bên:
n 20 dòng
loi vòng lặp
nh nghĩa cho Button For..Next
strMsg = strMsg & strEnd & vbCrLf
172
ương tr
ình sẽ thông
m tra dữ liu nhập ngày tng và thông o lỗi nếu d liu nhập không
m tra d liệu nhập. Các
ng ca các vòng lp For..Next, Do While.. Loop Do..Until
Bài tập Visual Basic - Phần cơ bản
Bài tập 10
Viết chương trình t
ạo form dạng sau. màu tô (Fill Color) và mu tô (Fill Style) của Shape bên
trái thay đ
ổi theo giá trị chọn trong các Option Button
Bài tập 12
Viết chương trình máy tính số nguyên
Bài tập 13
Viết chương trình thực hiện một ch
ương tr
thực hiện các chức năng t
ìm (Find) và thay th
Bài tập 14
Viết chương trình quản lý l
ương đơn gi
o form có dạng sau. màu (Fill Color) mẫu (Fill Style) của Shape n
ổi theo giá tr chọn trong các Option Button
đơn giản bằng cách sử dụng mảng đối tượng đi
ều khin
ương tr
ình soạn thảo văn bản đơn giản, chương tr
ình cho phép
ìm (Find) thay th
ế (Replace)
ương đơn gi
ản bng cách thiết kế form có dạng sau:
173
o form có dạng sau. màu tô (Fill Color) mu tô (Fill Style) ca Shape bên
u khin
ình cho phép
Bài tập Visual Basic - Phần cơ bản
Yêu cầu:
Họ tên nhân viên đư
ợc nhập vào textbox
Chức vụ nhân viên đư
ợc chọn trong combo box
M
ỗi khi chức vụ nhân viên
ơng
Khi bm nút Nhập
, nhân viên m
Tổng lương c
ủa các nhân viên trong danh sách nhp
Giá tr này đư
c cập nhật ngay sau khi danh sách nhp có thay
Các nút bấm >> << đ
ể chuyn nhân viên ra hoặc vào danh sách. Mỗi khi có thay
gtrị tổng phải đư
ợc cập nh
Thêm vào 2 nút b
ấm Up, Down
lên phía trên; khi b
ấm t Down, phn t ti v trí hộp sáng
Bảng chức vụ và mức l
ương cho như sau:
Ch
c v
Giám đ
P.Giám đ
Trư
ng phòng
Pphòng
Nhân viên
Bài tập 15
Thiết kế chương trìnhgiao diện nh
ư sau:
Yêu cầu
Khi chưa nhập h tên, nút
Nhap
Khi bấm nút Nhap
, tên nhân viên và, phái
thông báo tổng số nhân viên đ
ã nh
Sau khi bấm nút Nhap
, ho tên đư
Khi b
ấm nút Danh sách nhân viên Nam/N, form th hai xuất hin vi listbox chỉ có tên các
nhân viên Nam/N
c nhp vào textbox
Họ tên
c chọn trong combo box
Chức vụ
i khi chức v nhân viên
được chọn. Mức lương tương
ứng xuất hiện trong hộp
, nhân viên m
ới đưc nhập vào ListBox bên trái
a các nhân viên trong danh sách nhập
đư
ợc trình bày trong textbox Tong.
c cp nhật ngay sau khi danh sách nhập có thay
đổi.
chuyn nhân viên ra hoặc vào danh sách. Mỗi khi có thay
c cp nhậ
t.
m Up, Down
đ
khi bấm nút Up, phần tử tại vị trí hộp ng
m nút Down, phần tử tại vị trí hộp sáng
đư
ợc dời xuống phía d
ương cho như sau:
ức vụ
M
ức l
ương
Giám đ
ốc
15
.000.000
P.Giám đ
c 8.000.000
ởng phòng
7.500.000
Phó phòng
6.000.000
Nhân viên
5.000.000
ư sau:
Nhap
ở trạng ti Disable.
, tên nhân viên và, phái
nh
p vào Listbox, dòng trạng thái d
ã nh
ập.
, ho tên đư
ợc xoá trắng và textbox Ho ten nhận focus.
m nút Danh sách nhân viên Nam/Nữ, form thứ hai xuất hiện với listbox ch có tên các
174
ng xut hiện trong hộp
c trình y trong textbox Tong.
chuyn nn viên ra hoặc vào danh sách. Mi khi có thay
đổi,
khi bấm nút Up, phn t ti v trí hp sáng
được dời
c dời xuống phía d
ưới.
p vào Listbox, dòng trng thái d
ưới form
m nút Danh sách nhân viên Nam/N, form th hai xuất hin vi listbox chỉ có tên các
Bài tập Visual Basic - Phần cơ bản
Bài tập 16
Định nghĩa thêm các chức n
ăng sau cho chương tr
Ngư
ời dùng nhập giá trị u vào textbox. Giá tr này phản nh ngay trên thanh cun t
ứng.
Thêm check box In Sync. M
i khi
nhau. Mỗi khi một thanh cuộn
đư
Bài tập 17
Đồng hồ c dưới bên phải
đư
giờ hệ thống
Textbox Timer Interval nh
ập khong thời gian
đếm cho Label phía dư
ới. Sau mỗi kh
gian, b đếm được cập nhật.
Nút Start/Stop timer khởi đ
ộng/ ng
Bài tập 18
Mở rộng bằng cách thêm o
form các đối tượng
DriveListBox, DirListBox,
FileListBox. Cho phép người
dùng duyệt cây thư mc để
lựa tập tin ảnh cần xem.
Bài tập 19
Sử dụng đối tượng Timer, viết ch
ương tr
một trái bóng chuyn động trên form.
Hướng dẫn:
V trái bóng bằng đối tư
ợng Shape vi
property Shape = Circle
Trái bóng chuyn đ
ộng bằng cách thay
các thuộc tính Left Top c
ủa
Shape
ăng sau cho chương tr
ình trộn màu trong ví dụ:
i ng nhp giá tr màu vào textbox. Giá trị này phản ảnh ngay trên thanh cuộn t
ỗi khi
được check, các giá trị màu RGB s
luôn ln giống
đư
ợc kéo, các thanh cuộn khác cũng di chuyển t
ương
đư
c cập nhật theo
p khoảng thời gian
i. Sau mỗi kh
oảng thời
ộng/ ng
ưng b đếm
ương tr
ình tạo
ng Shape với
ộng bng cách thay
đổi
a
đối tượng
175
i ng nhp giá tr màu o textbox. Giá tr y phản nh ngay trên thanh cuộn t
ương
ln luôn giống
ương
ứng.
Bài tp Visual Basic - Phần thuật toán
176
PHẦN BÀI TẬP VỀ THUẬT TOÁN
Bài 1 : Viết chương trình tính tổng T = 1 + 2 + … + N, với N là s nguyên 0, nếu N=0 thì T=0.
Giao din t thiết kế cho phù hợp.
Bài 2 : Viết chương trình tính tổng T = 1 - 2 + 3- 4 + (-1)
N+1
N, với N là s nguyên 0, nếu N=0
thì T=0. Giao din tự thiết kế cho phù hợp.
Bài 3 : Viết chương trình nhp một s nguyên dương 3 ch số, viết ra n hình dạng: trăm,
chục, đơn vị. Ví dụ, nhập vào s : 246, kết quả cho là : 2 Trăm 4 chục 6 Đơn vị. Giao din tự thiết
kế cho phù hp.
Bài 4 : Viết chương trình cho phép nhp vào một số và kiểm tra s đó phi là số nguyên t hay
không. Giao din t thiết kế cho phù hợp.
Bài 5 : Viết chương trình nhập 3 s tìm ra s lớn nhất giữa ba s số. Giao din tự thiết kế cho
phù hợp.
Bài 6 : Viết chương trình cho phép nhp vào (quy định trước) : s hạng đầu tiên, công bi của một
cấp s nhân, giao din tự thiết kế cho phù hợp. Cho phép người dùng tìm ra :
a. Số hạng bất kỳ của nó.
b. Tổng ca n s hạng đu tiên của nó.
Bài 7 : Viết chương trình cho phép nhp vào 2 s a và b, giao din tự thiết kế cho phù hợp. Tìm
a. USCLN
b. Tìm và in ra phân s tối gin của a/b ( d a= 6, b = 12 thì in ra : a/b = ¾)
Bài 8 : Viết chương cho phép nhập vào một mảng A gồm 7 phn tử, thực hiện các yêu cu sau (
Giao din t thiết kế cho phù hợp, có th tham khảo giao din bên dưới):
a.
Tính tng mng.
b.
Tính giá tr lớn nhất.
c.
Tính giá tr nhỏ nhất.
d.
Đếm s lần xuất hiện của x (vi x nhập t bàn phím).
Bài tp Visual Basic - Phần thuật toán
177
Bài 9 : Viết chương trình cho phép nhp vào mt mng A có 7 phần t và sắp xếp mảng A đó
theo th t tăng dần, giảm dần. Giao diện t thiết kế cho phù hp.
Bài 10 : Viết chương trình nhập vào mng A gồm n phần t (n nhập t bàn phím). Kim tra mng
A có đối xứng hay không? Giao diện tự thiết kế cho phù hợp.
Bài 11 : Viết chương trình nhập vào mng A gồm n phần t (n nhập vào t bàn phím). Kiểm tra
mảng là tăng hay gim hay không tăng không gim. Giao diện t thiết kế cho phù hp.
Bài 12 : Viết chương trình nhập vào một câu không quá 50 ký tự. Đếm xem trongu bao nhiêu
chữ “Pascal”. Giao din tự thiết kế cho phù hp.
Bài 13 : Viết chương trình nhập vào một câu không quá 50 tự. Giao diện t thiết kế cho phù
hợp.
a. Đếm xem trong câu có bao nhiêu ký t là số.
b. Tính tổng c ch số trong câu.
Bài 14 : Viết chương trình nhập vào một câu, đếm xem trong câu có bao nhiêu ch hoa, bao nhiêu
chữ thường. Giao diện t thiết kế cho phù hp.
Bài 15 : Viết chương trình nhập vào một câu, tìm xem trong câu vừa nhập có chứa chuiem”
không, nếu có thì thay chui “em” thành chuỗi anh”. Nếu không có thì thông báo là không có.
Giao din t thiết kế cho phù hợp.
Bài 16 : viết chương trình nhập vào một u bất kỳ, in lạiu đó với mỗi từ trên mt dòng. Giao
diện t thiết kế cho p hợp.
Bài 17 : Viết chương trình nhập vào một chuỗi, đảo ngược chuỗi và xuất ra màn hình. Ví d nhập
vào câu :Tin Hoc”, in ra là : Hoc Tin. Giao di ện t thiết kế cho phù hp.
Bài 18 : Viết chương trình nhập vào mng A nguyên 10 phần tử. Vic nhập s được kiểm tra với
điều kiện các phần t của mảng phải lớn hơn 0. sau đó thực hiện các công vic sau (Giao din tự
thiết kế cho phù hợp) :
a. In mng theo th t ngược lại với th tự đã nhp.
b. In ra màn hình các gtr nguyên dương chia hết cho 2.
c. m và in ra các phần tử lớn nhất và nh nhất của mng.
d. m các s nguyên t trong khong t min tới max.
e. nh max!.
f. m ucln và bcnn của min và max.
Bài 19 : Viết chương trình gii phương trình bậc 2: ax
2
+ bx + c =0. Với yêu cầu giao diện như sau
- Cho phép nhập trực tiếp các giá tr a, b, c
- Cho phép thay đổi giá tr a, b, c (nguyên) bng các thanh cuộn
- In kết qu giải tương ứng với tất cả các trường hợp.
Bài 21 : Viết chương trình nhập vào 2 s nguyên a, b, Giao din t thiết kế cho phù hợp :
Bài tp Visual Basic - Phần thuật toán
178
a. Tính tngc s trong khoảng t a tới b.
b. Tính tổng các s lẻ trong khong t a tới b.
c. Tính tổng các s chẵn trong khoảng t a tới b.
Bài 22 : Viết chương trình quản một công ty với yêu cu:
H tên nhân viên được nhập vào textbox Ho ten.
Chức v nhân viên được chọn trong combox Chuc vu.
Mỗi khi chức v nhân viên được chọn mức lương tương ng xuất hiện textbox Luong.
Khi nhn nút Nhap, nhân viên mới được nhập vào ListBox Danh sach nhan vien.
Xoá một nhân viên được chọn trong danh sách bằng nút, Xoa. Chọn Multiselect= 0
Tong: tổng lương trong danh sách. Được cp nhật mỗi khi danh sách có thay đi.
Bài 23 : Viết chương trình phân tích một s nguyên dương nhp vào ra các thừa s nguyên t của
nó. Giao diện tự thiết kế cho phù hp.
i 24 : Viết chương trình đổi một số nguyên dương nhập vào hệ thập phân sang nh phân. Giao
diện t thiết kế cho p hợp.
Bài 25 : Viết chương trình đổi một số nguyên dương nhập vào hệ thập phân sang h bát phân.
Giao din t thiết kế cho phù hợp.
Bài 26 : Viết chương trình đổi một số nguyên dương nhập vào hệ thập phân sang h thập lục
phân. Giao din tự thiết kế cho p hợp.
Bài 27 : Viết chương trình đổi một số nhị phân cho trước (nhập vào) sang h thập phân. Giao diện
tự thiết kế cho p hp.
Bài 28 : Viết chương trình đổi một số bát phân cho trước (nhập vào) sang h thập phân. Giao diện
tự thiết kế cho p hp.
Bài tập visual basic phần data
BÀI T
P TRUY XUẤT C
Để thực hiện các bài tập dưới
đây, s
-
Northwind (NWIND.MDB)
- Biblio (BIBLIO.MDB)
Tm ActiveX Control MS Databound
Tm ActiveX Control MS Databound List Control o Project
Bài tập 1: Sử dụng Text box đ
duyt và chỉnh sa dữ liu
Thi
ết kế form duyệt tập tin Employee cha trong c
Đối tượng Thu
ộc tính
Form Name
Caption
Data Name
Caption
DatabaseName
RecordSource
TextBox
Name
DataField
DataSource
TextBox Name
DataField
DataSource
TextBox Name
DataField
DataSource
TextBox
Name
DataField
DataSource
Enabled
Label
Name
Caption
Label Name
Caption
Label Name
Caption
P TRUY XUT C
Ơ SỞ DỮ LIỆU BẰNG DATACONTROL
đây, s
ử dụng các cơ sở dữ liệu
Northwind (NWIND.MDB)
Tm ActiveX Control MS Databound
Grid Control vào Project
Tm ActiveX Control MS Databound List Controlo Project
duyt và chỉnh sửa dữ liệu
ết kế form duyt tp tin Employee chứa trong c
ơ s
ở dữ liệu Access NWIND.mdb
c tính
Giá tr
FrmData
Bound Browser
DatEmployees
Employees
DatabaseName
<<Path to nwind database>> NWIND.MDB
RecordSource
Employees
TxtLastName
LastName
DatEmployees
TxtFirstName
FirstName
DatEmployees
TxtBirthDate
BirthDate
DatEmployees
TxtEmployeeId
EmployeeID
DatEmployees
False
Label1
Employee:
Label2
Birth Date:
Label3
Employee ID:
179
d liu Access NWIND.mdb
Bài tập visual basic phần data
- Bấm F5 đ
chạy ch
DataControl đ
duyt xem dữ liu.
-
Trong quá trình xem, th
rồi quay trỏ lại đ
xem kết quả.
chuy
ển sang mẫu tin mi.
- Đi
ều chỉnh thuộc tính ReadOnly thành True.
thay đổi được.
- Thay đ
ổi các giá trị ca thuộc tính EOF
- T
ập tin Employees có Field Photo chứa nh nh ca nhân viên, thêm
tượng đi
ều khiển lên form
Bài tập 2: Sử dụng DBCombo
T
ạo form duyệt bảng Title với Publishers ID Name
Đối tượng Thuộc tính
Data1 Connect
Access
DatabaseName
Biblio.mdb
Recordsettype 0
-
RecordSource
Titles
Data2 Connect
Access
DatabaseName
Biblio.mdb
Recordsettype 2
-
RecordSource
SELECT PubID,
PubID
TextBox Name
TxtTitle
Datasource
Data1
DataField
Title
chy ch
ương trình. S
dụng các nút Next, Previous ca
duyt xem dữ liệu.
Trong quá trình xem, th
điều chỉnh dữ li
ệu, di chuyển sang mẫu tin mi,
xem kết quả.
Để ý dliệu đư
ợc cập nhật sau khi di
n sang mu tin mới.
u chnh thuộc tính ReadOnly thành True.
Đ
ý dữ liệu không th
ổi các giá tr của thuộc tính EOF
Action để xem tác dụng.
p tin Employees Field Photo chứa hình ảnh của nhân viên, thêm
u khin lên form
để thể xem được hình ảnh này.
o form duyệt bng Title vi Publishers’ ID và Name
được lấy từ bảng
Publisher
Giá tr
Access
Biblio.mdb
-
dbOpenTable
Titles
Access
Biblio.mdb
-
dbOpenSnapshot
SELECT PubID,
Name FROM Publishers ORDER BY
PubID
TxtTitle
Data1
Title
180
dụng các nút Next, Previous của
u, di chuyn sang mu tin mới,
c cp nht sau khi di
ý là dữ liu không th
p tin Employees có Field Photo cha nh nh ca nhân viên, thêm
đối
Publisher
Name FROM Publishers ORDER BY
181
Bài tập visual basic phần data
TextBox Name TxtYear
Datasource Data1
DataField Year Published
TextBox Name TxtISBN
Datasource Data1
DBCombo Name DBCombo1
Datasource Data1
DataField PubID
Rowsource Data2
BoundColumn PubID
ListField Name
Điều chỉnh lại form để xem thêm thông tin về tên tác giả của mỗi quyển sách (lấy từ
tập tin Authors và Field AU_ID)
Bài tập 3: Sử dụng Listview để xem nội dung cơ sở dữ liệu
- Thiết kế form xem tập tin Employees gồm các vùng EmployeeID, FirstName,
LastName, BirthDate, HomePhone.
- Thêm chức năng sửa chữa , cho phép người dùng hiệu chỉnh các vùng trên trừ
EmployeeID. Cập nhật thay đổi trong cơ sở dữ liệu và listview
- Thêm chức ng xoá một mẫu tin. Cập nhật thay đổi trong cơ sdữ liệu và
listview
Hướng dẫn: Sử dụng lệnh để
- Mở cơ sở dữ liệu NWIND.MDB
- Mở recordset
- Duyt cơ sở dữ liệu để thêm (Add) các vùng cần xem của mỗi mẫu tin vào
listview
Bài tập 4: Sử dụng DBGrid để xem nội dung cơ sở dữ liệu
Thiết kế form xem nội dung tập tin Titles (các tựa sách) t c ơ sở dữ liệu
BIBLIO.MDB
Tm ComboBox chọn nhà xuất bản (Publisher) đngười dùng thể chọn chỉ xem
các tựa sách theo một nhà xuất bản
Tm ComboBox chọn tác giả (Authors) để người dùng thể chọn chỉ xem các tựa
sách theo một tác giả.
Bài tập Visual Basic - Phần nâng cao
BÀI T
Bài tập 1
Viết chương trình v đ
ồ thị hàm số y=sin(x) trong
lnh định nghĩa cho nút Draw
Const pi = 3.141593
With Picture1
.ScaleLeft = -
(.ScaleWidth / 2)
.ScaleTop = -
(.ScaleHeight / 2)
End With
kx = Picture1.ScaleWidth / (2 *
pi)
ky = Picture1.ScaleHeight / 2
For i = -pi To pi Step 0.2
Picture1.Line -(kx * i, -
ky * Sin(i))
Next i
Làm thêm:
Thay đi đoạn vẽ đồ thị
Thay đi màu vẽ, kiểu nét vẽ, độ
y t v
Thêm các TextBox trên form, cho ngư
đ
ộng vẽ lại theo các giá trị nhập vào
Thử vẽ đ
ồ thị của một hàm số khác
Bài tập 2
Viết chương trình v
tự do bằng Mouse.
- Bm phím trái đ
vẽ khung ch nhật
- Bm phím phải đ
vẽ hình ch nhật (khung
có tô nền)
u v được gán ng
u nhiên cho mỗi ln vẽ
Bài tập 3
Viết chương trình v
hình theo kiu bài tp 2.
Chương trình s
dụng menu gồm các chức n
- Ch
ọn kiu hình vẽ (menu Draw)
- Các tu
chọn về màu nét vẽ, kiu t vẽ và bề dày nét v
-
Các menu Draw Options có
menu khi b
m phím phải chuột trên PictureBox
- Chương trình cho phép l
ưu h
dụng Common Dialog đ
ể thực hin chức n
BÀI T
P PHẦN NÂNG CAO
th m sy=sin(x) trong
đoạn [-Pi, Pi]
(.ScaleWidth / 2)
(.ScaleHeight / 2)
pi)
ky * Sin(i))
dày nét v
Thêm các TextBox trên form, cho n
ời dùng nhập phạm vi số điểm c
n vẽ. Ch
ộng v li theo các giá tr nhp vào
th ca một m skhác
t do bằng Mouse.
v khung chữ nhật
vẽ nh chữ nhật (khung
u nhiên cho mi lần vẽ
nh theo kiểu bài tập 2.
dng menu gm các chức n
ăng :
n kiu hình vẽ (menu Draw)
chn v màu t v, kiểu nét vẽ và bề dày nét vẽ
Các menu Draw Options có
thể chọn làm Popup
m pm phi chuột trên PictureBox
ưu h
ình đã vn tập tin đọc tp tin ảnh vẽ o
thc hiện chức n
ăngy.
182
n vẽ. Ch
ương trình t
để sửa chữa. S
Bài tập Visual Basic - Phần nâng cao




- Sau khi làm xong th
thay lệnh chn màu bng hp thoạ
Bài tập 4
Viết chương trình nhp dữ liệu về
đ
bóng đá th
ế giới. Thông tin v mỗi cu th
gồm
s
Họ tên
Quốc tịch
Dữ liệu ghi lên tập tin văn b
n theo dạng cho
ở hình dưới
Dử dụng NotePad hoặc Wordpad đ
xem li nộ
Bài tập 6
T
o một ImageList gm cờ của một số quốc gia nh
Viết chương trình nhập dữ liệu đ
ội tuyn bóng
trình bày trong Listview
Yêu cầu:
Quốc tịch cầu thủ đư
ợc chọn bng ImageCombo vi danh sách nh trên
Có th thay đ
ổi cách trình y listview bằng lnh View (
menu
Danh sách đư
ợc sắp xếp theo cột khi bm o tiêu
Nút xoá dùng xoá m
ột phn tử tron
Chương tr
ình cho ghi danh sách nh
thay lnh chọn màu bằng hộp thoạ
i ch
ọn màu trong Common Dialog
đ
ội tuyển
ế gii. Thông tin về mi cầu thủ
n theo dạng cho
xem lại nộ
i dung va tạo
Bài tập 5
Viết chương trình đọc một tập văn b
n cho hin kết quả
n một TextBox nhiều dòng bằng 2 cách:
- Sử dụng lệnh Line Input
- Sử dụng hàm Input và hàm Split
Tập tin được chọn bằng hộp thoại Open
o mt ImageList gm c của một số quốc gia nh
ư hình trên
ội tuyển bóng
đá th
ế giới giống bài tập 4. Danh sách các cu th nhp
c chọn bằng ImageCombo với danh sách hình trên
ổi cách trình bày listview bằng lệnh View (
Large Icon, Small Icon, List, Report
c sp xếp theo cột khi bấm vào tiêu
đề cột
ột phn tử tron
g Listview
ình cho ghi danh sách nh
p lên tập tin văn b
n theo dạng ở bài tập 4 (File/Save)
183
ọn màu trong Common Dialog
n cho hiện kết quả
ế gii ging i tp 4. Danh sách các cầu thủ nhập
Large Icon, Small Icon, List, Report
) trên
n theo dng bài tp 4 (File/Save)
Bài tập Visual Basic - Phần nâng cao
Bài tập 7
Bổ sung thêmi tập 6
Toolbar gồm các nút:
New Xoá danh sách nhập
Open Đọc danh sách từ tập tin
Save Ghi danh sách nh
ập lên tập tin
Delete Xoá m
ột cầu thủ trong danh sách
Large,
Small,
List,
Detail
Nhóm nút thay đ
ổi cách trình bày
Listview
Hộp DTPicker đ
nhập thêm thông tin về
ngày sinh
Chc năng m
(File/Open) cho phép
liệu đã nhập trước đó từ tập tin
Bài tập 8
Viết chương trình t
o một cấu tc TreeView với 1 nút gc có nhãn = Root vi 10 nút con có nhãn là
các số từ 1 đến 10
Bài tập 9
Sử dụng đối tư
ợng Treeview trình bày s
Bài tập 10
Viết chương trinh qu
n lý các chuyến bay quc tế có giao din nh
Yêu cầu:
Dữ liệu chứa trên tập tin v
ăn b
Dữ liệu được đ
ọc vào mảng record
p lên tp tin
ột cu th trong danh sách
i cách trình bày
nhp tm thông tin về
(File/Open) cho phép
đọc dữ
o một cu trúc TreeView với 1 nút gốc nhãn = Root với 10 t con có nhãn là
ng Treeview trình bày s
ơ đồ tổ chc của công ty Kova như hình
n lý các chuyến bay quốc tế có giao diện nh
ư hình sau.
ăn b
n (Tạo bằng NotePad)
ọc vào mng record
184
o một cu trúc TreeView với 1 nút gc có nhãn = Root vi 10 nút con nhãn
Bài tập Visual Basic - Phần nâng cao
Chương trình s dụng các
nút <-- --> đ duyệt qua
các Record
Người sử dụng có th sủa
chữa nội dung các mẫu tin
ghi d liệu trở lại tập tin
Dung ng mỗi chuyến bay
tính theo phần trăm. Thanh
trượt thể lấy g trị trong
phạm vi 1-100 %
Chương trình s dụng
Toolbar cho c chức năng
Open, Save, Next, Previous,
sử dụng StatusBar để thông
o trng thái phím , tổng số
mẫu tin, mẫu tin hiện hành
Sử dụng ProgressBar đ
thông báo tiến trình
Bài tập 11
Viết chương trình son thảo văn b
n có
Định dạng ki
u chữ (FontName), c chữ (Font size), dáng ch (Bold, Italic, Underline)
Định dạng đoạn văn:
Canh l trái, lề phải,
canh giữa
M , lưu tr tập tin
dạng txt, rtf
Định nghĩa menu cho
các chc năng trong
chương trình
Định nghĩa toolbar cho
các chức năng thường
sử dụng
Định nga Statusbar
để thông báo: Giờ hệ
thống, trạng thái các
phím CAPS, NUM,
INS
thông báo tiến trình
đọc và ghi dữ liệu trên tập tin
n
đầy đủ tính chất của một trình soạn thảo v
ăn b
u chữ (FontName), cỡ chữ (Font size),ng chữ (Bold, Italic, Underline)
185
ăn b
n như:
u chữ (FontName), c chữ (Font size), dáng ch (Bold, Italic, Underline)
201
Mc lc
Chương 1: GII THIU
I. CÁC MÔI TRƯỜNG LP TRÌNH....................................................................... 1
II. CÁC ĐỐI TƯỢNG ĐIU KHIN CHUN TRÊN WINDOWS ....................... 2
III. GII THIU VISUAL BASIC ............................................................................. 3
1. Khi động - ca s khi động.................................................................................... 3
2. Màn hình làm vic...................................................................................................... 5
IV. CÁC THAO TÁC CƠ BN VI ĐỐI TƯỢNG TRÊN FORM...........................10
1. Đưa mt đối tượng lên form .................................................................................... 10
2. Chn đối tượng......................................................................................................... 11
3. Di chuyn .................................................................................................................11
4. Hiu chnh ................................................................................................................ 11
5. Xóa...........................................................................................................................11
V. GHI NP MT VISUAL BASIC PROJECT ........................................................ 11
1. Thêm form mi vào chương trình............................................................................ 11
2. Xóa mt form ........................................................................................................... 12
3. Ghi Project ...............................................................................................................13
4. Np Project............................................................................................................... 14
5. To Project mi........................................................................................................ 14
VI. MT CHƯƠNG TRÌNH VÍ D........................................................................... 15
Chương 2: Đối tượng và cách s dng đối tưng
I. ĐỐI TƯỢNG............................................................................................................17
1. Khái nim ................................................................................................................. 17
2. Các đặc đim............................................................................................................17
3. Truy xut .................................................................................................................. 18
4. Các thuc tính chung................................................................................................ 18
5. Các s kin chung.................................................................................................... 19
202
II. ĐỐI TƯỢNG FORM...............................................................................................20
1. Thuc tính ................................................................................................................20
2. Phương thc .............................................................................................................20
3. X lý s kin ............................................................................................................20
III. ĐỐI TƯỢNG LABEL............................................................................................22
1. Thuc tính ................................................................................................................22
2. X lý s kin ............................................................................................................22
IV. ĐỐI TƯỢNG TEXTBOX......................................................................................22
1. Thuc tính ................................................................................................................23
2. X lý s kin ............................................................................................................23
V. ĐỐI TƯỢNG COMMAND BUTTON...................................................................23
1. Thuc tính ................................................................................................................23
2. X lý s kin ............................................................................................................23
VI. FOCUS VÀ TH T TAB...................................................................................23
1. Focus ........................................................................................................................23
2. Th t TAB ..............................................................................................................24
3. Phím nóng ................................................................................................................24
4. Ví d.........................................................................................................................24
Chương 3: Kiu d liu – Hng – Biến
I. BIÊN .........................................................................................................................27
1. Định nghĩa ................................................................................................................27
2. Khai báo ...................................................................................................................27
3. Qui tc đặt tên biến...................................................................................................27
4. Truy xut biến ..........................................................................................................27
5. Phm vi s dng biến...............................................................................................28
6. Biến tĩnh ...................................................................................................................29
II. KIU D LIU.......................................................................................................30
III. HNG ....................................................................................................................30
IV. TOÁN T..............................................................................................................31
203
V. MT S HÀM CHUN ........................................................................................ 31
1. Hàm đại s ............................................................................................................... 31
2. Hàm thi gian..........................................................................................................31
3. Hàm chuyn đổi ....................................................................................................... 32
4. Hàm kim tra kiu d liu........................................................................................ 32
VI. HP THÔNG BÁO............................................................................................... 32
Chương 4: Các cu trúc điu khin
I. LNH ĐIU KIN IF..............................................................................................35
II. LNH CHN LA CASE ..................................................................................... 35
III. LNH LP FOR… NEXT.................................................................................... 36
IV. LNH LP DO LOOP.......................................................................................... 37
V. CHƯƠNG TRÌNH CON.........................................................................................38
1. Chương trình con Sub .............................................................................................. 39
2. Hàm.......................................................................................................................... 39
3. Khai báo ................................................................................................................... 40
Chương 5: Mng – Chui – Collection
I. MNG ...................................................................................................................... 41
1. Định nghĩa................................................................................................................ 41
2. Khai báo ................................................................................................................... 41
3. Mng đối tượng điu khin......................................................................................42
4. Ví d......................................................................................................................... 43
5. Mng động mng tĩnh ......................................................................................... 44
6. Mt s vn đề khác ..................................................................................................46
II. CHUI KÝ T....................................................................................................... 48
1. Khai báo ................................................................................................................... 48
2. Các hàm x lý chui ................................................................................................ 48
III. COLLECTION....................................................................................................... 49
1. Gii thiu .................................................................................................................49
2. Thao tác trên Collection........................................................................................... 50
204
3. Ví d khác ................................................................................................................53
Chương 6: TextBox – ListBox – ComboBox
I. TEXTBOX................................................................................................................55
1. Các thuc tính b sung.............................................................................................55
2. S kin......................................................................................................................55
3. Ví d.........................................................................................................................55
II. LISTBOX ................................................................................................................57
1. Các thuc tính...........................................................................................................58
2. Các phương thc ......................................................................................................59
3. S kin......................................................................................................................60
4. Mt s ví d..............................................................................................................62
III. COMBOBOX.........................................................................................................65
IV. DRIVELISTBOX, DIRLISTBOX, FILELISTBOX
1. DriveListBox............................................................................................................66
2. DirListBox................................................................................................................66
3. FileListBox...............................................................................................................66
Chương 7: Scrollbar – Image – Timer
I. SCROLLBAR ...........................................................................................................69
1. Các thuc tính...........................................................................................................69
2. S kin......................................................................................................................69
3. Ví d.........................................................................................................................69
II. IMAGE ....................................................................................................................70
III. TIMER....................................................................................................................71
1. Thuc tính ................................................................................................................71
2. S kin......................................................................................................................71
3. Ví d.........................................................................................................................71
Chương 8: Truy xut d liu
205
I. TRUY XUT D LIU BNG ĐỐI TƯỢNG ĐK CÓ KT NI CSDL............. 73
1. DataControl..............................................................................................................73
2. Các thuc tính .......................................................................................................... 73
3. Các đối tượng điu khin kết ni cơ s d liu................................................... 74
4. S dng Databound Listbox và Combobox.............................................................75
5. S dng Databound Grid Control (DBGrid) ........................................................... 78
II. TRUY XUT D LIU THÔNG QUA DATA ACCESS OBJECT .................... 84
1. Các thao tác cơ bn .................................................................................................. 84
2. Các thuc tính ca Recordset...................................................................................85
3. Các thao tác trên Recordset...................................................................................... 85
Chương 9: PictureBox –X lý mouse
I. PICTUREBOX ......................................................................................................... 91
1. Thuc tính ................................................................................................................ 91
2. Các phương thc đồ ha ..........................................................................................92
3. Các thuc tính qui định đơn v v............................................................................ 96
4. Các lnh ghi np nh................................................................................................97
II. X LÝ MOUSE......................................................................................................98
Chương 10: Menu – Common Dialog
I. Menu....................................................................................................................... 103
1. Định nghĩa menu....................................................................................................103
2. Viết lnh................................................................................................................. 104
II. COMMON DIALOG ............................................................................................ 106
1. Hp thoi Open, Save ............................................................................................ 106
2. Hp thoi chn màu ............................................................................................... 108
Chương 11: Kiu bn ghi – Tp tin
I. KIU BN GHI ..................................................................................................... 109
1. Định nghĩa.............................................................................................................. 109
2. Khai báo ................................................................................................................. 109
II. TP TIN................................................................................................................109
20
6
1. Định nghĩa ..............................................................................................................109
2. Phân loi.................................................................................................................109
3. Th tc truy xut d liu trên tp tin......................................................................110
4. Các lnh trên tp tin truy xut ngu nhiên .............................................................110
III. CÁC LNH TRÊN TP TIN VĂN BN ...........................................................113
Chương 12: Microsoft Windows Common Controls:
ImageList – Listview – ImageCombo
I. IMAGELIST ...........................................................................................................117
II. LISTVIEW ............................................................................................................117
1. Các thuc tính.........................................................................................................118
2. Các thuc tính ca đối tượng ListItem...................................................................120
3. Phương thc ...........................................................................................................120
4. S kin....................................................................................................................123
III. IMAGECOMBO ..................................................................................................123
1. Các thuc tính.........................................................................................................123
2. Các thuc tính ca đối tượng ComboItem .............................................................124
3. Các phương thc ....................................................................................................125
Chương 13: Microsoft Windows Common Controls:
Toolbar - Statusbar - Dtpicker
I. TOOLBAR..............................................................................................................127
1. S dng Toolbar.....................................................................................................127
2. Định nghĩa Toolbar ................................................................................................129
3. Định nghĩa nút Toolbar lúc chy chương trình......................................................130
II. STATUSBAR........................................................................................................131
1. S dng...................................................................................................................131
2. Viết lnh cho StatusBar..........................................................................................133
III. DTPICKER ..........................................................................................................135
1. Thuc tính ..............................................................................................................135
2. S kin....................................................................................................................137
207
Chương 14: Microsoft Windows Common Controls:
Treeview - Updown – Slider – Progressbar
I. TREE VIEW........................................................................................................... 139
1. Các thuc tính ........................................................................................................ 139
2. Các thuc tính ca đối tượng Node........................................................................ 140
3. Phương thc...........................................................................................................141
4. S kin ................................................................................................................... 143
II. UPDOWN ............................................................................................................. 144
1. Các thuc tính ........................................................................................................ 144
2. S kin ................................................................................................................... 144
III. SLIDER................................................................................................................ 145
1. Thuc tính ..............................................................................................................145
2. Phương thc...........................................................................................................146
3. S kin ................................................................................................................... 146
IV. PROGRESSBAR................................................................................................. 147
Chương 15: RichTextBox – Form MDI
I. RICHTEXTBOX .................................................................................................... 149
1. Các thuc tính ........................................................................................................ 149
2. Các phương thc.................................................................................................... 150
II. S DNG RICHTEXTBOX................................................................................151
1. Chn dáng v Font ch bng nút lnh trên Toolbar .............................................. 151
2. Chn Font ch bng lnh trên menu và hp thoi Font......................................... 152
3. S kin SelChange ................................................................................................. 152
III. S DNG CLIPBOARD....................................................................................153
1. Sao chép vào Clipboard ......................................................................................... 153
2. Chép d liu t Clipboard vào văn bn ................................................................. 153
3. Ct d liu vào Clipboard ...................................................................................... 153
IV. S DNG COMBOBOX CHN FONT VÀ C CH TRÊN TOOLBAR .....154
V. MDI FORM........................................................................................................... 154
208
1. Đặc đim.................................................................................................................154
2. Form con MDI........................................................................................................155
3. Các thuc tính và phương thc b sung so vi form thường.................................155
4. Np ca s con trong form MDI ............................................................................156
5. To ng dng MDI bng Form Wizard .................................................................156
Chương 16: Lp trình Drag-and-Drop
I. TNG QUAN.........................................................................................................159
1. Kéo nh t động .....................................................................................................159
2. Kéo nh điu khin bng chương trình ..................................................................160
II. MT CHƯƠNG TRÌNH VÍ D...........................................................................161
1. Khi to hot động o-nh ...................................................................................161
2. Chun bi cho thao tác nh trên đối tượng ngun ...................................................162
3. Nh trên đối tưng đích..........................................................................................164
4. Np d liu theo yêu cu........................................................................................165
5. Kéo nh File ...........................................................................................................165
| 1/193

Preview text:

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT KHOA CÔNG NGHỆ THÔNG TIN GIÁO TRÌNH Giáo trình Visual Basic 6.0 1 Chương 1 Giới thiệu
I. CÁC MÔI TRƯỜNG LẬP TRÌNH
Lập trình: Viết chương trình
Chương trình phải được chạy trên nền một Hệ điều hành. Trên máy PC có hai loại
môi trường hệ điều hành : đó là môi trường DOS và môi trường Windows
Đặc điểm của môi trường DOS
• Hệ điều hành đơn chương : mỗi lúc chỉ có 1 chương trình làm việc. Lệnh trong
chương trình sẽ qui định hoạt động kế tiếp mà người dùng sẽ tác động vào chương trình.
• Về mặt giao diện: Mỗi lúc chỉ có một chương trình hoạt động. Khi hoạt động
giao diện của chương trình sẽ chiếm toàn bộ màn hình. Chỉ khi chương trình
này kết thúc thì chương trình khác mới có thể hoạt động được.
• Về nguyên tắc lập trình: Lập trình thủ tục (Procedural Programming)
• Các công cụ lập trình trên DOS thông dụng: BASIC, TURBO PASCAL, TURBO C. .
Đặc điểm của môi trường Windows:
• Hệ điều hành đa chương: mỗi lúc có thể có nhiều chương trình hoạt động đồng
thời. Mỗi chương trình sẽ không biết trước hoạt động kế tiếp mà người dùng sẽ
tác động vào chương trình
• Giao diện đồ họa (GUI-Graphics User Interface): Mỗi chương trình khi hoạt
động được trình bày trong 1 cửa sổ
• Các chương trình Windows hoạt động theo nguyên tắc nhận và xử lý thông
điệp (Message) đó là các tác động từ người dùng như các sự kiện bấm phím từ
bàn phím, sự kiện từ mouse (di chuyển, bấm phím, nhả phím. .) . Các tác động
này sẽ được chuyển thành các thông điệp chứa trong hàng đợi (Message
Queue) của hệ thống. Windows sẽ lần lượt xem xét các thông điệp và chuyển
chúng đến các ứng dụng tương ứng. Chương trình đang hoạt động nhận thông
điệp sẽ phản ứng theo cách của nó tuỳ theo ý nghĩa của từng loại thông điệp.
Ví dụ: Sự kiện bấm phím trái chuột trên nuty Minimize sẽ làm cho cửa sổ
phóng lớn, Sự kiện nhấp đúp phím trái chuột trên thanh tiêu đề sẽ làm cho cửa
sổ phóng lớn (Maximize) hoặc hoàn nguyên (Restore). .
• Các công cụ lập trình thông dụng trên Windows:
BPW (Borland Pascal for Windows), BCW (Borland C for Windows),
Delphi, Visual C++, Visual Basic. Nguyễn Đăng Quang 2 Giáo trình Visual Basic 6.0
II. CÁC ĐỐI TƯỢNG ĐIỀU KHIỂN CHUẨN TRÊN WINDOWS
Chương trình trên windows sử dụng giao diện đồ họa để giao tiếp với người sử dụng:
Trên mỗi cửa sổ của 1 chương trình Windows sử dụng một số đối tượng điều khiển
để người dùng ra lệnh. Có nhiều loại đối tượng với các chức năng khác nhau. Để có
thể viết chương trình trên Windows, cần làm quen với các đối tượng chuẩn.
1. Command Button (Nút lệnh): được sử dụng để ra lệnh. Trên các hộp thoại, thường
thấy các nút lệnh như OK để chấp nhận hoặc Cancel để hủy một yêu cầu.
2. Checkbox: được sử dụng để chọn hoặc không chọn một yếu tố nào đó
Hình 1.1:CheckBox chọn chế độ đánh số trang cho trang đầu tiên
trong chức năng đánh số trang của ứng dụng WORD
3. Option Button (Nút chọn): Thường hoạt động theo nhóm được sử dụng để chọn
một trong nhiều yếu tố
Hình 1.2:Chọn cách chuyển dạng chữ trong WORD
4. Textbox: Hộp nhập dữ liệu cho chương trình, có thể nhập 1 dòng hay nhiều dòng.
5. Label (Nhãn): đối tượng điều khiển được sử dụng trình bày một nội dung.
6. List box: Hộp danh sách được sử dụng trình bày một danh sách giá trị .
7. Combobox: Hộp danh sách hoạt động giống ListBox và TextBox, người dùng có
thể nhập giá trị hoặc chọn một giá trị trong một danh sách cho trước. Giáo trình Visual Basic 6.0 3
Hình 1.3: Hộp thoại Print với các đối tượng TextBox, Label, ComboBox
III. GIỚI THIỆU VISUAL BASIC
1. Khởi động - Cửa sổ khởi động
Màn hình khởi động có dạng
Hình 1.4: Cửa sổ khởi động-Thẻ New
New: Sử dụng thẻ này để tạo ứng dụng mới, thường chọn biểu tượng đầu tiên
(Standard EXE) cho các ứng dụng bình thường chạy trên Windows.
Existing: Sử dụng thẻ này để mở một ứng dụng đang có trên dĩa. Nguyễn Đăng Quang 4 Giáo trình Visual Basic 6.0
Hình 1.5: Cửa sổ khởi động-Thẻ Existing
Để ý là ứng dụng viết trên VB được gọi là project. Tập tin này có phần mở rộng
VBP (Visual Basic Project) , VBG (Visual Basic Group) hoặc MAK - Phần mở
rộng loại này chỉ được sử dụng cho các project viết trên VB3.0.
Recent: Sử dụng thẻ này để nạp nhanh ứng dụng đã làm việc trước đó
Hình 1.6: Cửa sổ khởi động-Thẻ Recent Giáo trình Visual Basic 6.0 5 2. Màn hình làm việc
Màn hình Visual Basic có dạng ToolBa Menu r Bar Form ToolBo Window x Project Explore r Propert y Window Form Layout Window
Hình 1.7: Màn hình làm việc Visual Basic
• Thanh menu (Menu Bar) : Menu chính của chương trình. Cùng
với các menu kéo xuống (Pulldown) - hệ thống menu trình bày
tất cả các chức năng của màn hình VB.
• Thanh công cụ (Toolbar): Giống các ứng dụng khác chạy trên
Windows, thanh công cụ trình bày tất cả các chức năng thường
sử dụng trong màn hình VB.
• Hộp công cụ (Toolbox): Chứa các đối tượng điều khiển được sử
dụng trong thiết kế giao diện của chương trình. Mỗi một biểu
tượng trên ToolBox đại diện cho một đối tượng muốn sử dụng
trong giao diện của chương trình. Khi di chuyển mouse trên các
biểu tượng, lời nhắc chức năng của nút sẽ tự động xuất hiện.
Đối tượng được chọn bằng cách click vào hình ảnh biểu tượng
trên ToolBox. Đối tượng nào được chọn thì hình ảnh của nó sẽ được vẽ lõm xuống.
ToolBox được đóng lại bằng nút close trên thanh tiêu đề. Làm toolbox
xuất hiện trở lại bằng cách chọn
View/Toolbox trên menu hoặc bấm nút
Toolbox trên thanh công cụ Nút Toolbox Nguyễn Đăng Quang 6 Giáo trình Visual Basic 6.0
Hình 1.8: Chương trình có 2 form
• Cửa sổ Form: Quản lý các cửa sổ được sử dụng
trong chương trình. Mỗi cửa sổ trong chương
trình gọi là form. Chương trình có bao nhiêu
form sẽ có bấy nhiêu cửa sổ form. Hình trên
trình bày một ứng dụng có 2 form
• Cửa sổ Project (Project Explorer): Giúp người
lập trình dễ dàng theo dõi và quản lý các tập tin
trong chương trình đang viết. Mỗi chương trình
VB có thể bao gồm nhiều loại tập tin đại điện
cho các thành phần sử dụng trong chương trình.
Các loại tập tin trong một chương trình VB có thể gồm:
*.FRM: Tập tin form. Chương trình có bao nhiêu form sẽ có bấy nhiêu tập tin FRM
*.BAS: Tập tin Module chứa các khai báo chung sử dụng trong chương trình
Hình trên là cửa sổ Project của một chương trình có 2 form và 1 module
Project Explorer được đóng lại bằng nút close trên thanh tiêu đề của cửa sổ .
Làm xuất hiện trở lại bằng cách chọn View/Project Explorer trên menu hoặc
bấm tổ hợp phím CTRL+R hoặc bấm nút Project Explorer trên thanh công cụ Giáo trình Visual Basic 6.0 7
• Cửa sổ thuộc tính (Properties Window): Mỗi đối tượng điều khiển trong
chương trình có nhiều đặc điểm để mô tả tính chất của đối tượng như vị trí trên
form, màu chữ . . Các đặc điểm thường sử dụng được mô tả trong cửa sổ thuộc
tính. Thông qua cửa sổ này, người lập trình sẽ điều chỉnh các thuộc tính của
đối tượng theo ý muốn trong quá trình thiết kế giao diện cho chương trình.
Các thành phần của cửa sổ thuộc tính:
Hình 1.9: Cửa sổ thuộc tính
- Hộp chọn đối tượng: ComboBox phía trên chứa danh sách các đối tượng trên
form đang thiết kế. Người lập trình có thể click trên form để chọn đối tượng
cần điều chỉnh thuộc tính hoặc click chọn tên đối tượng trong danh sách này.
- Thẻ Alphabetic trình bày các thuộc tính theo thú tự a, b, c của tên thuộc tính. .
- Thẻ Categorize trình bày các thuộc tính theo nhóm chức năng
Trong lúc thiết kế, thường xem thuộc tính theo thứ tự alphabetic
Các thuộc tính đối tượng được trình bày thành 2 cột : cột bên trái là tên thuộc tính, cột
bên phải là giá trị của thuộc tính. Cách điều chỉnh giá trị thuộc tính phụ thuộc vào
thuộc tính cần điều chỉnh - có loại thuộc tính được điều chỉnh giá trị bằng cách nhập
giá trị mới tại cột giá trị, có loại thuộc tính chỉ có thể điều chỉnh giá trị bằng cách
chọn 1 trong danh sách giá trị đã được qui định trước Nguyễn Đăng Quang 8 Giáo trình Visual Basic 6.0
Hình 1.10: Nhập giá trị cho thuộc tính tiêu đề của form.
Hình 1.11: Chọn thuộc tính cho viền của form, danh sách trị có sẵn Giáo trình Visual Basic 6.0 9
Properties Window được đóng lại bằng nút close trên thanh tiêu đề. Làm xuất hiện trở
lại bằng cách chọn View/Properties Window trên menu hoặc bấm phím F4 hoặc bấm
nút Properties Window trên menu •
Cửa sổ Form Layout: Dùng điều chỉnh vị trí form khi xuất hiện lúc chạy chương
trình. Trỏ chuột vào hình chữ nhật vẽ bên trong màn hình của cửa sổ và di
chuyển để điều chỉnh vị trí.
Thường vị trí của các form khi chạy sẽ được thực hiện bằng lệnh trong chương trình.
Để thuận tiện cho việc thao tác trên cửa sổ thuộc tính thường đóng cửa sổ này trong
lúc thiết kế. Muốn làm xuất hiện cửa sổ này, bấm nút Form Layout trên thanh công cụ •
Cửa sổ lệnh: Cửa số dùng viết lệnh cho các đối tượng trên 1 form. Mỗi Form có
một cửa sổ lệnh, cửa sổ lệnh chỉ xuất hiện khi nhấp đúp lên đối tượng muốn viết
lệnh. Cửa sổ lệnh gồm các thành phần sau:
- Hộp chọn đối tượng (Combo box phía trên bên trái) - Click để chọn đối tượng muốn viết lệnh
Hình 1.12: Chọn đối tượng viết lệnh
- Hộp chọn loại sự kiện (ComboBox phía trên bên phải) - Click để chọn sự kiện muốn viết lệnh. Nguyễn Đăng Quang 10 Giáo trình Visual Basic 6.0
Hình 1.13: Chọn sự kiện viết lệnh
Khi một sự kiện được chọn, dòng khai báo của thủ tục tương ứng xuất hiện trong cửa sổ phía dưới.
Ví dụ: Chọn đối tượng nút bấm CmdPt, sự kiện Click. Dòng khai báo thủ tục có dạng
Private sub CmdPt_Click(Index As Integer) End sub
Phần lệnh bên trong do người lập trình viết
Hình 1.14: Viết lệnh bên trong các khai báo thủ tục
IV. CÁC THAO TÁC CƠ BẢN VỚI ĐỐI TƯỢNG TRÊN FORM
1. Đưa một đối tượng lên form
• Nhấp đúp tại nút đối tượng trên Toolbox, đối tượng sẽ xuất hiện ngay giữa form. Hoặc Giáo trình Visual Basic 6.0 11
• Click đối tượng trên Toolbox, con trỏ chuyển thành dạng + trên form,
• Click tại vị trí cần đặt đối tượng trên form,
• Kéo lê để định kích thước đối tượng trên form, • Nhả .
Lưu ý: Trong khi kéo để qui định kích thước đối tượng, có thể quan sát kích thước
trên Toolbar hoặc dừng lại đủ lâu trên form, ô kích thước sẽ xuất hiện.
2. Chọn đối tượng trên form Chọn một đối tượng
• Click tại đối tượng cần chọn
Chọn nhiều đối tượng cùng lúc
• Bấm Shift và Click để chọn nhiều đối tượng Hoặc
• Sử dụng biểu tượng
chọn trên Toolbox để xác định vùng
hình chữ nhật bao quanh các đối tượng cần chọn 3. Di chuyển
• Chọn một hoặc nhiều đối tượng cần di chuyển
• Kéo đến vị trí mới • Nhả
4. Hiệu chỉnh kích thước một đối tượng • Chọn đối tượng
• Trỏ mouse vào 1 trong 8 nút điều khiển quanh đối tượng chọn, kéo để điều chỉnh kích thước 5. Xoá
• Chọn một hoặc nhiều đối tượng muốn xoá • Bấm DEL V. GHI NẠP MỘT VB PROJECT
Phần này trình bày các thao tác thường sử dụng đối với màn hình làm việc VB để
quản lý các form, module. . trong một Project. Đó là cách ghi một project sau khi thiết
kế hoặc nạp một Project có sẵn trên dĩa.
1. Thêm một form mới vào chương trình
Trường hợp thêm form mới
• Right-click trong Project Explorer/Add/Form,
• Nhấp đúp biểu tượng Form trong hộp thoại Add Form, form mới sẽ được thêm vào project (hình 1.15).
Trường hợp thêm form có sẵn trên dĩa (từ Project khác)
• Right-click trong Project Explorer/Add/Form ,
• Chọn thẻ Exising, nhấp đúp form cần thêm vào (hình 1.16) . Nguyễn Đăng Quang 12 Giáo trình Visual Basic 6.0
Hình 1.15: Thêm một form mới vào chương trình
Hình 1.16: Thêm một form có sẵn vào chương trình 2. Xoá một form
• Right-Click form muốn xoá trong Project Explorer,
• Chọn Remove form trên menu. Giáo trình Visual Basic 6.0 13 3. Ghi Project lên dĩa
Cần nhắc lại là Project trong VB gồm nhiều thành phần như form, Module. . mỗi
form hoặc Module sẽ được ghi thành một tập tin. Như vậy phải đặt tên cho các form và module khi ghi Project.
• Bấm nút Save trên Toolbar hoặc chọn lệnh File/Save Project,
• VB sẽ lần lượt nhắc đặt tên cho các form. Hộp thoại đặt tên form có dạng hình 1.17
Hình 1.17: Hộp thoại đặt tên form khi ghi
• Nhập tên form vào hộp File name,
• Bấm nút Save và lặp lại bước này cho tất cả các form trong chương trình,
• Sau khi ghi tất cả các form. Xuất hiện hộp thoại đặt tên Project. Tập tin Project có phần mở rộng VBP.
Hình 1.18: Hộp thoại đặt tên chương trình Nguyễn Đăng Quang 14 Giáo trình Visual Basic 6.0
Lưu ý: VB chỉ nhắc đặt tên khi ghi Project lần đầu tiên 4. Nạp Project từ dĩa
• Bấm nút Open trên Toolbar hoặc chọn lệnh File/Open Project. Hộp thoại Open project xuất hiện,
• Nhấp đúp tên project cần mở để nạp vào màn hình VB.
Hình 1.19: Nạp Project từ dĩa 5. Tạo Project mới
• Chọn lệnh File/New Project. Hộp thoại New project xuất hiện,
• Nhấp đúp biểu tượng Stanđar EXE để tạo project mới.
Hình 1.20: Tạo một Project mới Giáo trình Visual Basic 6.0 15
VI. MỘT CHƯƠNG TRÌNH VÍ DỤ
Thiết kế chương trình nhập hai số, tính tổng và in kết quả
Giao diện chương trinh có dạng như sau:
Hình 1.21: Giao diện của chương trình ví dụ
• Nhập số thứ nhất vào Textbox phía trên.
• Nhập số thứ hai vào Textbox phía dưới.
• Bấm nút “Tính”. Kết quả phép cộng 2 số xuất hiện trong ô dưới cùng
Các bước thực hiện như sau:
1. Khởi động Visual Basic , chọn New/ Standard EXE
2. Điều chỉnh các thuộc tính của form1 theo như bảng sau: Thuộc tính (Property) Giá trị (Value) Name frmTinh Caption Cong hai so Height 2500 Width 2800
3. Nhấp đúp Label trên Toolbox để đặt Label lên giữa form. Di chuyển và đặt các
thuộc tính theo như bảng sau: Thuộc tính (Property) Giá trị (Value) Name Label1 Caption Nhap so thu 1
4. Làm tương tự như bước 3 với các thuộc tính theo như bảng sau: Thuộc tính (Property) Giá trị (Value) Name Label2 Caption Nhap so thu 2
5. Nhấp đúp Textbox trên Toolbox. Textbox thứ nhất sẽ xuất hiện chính giữa form.
Di chuyển và điều chỉnh các thuộc tính theo bảng sau: Thuộc tính (Property) Giá trị (Value) Alignment 1 - Right justify Name txtSo1 Height 315 Width 735 Nguyễn Đăng Quang 16 Giáo trình Visual Basic 6.0
6. Nhấp đúp Textbox trên Toolbox. Textbox thứ hai sẽ xuất hiện chính giữa form. Di
chuyển và điều chỉnh các thuộc tính theo bảng sau: Thuộc tính (Property) Giá trị (Value) Alignment 1 - Right justify Name txtSo2 Height 315 Width 735
7. Nhấp đúp Textbox trên Toolbox. Textbox thứ ba sẽ xuất hiện chính giữa form. Di
chuyển và điều chỉnh các thuộc tính theo bảng sau: Thuộc tính (Property) Giá trị (Value) Alignment 1 - Right justify Name txtTong Locked True Height 315 Width 735
8. Nhấp đúp CommandButton trên Toolbox. Button sẽ xuất hiện chính giữa form. Di
chuyển và điều chỉnh các thuộc tính theo bảng sau: Thuộc tính (Property) Giá trị (Value) Name CmdTinh Caption Tinh Height 330 Width 1335
9. Nhấp đúp CommandButton để viết mã lệnh cho chức năng tính toán khi người
dùng bấm vào nút này. Cửa sổ mã lệnh sẽ xuất hiện với phần khai báo thủ tục khi
bấm nút được định nghĩa sẵn: Private Sub CmdTinh_Click() End Sub
Nhập lệnh để cuối cùng ta có Private Sub CmdTinh_Click()
txtTong.Text = Val(txtSo1.Text) + Val(txtSo2.Text) End Sub
10. Bấm nút Run trên Toolbar hoặc F5 để chạy chương trình. Nhập 2 số vào 2 text
box. Bấm nút tính. Kết quả cộng 2 số xuất hiện trong ô thứ 3.
11. Chọn File/Save Project để save các tập tin của Project như sau:
FrmTinh.FRM :Tập tin định nghĩa form frmTinh Vd1.VBP
:Tập tin định nghĩa Project Giáo trình Visual Basic 6.0 17 Chương 2
Đối Tượng và cách sử dụng Đối Tượng I. ĐỐI TƯỢNG 1. Khái niệm
Visual Basic là ngôn ngữ lập trình kiểu đối tượng, chương trình Basic gồm các đối
tượng. Làm việc với VB chính là làm việc với các đối tượng.
2. Các đặc điểm của đối tượng a. Tên
Mỗi đối tượng được đặt tên. Tên đối tượng được viết theo qui tắc sau:
• Có chiều dài tối đa 40 ký tự
• Không được bắt đầu bằng số
• Không có khoảng trắng
Để phân biệt đối tượng này với đối tượng khác, tên đối tượng được viết kèm với tiền
tố (prefix) chỉ loại đối tượng. Các tiền tố được qui định như sau: Loại đối tượng
Tiền tố Loại đối tượng Tiền tố CheckBox chk Horizontal ScrollBar hsb ComboBox cbo Image img Command Button cmd Label lbl Common Dialog cdl Line lin Data Control dat ListBox lst Data Bounddbc Menu mnu ComboBox Data Bound Grid dbg OLE Container ole Data Bound ListBox dbl Option Button opt Directory ListBox dir Picture Box pic Drive ListBox drv Shape shp File ListBox fil TextBox txt Form frm Timer tmr b. Thuộc tính (property)
Mỗi đối tượng có một số thuộc tính dùng mô tả đối tượng như vị trí, kích thước, trạng
thái. . Các thuộc tính của đối tượng trình bày trong cửa sổ thuộc tính. c. Phương thức (method)
Là các hành vi của mỗi đối tượng như di chuyển (move), phóng lớn cửa sổ
(maximize), thu nhỏ cửa sổ (minimize). . Nguyễn Đăng Quang 18 Giáo trình Visual Basic 6.0 d. Sự kiện (Event)
Là các tác động lên đối tượng, mỗi đối tượng sẽ phản ứng lại theo cách của nó tùy
theo biến cố tác động vào. Người lập trình sẽ định nghĩa các lệnh để chương trình đáp
ứng lại các biến cố tác động lên các đối tượng
Khi người lập trình tạo ra một đối tượng, cần:
• Đặt tên (điều chỉnh thuộc tính Name)
• Qui định thuộc tính (trong cửa sổ thuộc tính)
• Định nghĩa các hoạt động của đối tượng tùy theo biến cố tác động vào (chọn
loại biến cố trong code view window)
3. Truy xuất đối tượng
Truy xuất đối tượng bao gồm:
• Đọc hoặc đặt giá trị cho một thuộc tính
• Gọi một phương thức
Để truy xuất một đối tượng, sử dụng cách viết . Ví dụ: adoRS.MoveNext CmdPrint.Enabled = True 4. Các thuộc tính chung
- Left, Top: Tọa độ góc trên bên trái.
- Height, Weight: Chiều cao, độ rộng đối tượng.
- ForeColor, BackColor: Màu chữ, màu nền đối tượng. Có thể chọn màu theo
bộ màu chuẩn của windows hoặc chọn màu tùy ý trên các thẻ tương ứng tại
thuộc tính này trong cửa sổ thuộc tính (Hình 2.1).
Hình 2.1: Các thẻ chọn màu Giáo trình Visual Basic 6.0 19
Bảng sau trình bày một số hằng khai báo giá trị màu hệ thống Hằng Giá trị (Hex) Ý nghĩa vbActiveBorder
&H8000000A Màu viền cửa sổ hoạt động vbActiveTitleBar
&H80000002 Màu thanh tiêu đề cửa sổ hoạt động vbActiveTitleBarText
&H80000009 Màu chữ tiêu đề cửa sổ hoạt động
vbApplicationWorkspace &H8000000C Màu nền cửa sổ ứng dụng giao diện đa tài liệu (MDI) vbButtonFace
&H8000000F Màu nút lệnh vbButtonShadow
&H80000010 Màu bóng viền nút lệnh vbButtonText
&H80000012 Màu chữ trên nút vbDesktop &H80000001 Màu desktop vbGrayText
&H80000011 Màu chữ trên đối tượng không hoạt động vbHighlight
&H8000000D Màu nền phần được chọn vbHighlightText
&H8000000E Màu chữ phần được chọn vbInactiveBorder
&H8000000B Màu viền cửa sổ không hoạt động vbInactiveCaptionText
&H80000013 Màu chữ tiêu đề cửa sổ không hoạt động vbInactiveTitleBar
&H80000003 Màu thanh tiêu đề cửa sổ không hoạt động vbInactiveTitleBarText
&H80000013 Màu chữ tiêu đề cửa sổ không hoạt động vbInfoBackground
&H80000018 Màu nền lời nhắc (ToolTips) vbInfoText
&H80000017 Màu chữ lời nhắc vbMenuBar
&H80000004 Màu nền menu vbMenuText
&H80000007 Màu chữ menu vbScrollBars
&H80000000 Màu thanh cuộn vbWindowBackground
&H80000005 Màu nền cửa sổ vbWindowFrame
&H80000006 Màu khung cửa sổ vbWindowText
&H80000008 Màu chữ trong cửa sổ
Enabled: Thuộc tính cho phép đối tượng hoạt động (True, False).
Font: Thuộc tính chọn Font chữ.
Visible: Thuộc tính cho phép xuất hiện đối tượng (True, False).
Index: Chỉ số mảng (mảng đối tượng).
ToolTipText: Chuỗi lời nhắc khi trỏ chuột trên đối tượng. 5. Các sự kiện chung Sự kiện Xảy ra khi Click
Người dùng click trên đối tượng DblClick
Người dùng nhấp đúp trên đối tượng DragDrop
Người dùng kéo nhả một đối tượng DragOver
Người dùng kéo một đối tượng qua một đối tượng khác Gotfocus Đối tượng nhận focus Nguyễn Đăng Quang 20 Giáo trình Visual Basic 6.0 KeyDown
Người dùng nhấn một phím trong khi đối tượng đang nhận focus KeyPress
Người dùng nhấn và nhả một phím trong khi đối tượng đang nhận focus KeyUp
Người dùng nhả phím trong khi đối tượng đang nhận focus LostFocus
Đối tượng không nhận focus nữa
MouseDown Người dùng bấm một phím bất kỳ trên mouse trong khi mouse
pointer đang ở vị trí đối tượng
MouseMove Người dùng di chuyển mouse trên đối tượng MouseUp
Người dùng nhả phím mouse trong khi mouse pointer đang ở vị trí đối tượng II. ĐỐI TƯỢNG FORM 1. Thuộc tính Thuộc tính Ý nghĩa Caption
Đặt tiêu đề cho form. Giá trị mặc định là tên form BorderStyle
Quy định kiểu khung cho form Appearance
Qui định cách thể hiện form (Flat/ 3D) ControlBox
Có hoặc không có Control Menu Box (True/False) MaxButton
Làm mờ nút phóng lớn (True/False) MinButton
Làm mờ nút thu nhỏ (True/False) Icon
Qui định Icon đại diện cho form Picture
Đặt hình làm nền cho form Moveable
Di chuyển/ Không di chuyển được (True/False)
ShownInTaskbar Có nút đại diện chương trình trên taskbar (True/False) WindowState
Trạng thái form (Normal/Minimized/Maximized) 2. Phuơng thức Show Xuất hiện form Hide Che dấu form Ví dụ: frmMain.Show ‘ Làm xuất hiện form Hoặc FrmMain.Hide ‘ Che dấu form Lưu ý:
Phương thức Show nạp form vào bộ nhớ và làm xuất hiện nó trên màn hình. Nếu
form đã được nạp vào trước đó thì nó chỉ làm xuất hiện form trên .
Phương thức Hide làm form không xuất hiện trên màn hình, nó vẫn còn được nạp vào
bộ nhớ, để giải phóng form khỏi bộ nhớ, sử dụng phương thức Unload <Đối tượng>
3. Xử lý sự kiện (Handling Event)
Sau đây là một số sự kiện quan trọng đối với một form Giáo trình Visual Basic 6.0 21 Sự kiện Xảy ra khi Load
Form được nạp vào bộ nhớ Activate
Form xuất hiện lần đầu tiên hoặc khi chuyển trở lại form từ một form khác
Deactivate Người dùng chuyển sang form khác hoặc form thực hiện phương thức hide Unload
Form được giải phóng khỏi bộ nhớ
Initialize Form được tạo ra ban đầu trong bộ nhớ
Ví dụ 1 - Kiểm tra các sự kiện Initialize, Load, Unload:
1. Khởi động Visual Basic/Standard EXE
2. Nhấp đúp vào form1 để mở cửa sổ mã lệnh (code window), viết lệnh cho sự kiện Load như sau: Private Sub Form_Load() MsgBox "Form Load Event" End Sub
3. Lặp lại bước 3 để định nghĩa mã lệnh cho các sự kiện Initialize và Unload Private Sub Form_Initialize()
MsgBox "Form Initialization Event" End Sub
Private Sub Form_Unload(Cancel As Integer) MsgBox "Form Unload Event" End Sub
4. Bấm F5 để chạy chương trình, để ý các Message Box sẽ xuất hiện theo thứ tự do
trình tự Initialize Load Unload
Hình 2.2: Kiểm tra các sự kiện Load, Unload, Initialize Nguyễn Đăng Quang 22 Giáo trình Visual Basic 6.0
Ví dụ 2 - Kiểm tra các phương thức Show, Hide, Unload
Chương trình khi chạy sẽ xuất hiện 1 form như hình. Bấm nút “Show second form”,
form thứ 2 sẽ xuất hiện. Bấm nút “Close this form” , form thứ 2 sẽ đóng lại.
Các bước thiết kế như sau: 1. New/Standard EXE
2. Đặt thuộc tính Caption của Form 1 thành Vi du 2 - Form 1
3. Nhấp đúp CommandButton trên ToolBox, Button xuất hiện trên Form1. Điều
chỉnh thuộc tính Caption thành “Show second form”
4. Bấm nút Add form/form để thêm form2.
5. Đặt thuộc tính Caption của Form 2 thành Vi du 2 - Form 2
6. Nhấp đúp CommandButton trên ToolBox, Button xuất hiện trên Form2. Điều
chỉnh thuộc tính Caption thành “Close this form”
7. Nhấp đúp Button trên form 2 , định nghĩa mã lệnh như sau: Private Sub Command1_Click() Unload Me End Sub
8. Nhấp đúp Button trên form 1 , định nghĩa mã lệnh như sau: Private Sub Command1_Click() Form2.Show End Sub
Bấm F5 chạy chương trình để kiểm tra kết qủa III. LABEL
Trình bày một nội dung trên form 1. Thuộc tính Thuộc tính Ý nghĩa Caption
Qui định nội dung trình bày Alignment
Quy định kiểu canh lề trong Label (0-Left 1- Right 2- Center) BackStyle
Kiểu nền Label (0 - Transparent 1 - Opaque) AutoSize
Tự động co giãn kích thước Label để thể hiện đầy đủ nội dung (True/False) Wordwrap
Tự động cuộn chữ (True/False) Và các thuộc tính chung 2. Xử lý sự kiện Gồm các sự kiện chung IV. TEXTBOX
Cho phép người dùng nhập một nội dung Giáo trình Visual Basic 6.0 23 1. Thuộc tính Thuộc tính Ý nghĩa Text Chứa nội dung nhập vào Alignment
Quy định kiểu canh lề trong TextBox (0-Left 1- Right 2- Center) Locked
Cho phép thay đổi nội dung textbox (True/False)
MaxLength Qui định chiều dài tối đa cho phép nhập Multiline
Cho phép nhập nội dung nhiều dòng (True/False) Và các thuộc tính chung 2. Xử lý sự kiện Gồm các sự kiện chung V. COMMANDBUTTON
Đối tượng được sử dụng để ra lệnh 1. Thuộc tính Caption
Nội dung thể hiện trên nút bấm Và các thuộc tính chung. 2. Xử lý sự kiện Gồm các sự kiện chung VI. FOCUS VÀ THỨ TỰ TAB 1. Focus
Trên màn hình Windows, mỗi một đối tượng điều khiển khi được chọn để hoạt động
(Active) sẽ nhận focus. Khi một cửa sổ hoặc form đang nhận focus thanh tiêu đề
(Title Bar) sẽ có màu đậm. Khi một đối tượng điều khiển trên form nhận focus sẽ có
đường viền bao quanh đối tượng hoặc cursor xuất hiện bên trong đối tượng
(Textbox). Người dùng có thể thay đổi focus của đối tượng trên form bằng cách sử
dụng phím Tab hoặc Shift+Tab. Đối tượng nhận focus sẽ phản ứng với các sự kiện bấm phím Nút chọn đang Nút bấm đang nhận Focus nhận Focus
Hình 2.3: Đối tượng nhận Focus Nguyễn Đăng Quang 24 Giáo trình Visual Basic 6.0 2. Thứ tự Tab (Tab Order)
Người dùng có thể chọn đối tượng nhận focus trên form bằng cách bấm phím Tab
hoặc Shift+Tab theo thứ tự các đối tượng được đặt lên form. Có thể qui định thứ tự
này trong lúc thiết kê giao diện chương trình bằng cách điều chỉnh thuộc tính
TabIndex. Đối tượng nhận focus đầu tiên trên form sẽ có TabIndex = 0. Để chọn đối
tượng nhận focus trên form bằng chương trình, sử dụng phương thức SetFocus. 3. Phím nóng (HotKey)
Là tổ hợp phím kết hợp giữa phím Alt và một phím khác. Hotkey được sử dụng để
chọn nhanh một đối tượng trên form bằng bàn phím mà không cần bấm phím TAB để
chọn đối tượng theo thứ tự Tab .
Hotkey được định nghĩa trên thuộc tính Caption của đối tượng bằng cách nhập ký tự
“&” phía trước ký tự muốn định nghĩa Hotkey Ví dụ:
Muốn Đối tượng có Giá trị HotKey Giá trị của thuộc tính Hotkey Caption Alt+C &Close Alt+S In &Sync Alt+S &Nam
Riêng TextBox thì Hotkey được định nghĩa trên thuộc tính Caption của Label đi kèm
với TextBox. Label được gọi là đi kèm với TextBox nếu TabIndex của nó có giá trị kế
trước (nhỏ hơn 1 đơn vị) giá trị TabIndex của TextBox 4. Ví dụ
Phần sau trình bày ví dụ về các định nghĩa Hotkey và thứ tự nhận focus cho chương
trình ví dụ đã trình bày ở chương 1
Mở lại project vd1.prj đã làm ở chương 1, điều chỉnh lại thuộc tính của các đối tượng theo như bảng sau: Form1 TextBox1 Thuộc tính (Property) Giá trị (Value) Thuộc tính (Property) Giá trị (Value) Name FrmTinh Name txtSo1 Caption Cong hai so Height 315 Height 2500 Width 735 Width 2800 TabIndex 1 Label1 Label2 Thuộc tính (Property) Giá trị (Value) Thuộc tính (Property) Giá trị (Value) Name Label1 Name Label2 Caption Nhap so thu &1 Caption Nhap so thu &2 TabIndex 0 TabIndex 2 Giáo trình Visual Basic 6.0 25 TextBox2 Width 1335 Thuộc tính (Property) Giá trị (Value) TabIndex 4 Name txtSo2 TextBox3 Height 315 Thuộc tính (Property) Giá trị (Value) Width 735 Name txtTong TabIndex 3 Locked True CommandButton Height 315 Thuộc tính (Property) Giá trị (Value) Width 735 Name CmdTinh TabIndex 5 Caption &Tinh Height 330
Bấm F5 chạy chương trình. Để ý thứ tự nhận focus là TextBox1, TextBox2 và
CommandButton. Các Hotkey Alt+1, Alt+2, Alt+T cũng có tác dụng tương tự.
Muốn con trỏ tự động chuyển sang TextBox dưới để nhập số thứ hai sau khi nhập số
thư nhất và bấm Enter, viết lệnh cho sự kiện bấm phím trên có TextBox như sau:thêm
khả năng chuyển focus bằng cách bấm Enter sau khi nhập số tại các Textbox, có thể
định nghĩa thêm các thủ tục xử lý sự kiện bấm phím Enter cho các Textbox1 và 2 như sau:
Private Sub txtSo1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 then txtSo2.Setfocus End Sub
Private Sub txtSo2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 then CmdTinh.Setfocus End Sub Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 27 Chương 3
Kiểu dữ liệu – Hằng – Biến I. BIẾN (Variable) 1. Định nghĩa
Biến là ô nhớ chứa dữ liệu, giá trị của biến có thể thay đổi trong chương trình. 2. Khai báo Dạng Dim As [, As ] Hoặc Dim
Trường hợp đầu, kiểu biến được khai báo rõ ràng, trường hợp sau kiểu của biến sẽ
được xác định khi có lệnh gán giá trị cho biến. Ví dụ: Dim X As Integer Dim Ht As String
3. Qui tắc đặt tên biến
− Có chiều dài tối đa 255
− Không được bắt đầu bằng số
− Không sử dụng khoảng trắng
− Không dùng các ký hiệu toán tử − Không trùng từ khoá
− Không phân biệt chữ thường và chữ in Ví dụ
Các biến đặt tên đúng MyNum& i% iNumOne strInputValue Các biến đặt tên sai 1Week Ho ten Giai.thua 4. Truy xuất biến
Biến được truy xuất bằng cách viết tên. Ví dụ Dim X As Integer Nguyễn Đăng Quang 28 Giáo trình Visual Basic 6.0 Dim Y As Integer X = 5 Y = 7 X = Y+2
‘ Trị của biến X được gán bằng trị của biến Y cộng thêm 2 X = X+1
‘ Tăng giá trị của biến X Lưu ý
Biến sử dụng có thể không cần khai báo. Điều này có thể gây ra lỗi , ví dụ: Dim Songay Dim X Songay = 1 X = 5 SoNgau = X+1
‘ Visual Basic xem Songau là biến mới
Để buộc Visual Basic không tự động tạo biến khi chưa khai báo có thể thực hiện 1 trong 2 cách sau:
Viết phát biểu Option Explicit trong phần General của cửa sổ lệnh.
Qui định bằng tuỳ chọn Require variable Declaration trong Tools/Options/Editor
Giá trị ban đầu của các loại biến sau khi khai báo như sau:
Kiểu dữ liệu Giá trị đầu Integer 0 Long 0 Single 0 Double 0 String "" (blank) Boolean False Variant EMPTY Date 0 Currency 0
5. Phạm vi sử dụng biến
Một biến được khai báo chỉ tồn tại trong phạm vi khai báo, ngoài phạm vi đó mà sử
dụng lại Visual Basic sẽ xem như biến mới.
• Biến khai báo trong chương trình con chỉ có ý nghĩa trong chương trình con
đó. Trong ví dụ sau, các biến X, Y, Z chỉ có ý nghĩa trong thủ tục xử lý sự kiện cmdTinh. Private sub cmdTinh() Dim X As Integer Dim Y As Integer Dim Z As Integer Giáo trình Visual Basic 6.0 29 X = CInt(txtSo1.Text) Y = CInt(txtSo2.Text) TxtTong.Text = X+Y End sub
• Biến khai báo với từ khoá Dim trong phần General của form có ý nghĩa tòan
cục trong form, tất cả các chương trình con định nghĩa trong form đều có thể sử dụng biến này. Dim a As Integer Form1 Dimb As Integer Form2 Biến a chỉ có ý nghĩa trong form1 Biến b chỉ có ý nghĩa trong form2
• Biến khai báo với từ khoá Public trong phần General của form có ý nghĩa
trong tất cả các chương trình con định nghĩa trong form đó và có thể sử dụng
trong form khác bằng cách viết . Publica As Integer Form1 Dim b As Integer Form2 Private sub xxx() …
Biến a có thể sử dụng Form1.a trong form khác … Biến b chỉ có ý nghĩa End sub trong form2
• Biến khai báo với từ khoá Public trong Module có ý nghĩa trong toàn bộ chương trình. Private sub XXX() Form1 … m Form2 … End sub Private sub xxx() Public m As Integer Module … m …
Biến m có thể sử dụng trong toàn bộ chương End sub trình Nguyễn Đăng Quang 30 Giáo trình Visual Basic 6.0 6. Biến tĩnh
Là biến được khai báo với từ khoá static trong 1 chương trình con. Giá trị của biến
tĩnh được sử dụng lại cho các lần gọi sau của chương trình con
Ví dụ: Thông báo số lần bấm nút, biến iNumOfClicks được khai báo tĩnh. Private Sub MyButton_Click()
Static iNumOfClicks as Integer
iNumOfClicks = iNumOfClicks + 1
MsgBox "Number of Clicks: " & CStr(iNumOfClicks) End Sub II. KIỂU DỮ LIỆU Kiểu Kích thước Phạm vi chứa Byte 1 byte 0 . 255 Integer 2 bytes -32,768 . 32,767 Long 4 bytes Khoảng +/- 2.1E9 Single 4 bytes
-3.402823E38 . -1.401298E-45 (giá trị âm)
1.401298E-45 . 3.402823E38 (Giá trị dương) Double 8 bytes
-1.79769313486232E308. -4.94065645841247E-324 (giá trị âm)
4.94065645841247E-324 . 1.79769313486232E308 (giá trị dương) Currency 8 bytes
922,337,203,685,477.5808 . 922,337,203,685,477.5807 String
1 byte cho mỗi 65,000 đối với chuỗi có kích thước cố định ký tự
2 tỷ đối với chuỗi động Boolean 2 bytes True , False Date 8 bytes
Jan 1st 100 . December 31st 9999 Variant 16 bytes + 1 byte cho mỗi ký tự III. HẰNG
Hằng là đại lượng có giá trị không thay đổi trong chương trình. Hằng được khai báo
trong phần General. Qui tắc đặt tên hằng cũng như biến. Hằng thường được khai báo
bằng ký tự chữ in hoa. Khai báo hằng được viết như sau:
Const [ As ] = < Giá trị> Ví dụ: Const METER_TO_FEET = 3.3 Giáo trình Visual Basic 6.0 31 IV. TOÁN TỬ Toán tử Ý nghĩa ^ Mũ - Đảo dấu *, / Nhân chia \ Chia nguyên Mod
Lấy phần dư phép chia số nguyên +, - Cộng, trừ & Ghép chuỗi
=, <>, <, >, <=, So sánh >= Not, And, Or Luận lý V. MỘT SỐ HÀM CHUẨN 1. Hàm đại số Hàm Ý nghĩa Ví dụ Abs(n) ⏐x⏐ Abs(-5) = 5 Sqr(x) Căn bậc 2 Sqr(4)=2 Exp(x) ex Exp(1)= 2.718282 Log(x) Logx Tính logn(x)=Log(x)/log(n) Int(x) Số nguyên ≤ x Int(8.9) = 8, Int(-8.9)= -9 Fix(x) Số nguyên ≤ x Fix(8.4) = 8, Fix(-8.9)= -8 Round(x[,n])
Làm tròn đến n chữ số phần thập Round(4.5)=6, phân Round(34.673,2)=34.67 Sin(x) sinx Sin(pi/2)=1 Cos(x) cosx Cos(pi/3)=0.5 Tan(x) tgx Atn(x) arctgx 2. Hàm thời gian Hàm Ý nghĩa Ví dụ Date Ngày hệ thống Dim dt As Date Dt = Date Day(d) Ngày trong tháng (1-31) Day(#12/2/00#)=2 Month(d) Tháng (1-12) Month(#12/2/00#)=12 Year(d) Năm Year((#12/2/00#)=2000
Weekday(d) Ngày trong tuần (1-Chủ nhật, 2-Thứ Weekday(Date) hai, 7-Thứ bảy) Nguyễn Đăng Quang 32 Giáo trình Visual Basic 6.0 3. Hàm chuyển đổi Hàm Ý nghĩa Ví dụ Asc(n) Mã Ascii của ký tự n
Asc(‘a’)=97, asc(‘A’)=65 Chr(n) Ký tự có mã n Chr(65)=’A’ Ucase(s)
Đổi chuỗi chữ thường thành chữ in Ucase(“abcd”)=”ABCD” Val(s) Đổi chuỗi thành số Val(“1234”)=1234 Str(n) Đổi số thành chuỗi Str(12.45)=” 12.45” Str(-4.56) = “-4.56”
4. Hàm kiểm tra kiểu dữ liệu Hàm Ý nghĩa
IsNumeric(n) Kiểm tra n có phải là số hợp lệ IsDate(n)
Kiểm tra n có phải là giá trị ngày hợp lệ
VI. HỘP THÔNG BÁO (MESSAGE BOX)
Là một lớp cửa sổ windows đã định nghĩa sẵn. Hộp thông báo được để trình bày các
thông điệp nhắc nhở người dùng từ chuơng trình hoặc yêu cầu người dùng xác nhận
một điều gì đó. Hộp thông báo thực chất là một form với các thành phần sau: • Nội dung thông báo
• Icon bên trái dùng mô tả tính chất loại thông báo
• Nút bấm để trả lời, gồm các loại OK, Cancel, Yes, No, Abort, Retry, Ignore Dạng hàm MsgBox(,,) Trong đó:
Chuỗi ký tự thông báo. Thông báo có chiều dài tối đa 1024 ký tự. Muốn thông báo
hiện trên nhiều dòng, sử dụng ký tự chr(13)
Qui định loại nút bấm và icon được sử dụng trong hộp thông báo, gồm các hằng sau: Hằng Giá Ý nghĩa trị vbOKOnly 0 Chỉ có nút OK vbOKCancel 1 Nút OK và Cancel vbAbortRetryIgnore 2 Nút Abort, Retry và Ignore utton vbYesNoCancel 3 Nút Yes, No, Cancel B vbYesNo 4 Nút Yes, No vbRetryCancel 5 Nút Retry và Cancel vbCritical 16 Icon Icon vbQuestion 32 Icon Giáo trình Visual Basic 6.0 33 vbExclamation 48 Icon vbInformation 64 Icon vbDefaultButton1 0
Nút đầu tiên mặc định có focus vbDefaultButton2
256 Nút thứ hai mặc định có focus Focus vbDefaultButton3
512 Nút thứ ba mặc định có focus vbApplicationModal 0
Người dùng phải trả lời rồi mới có
thể tiếp tục sử dụng chương trình,
có thể chuyển sang các chương trình khác odal M vbSystemModal
4096 Người dùng phải trả lời rồi mới có
thể tiếp tục sử dụng chương trình,
không thể chuyển sang các chương trình khác
Tham số được lấy giá trị bằng tổng các hằng trong mỗi nhóm trên. Ví dụ
Giá trị vbYesNo+vbQuestion+vbDefaultButton1 làm cho hộp thông báo có 2 nút
Yes-No, Icon hiển thị là Question, nút đầu tiên có focus.
Nếu bỏ qua tham số này, hộp thông báo chỉ có nút OK
Qui định tiêu đề hộp thông báo, nếu không có tham số này, tiêu đề sẽ là tên của chương trình.
• Khi muốn sử dụng MsgBox với mục đích thông báo, thường chỉ cần ghi tham số thứ nhất. Ví dụ:
If Not IsNumeric(Text1.Text) then
MsgBox “Dữ liệu nhập không hợp lệ” End if
• Khi chương trình muốn người sử dụng xác nhận một điều gì đó thì phải sử dụng
MsgBox dưới dạng hàm. Hàm MsgBox khi đó sẽ trả về giá trị tùy theo nút mà
người sử dụng bấm, các giá trị trả về có thể là: Hằng Giá trị Nút đã bấm vbOK 1 OK vbCancel 2 Cancel vbAbort 3 Abort vbRetry 4 Retry vbIgnore 5 Ignore VbYes 6 Yes VbNo 7 No Ví dụ:
Ans = MsgBox(“Do you want to save ?”, _
vbYesNoCancel + vbApplicationModal, “Warning”) Nguyễn Đăng Quang 34 Giáo trình Visual Basic 6.0 if Ans = vbYes then SaveDocument elseif Ans = vbNo then Quit else Continue End if Giáo trình Visual Basic 6.0 35 Chương 4
Các cấu trúc điều khiển I. LỆNH ĐIỀU KIỆN IF Dạng 1:
If <Điều kiện> then
Chỉ có một viết sau then Ví dụ: Max = a If Max < b then max = b Dạng 2:
If <Điều kiện> then end if
Dạng này được sử dụng thay cho dạng 1 khi có nhiều lệnh sau then Dạng 3:
If <Điều kiện 1> then
elseif <Điều kiện 2 > then . .
elseif <Điều kiện n > then else end if Ví dụ: If a > b then Max = a Else Max = b End if II. LỆNH CHỌN LỰA CASE
Chọn lựa lệnh thực hiện theo giá trị Select Case . . Case . . Nguyễn Đăng Quang 36 Giáo trình Visual Basic 6.0 Case else End select Ví dụ Select Case Round(Diem) Case 0 to 4 Label1.Caption = “Kem” Case 5,6
Label1.Caption = “Trung binh” Case 7,8 Label1.Caption = “Khá” Case 9,10 Label1.Caption = “Giỏi” Case else
Label1.Caption = “Không hợp lệ” End select III. LỆNH LẶP FOR . NEXT Dạng For = to [ Step ] Next
được thực hiện từ đến , giá trị của được thay đổi theo Ví dụ
Tính tổng các số nguyên từ 1 đến 10 Tính tổng các số chắn S = 0 For i = 0 to 10 step 2 For i = 1 to 10 s = s + i s = s + i Next i Next i
Tạo ra một chuỗi có 10 chữ a strS = “” For i = 1 to 10 strS = strS & “a” Next i
Ví dụ:Vòng lặp sau tạo ra 10 chuỗi với cùng nội dung Dim Words, Chars, MyString For Words = 10 To 1 Step -1 For Chars = 0 To 9
MyString = MyString & Chars Next Chars Giáo trình Visual Basic 6.0 37
MyString = MyString & " " Next Words IV. LỆNH LẶP DO . LOOP Dạng 1
Do while <Điều kiện> Loop
Các lệnh trong vòng lặp bắt đầu được thực hiện nếu điều kiện đúng và lặp lại cho đến khi nào điều kiện sai Ví dụ Dim I As Integer Dim strS As String i = 1 Do while i <= 10 StrS = strS & “a” i = i +1 Loop Dạng 2 Do
Loop Until <điều kiện>
Các lệnh trong vòng lặp được thực hiện cho đến khi nào điều kiện đúng Ví dụ Dim I As Integer Dim strS As String i = 1 Do StrS = strS & “a” i = i +1 Loop Until I > 10 Ví dụ: Ví dụ:
Đếm số chữ số của 1 số nguyên dương
Tìm ước số chung lớn nhất của 2 số Dim Dem, So As Integer nguyên dương x,y So = Text1.Text Dim x,y As Integer Dem = 0 x = Text1.Text Do y = Text2.Text So = So \ 10 Do while x<>y Dem = Dem+1 If x>y then Loop Until So = 0 x = x-y else Nguyễn Đăng Quang 38 Giáo trình Visual Basic 6.0 y = y-x Loop end if
Ví dụ: Nhập tuổi từ bàn phím, giá trị tuổi nhập phải trong phạm vi từ 10 đến 99 Dim strAge As String Dim intAge As Integer Dim intPress As Integer Do
strAge = InputBox("How old are you?", "Age Ask")
‘ Check for the Cancel command button If (strAge = "") Then End ` Terminate program End If intAge = Val(strAge)
If ((intAge < 10) Or (intAge > 99)) Then
‘ The user's age is out of range
intPress = MsgBox("Your age must be between 10 and 99", vbExclamation, "Error!") End If
Loop While ((intAge < 10) Or (intAge > 99)) V. CHƯƠNG TRÌNH CON
Khi viết một chương trình lớn, để tránh viết lại nhiều lần các đoạn chương trình giống
nhau, người ta định nghĩa các đoạn chương trình giống nhau, được dùng nhiều lần
trong chương trình thành các module chương trình , còn được gọi là chương trình
con. Các chương trình con này sẽ được định nghĩa ở một nơi nào đó trong chương
trình bằng 1 tên, mỗi khi có yêu cầu sử dụng, nó sẽ được gọi bằng tên đã định nghĩa. Ví dụ: Private Sub ChangeSignal()
If imgGreen.Visible = True Then imgGreen.Visible = False imgYellow.Visible = True
ElseIf imgYellow.Visible = True Then imgYellow.Visible = False imgRed.Visible = True Else imgRed.Visible = False imgGreen.Visible = True End If End Sub Private Sub cmdChange_Click() Giáo trình Visual Basic 6.0 39
ChangeSignal ' Gọi thủ tục ChangeSignal. End Sub Private Sub imgGreen_Click()
ChangeSignal ' Gọi thủ tục ChangeSignal End Sub Private Sub imgRed_Click()
ChangeSignal ' Gọi thủ tục ChangeSignal End Sub Private Sub imgYellow_Click()
ChangeSignal ' Gọi thủ tục ChangeSignal End Sub
Có 2 loại chương trình con là thủ tục (Sub) và hàm (Function) 1. Sub
Loại chương trình con thực hiện một tác vụ nào đó khi được gọi. Có 2 loại thủ tục là
thủ tục tổng quát (General procedure) và thủ tục xử lý sự kiện (Event procedure).
• Thủ tục tổng quát được kích hoạt bằng lệnh gọi trong chương trình.
• Thủ tục xử lý sự kiện được kích hoạt khi có một sự kiện tác động lên form hoặc
đối tượng điều khiển trên form. Thủ tục xử lý sự kiện thường có tên là tượng>_. Ví dụ Form_Load hoặc Commad1_Click. . Khai báo thủ tục: Private/Public Sub [()] End sub
Thủ tục được khai báo với từ khoá Private chỉ được sử dụng trong form chứa nó (Form level).
Thủ tục được khai báo với từ khoá Public có thể sử dụng trong các form khác. 2. Hàm
Loại chương trình con luôn luôn trả về giá trị thông qua tên hàm Khai báo hàm:
Private/Public Function [()] [As ] End sub
Ví dụ: Định nghĩa hàm tính chiều dài cạnh huyền của tam giác vuông
Function Hypotenuse (A As Integer, B As Integer) As double
Hypotenuse = Sqr(A ^ 2 + B ^ 2) End Function Gọi hàm Nguyễn Đăng Quang 40 Giáo trình Visual Basic 6.0 Dim x As double
x = Hypotenuse(Text1.Text, Text2.Text) TxtTinh.text = str(x,2) Ví dụ:
Tính ngày việt nam: Hàm Weekday cho giá trị là số thứ tự chỉ ngày trong tuần. Định
nghĩa hàm vnDay cho giá trị là chuỗi ngày Việt nam
Public Function vnDay(nDay As Date) As String Select Case Weekday(nDay) Case 1 VnDay = “Chủ nhật” Case 2 VnDay = “Thứ hai” Case 3 VnDay = “Thứ ba” Case 4 VnDay = “Thứ tư” Case 5 VnDay = “Thứ năm” Case 6 VnDay = “Thứ sáu” Case 7 VnDay = “Thứ bảy” End select End function Private Sub Command1_Click()
Text1.text = “Hôm nay là “ & vnDay(Date) End sub 3. Khai báo
− Chương trình con khai báo với từ khoá Private chỉ có ý nghĩa trong phạm vi khai báo
− Chương trình con khai báo với từ khoá Public trong form có thể sử dụng trong
form đó và trong các form khác
− Chương trình con khai báo với từ khoá Public trong module có thể sử dụng
trong toàn bộ chương trình Giáo trình Visual Basic 6.0 41 Chương 5
Mảng – Chuỗi – Collection I. MẢNG 1. Định nghĩa:
Mảng là tập hợp các phần tử cùng kiểu dữ liệu được đánh thứ tự. Số thứ tự của mỗi
phần tử được gọi là chỉ số. 2. Khai báo: Dim/Public/Static () As Ví dụ: Dim A(10) As Integer ‘ Mảng 10 số nguyên
Dim Hoten(50) As String ‘ Mảng 50 chuỗi
Chỉ số đầu tiên mặc định là 0. Có 2 cách để khai báo một mảng bắt đầu từ chỉ số tuỳ ý:
• Sử dụng phát biểu Option Base trong phần General Ví dụ: Option Base 1
‘Khai báo mảng bắt đầu từ 1
• Khai báo phạm vi chỉ số: Dim/Public/Static ( to ) As Ví dụ: Dim A(1 to 10) As Integer
Mảng được truy xuất bằng cách viết (chỉ số)
Ví dụ: Đổi năm dương lịch sang năm âm lịch: Dim Can(10) As String Dim Chi(12) As String Can(0)=”Canh” Can(1)=”Tân” Can(2)=”Nhâm” Can(3)=”Quí” Can(4)=”Giáp” Can(5)=”Ất” Can(6)=”Bính” Can(7)=”Đinh” Can(8)=”Mậu” Can(9)=”Kỷ” Chi(0)=”Thân” Chi(1)=”Dậu” Nguyễn Đăng Quang 42 Giáo trình Visual Basic 6.0 Chi(2)=”Tuất” Chi(3)=”Hợi” Chi(4)=”Tý” Chi(5)=”Sửu” Chi(6)=”Dần” Chi(7)=”Mão” Chi(8)=”Thìn” Chi(9)=”Tỵ” Chi(10)=”Ngọ” Chi(11)=”Mùi” NDL = CInt(txtNDL.Text)
LblNAL.Caption = Can(NDL mod 10) & “ “ & Chi(NDL mod 12)
Mảng trong ví dụ trên có thể vừa khai báo vừa gán giá trị ban đầu như sau:
Can = Array(“Giáp”,”Ất”,”Bính”, “Đinh”, “Mậu”, “Kỷ”, “Canh”, “Tân”, “Nhâm”, “Quí”)
Chi=Array(“Thân”, ”Dậu”, ”Tuất”, ”Hợi”, ”Tý”, ”Sửu”, ”Dần”, ”Mão”, ”Thìn”,
”Tỵ”, ”Ngọ”,”Mùi”)
3. Mảng đối tượng điều khiển
Với các đối tượng điều khiển cùng loại, có thể sử dụng mảng để không phải đặt quá
nhiều tên và định nghĩa nhiều thủ tục xử lý sự kiện
a. Định nghĩa mảng đối tượng điều khiển
- Đặt 1 đối tượng trong nhóm muốn định nghĩa mảng lên form, đặt tên (sẽ dùng
làm tên mảng) và qui định giá trị các thuộc tính cần thiết (thuộc tính về kích
thước và màu sắc của các phần tử của mảng thường giống nhau, trừ thuộc tính caption),
- Right-Click trên đối tượng, chọn lệnh Copy,
- Right-Click trên form, chọn lệnh Paste. VB sẽ yêu cầu xác nhận muốn định
nghĩa mảng vì nhận thấy đối tượng mới được sao chép có cùng tên với đối
tượng trước đó trên form,
Hình 5.1: Hộp thông báo xác nhận có định nghĩa mảng đối tượng
- Trả lời Yes để định nghĩa mảng và lặp lại thao tác Paste cho các phần tử kế
tiếp. Để ý là thuộc tính Index của các phần tử mảng có thứ tự tăng dần theo Giáo trình Visual Basic 6.0 43
đúng thứ tự được sao chép trên form. Đó cũng chính là chỉ số của đối tượng trong mảng.
b.Viết lệnh cho mảng đối tượng điều khiển
- Nhấp đúp lên một trong các đối tượng thuộc mảng. Thủ tục xử lý sự kiện có dạng:
Private sub _(Index As Integer) End sub Thay vì Private sub _() End sub
- Thủ tục xử lý sự kiện được viết chung cho nhóm đối tượng định nghĩa là
mảng, tham số Index được dùng để phân biệt phần tử nhận sự kiện đó.
c. Duyệt mảng đối tượng điều khiển
Để duyệt mảng đối tượng điều khiển trên form, có thể sử dụng vòng lặp như ví dụ sau:
For i = txtFields.LBound To txtFields.UBound txtFields(i).Text = "" Next
Tuy nhiên nếu các phần tử mảng được tạo ra không liên tiếp do có một đối tượng
thuộc mảng đã bị xóa thì hệ thống sẽ thông báo lỗi. Vì vậy cách tốt hơn là sử dụng
lệnh lặp For Each như sau: Dim txt As TextBox For Each txt In txtFields txt.Text = "" Next 4. Ví dụ
Thiết kế form chọn màu tô (FillColor), mẫu tô (FillStyle) và loại hình vẽ của đối
tượng Shape. Form thiết kế có dạng sau:
Bước 1 Thiết kế giao diện (Hình 5.2)
- Định nghĩa mảng các OptionButton cho nhóm Shape với tên opShape
- Định nghĩa mảng các OptionButton cho nhóm FillStyle với tên opFillStyle
- Định nghĩa mảng các OptionButton cho nhóm Color với tên opColor. Nguyễn Đăng Quang 44 Giáo trình Visual Basic 6.0
Hình 5.2: Giao diện chưong trình ví dụ Bước 2 Viết lệnh
- Double-Click OptionButton trong nhóm Shape, viết lệnh :
Private Sub opShape_Click(Index As Integer) Shape1.Shape = Index End Sub
- Double-Click OptionButton trong nhóm FillStyle, viết lệnh :
Private Sub opFillStyle_Click(Index As Integer) Shape1.FillStyle = Index End Sub
- Double-Click OptionButton trong nhóm Color, viết lệnh :
Private Sub opColor_Click(Index As Integer) Select Case Index Case 0 Shape1.FillColor = vbRed Case 1 Shape1.FillColor = vbBlue Case 2 Shape1.FillColor = vbMagenta Case 3 Shape1.FillColor = vbYellow End Select End Sub
5. Mảng động và mảng tĩnh a. Mảng tĩnh
Là mảng được khai báo với từ khóa Dim như đã trình bày ở các phần trên. Mảng tĩnh
luôn được khai báo với số phần tử xác định trước để chương trình dịch có thể dành vùng nhớ phù hợp. Giáo trình Visual Basic 6.0 45 b.Mảng động
Là mảng có số phần tử có thể thay đổi tùy ý trong lúc chạy chương trình. Điều này
phù hợp hơn vì trong thực tế người lập trình không thể tiên liệu trước số phần tử thực tế.
Sử dụng mảng động gồm 2 bước:
- Khai báo hiện diện với từ khóa Dim nhưng số phần tử để rỗng.
- Tạo mảng thực sự khi cần thiết bằng phát biểu ReDim. Ví dụ: Dim Customers() As String … Sub Main()
ReDim Customers(1000) As String End Sub
Mảng động có thể được tạo lại nhiều lần khi cần thiết: Sub Printeport()
ReDim Customers(100) As String … …
ReDim Customers(500) As String … End Sub
Tuy nhiên lệnh cấp phát mới sẽ xóa rỗng nội dung (chuỗi) hoặc gán bằng 0 (số) mọi
phần tử đã có giá trị trước đó. Để bào toàn giá trị các phần tử, sử dụng phát biểu ReDim Preserve. Ví dụ:
ReDim Preserve Customers(500) As String
Lệnh cấp phát động cũng có thể áp dụng cho mảng nhiều chiều, tuy nhiên chỉ có thể
làm thay đổi chiều cuối cùng. Ví dụ:
ReDim Cells(1 To 100, 10) As Integer . .
ReDim Preserve Cells(1 To 100, 20) As Integer ' Đúng
ReDim Preserve Cells(1 To 200, 20) As Integer ' Sai Nguyễn Đăng Quang 46 Giáo trình Visual Basic 6.0
Có thể hủy một mảng bằng lệnh Erase. Đối với mảng động, Visual Basic giải phóng
vùng nhớ đã cấp phát cho mảng; đối với mảng tĩnh, mọi phần tử được gán giá trị rỗng
(chuỗi) hoặc có giá trị 0 (số). c. Các hàm Lbound, Ubound
Hàm được dùng để xác định chỉ số thấp nhất và cao nhất của một mảng. Nếu mảng có
nhiều chiều, phải sử dụng thêm tham số thứ hai khi sử dụng hàm. Ví dụ đối với mảng
Cells đã khai báo ở ví dụ trên, để lấy chỉ số thấp nhất, cao nhất của mỗi chiều, có thể thực hiện như sau:
Print LBound(Cells, 1) ' In chỉ số thấp nhất của chiều đầu tiên Print LBound(Cells) ' Giống như trên
Print UBound(Cells, 2) ' In chỉ số cao nhất của chiều thứ hai
' Tính số phần tử mảng
Num = (UBound(Cells) - LBound(Cells) + 1) * _
(UBound(Cells, 2 )- LBound(Cells, 2) + 1)
6. Một số vấn đề khác a. Mảng và biến variant
Visual Basic cho phép chứa mảng trong các biến variant rồi truy xuất các phần tử
mảng thông qua biến này. Ví dụ:
ReDim Names(100) As String, var As Variant
‘Khởi động giá trị cho mảng Names
var = Names() ' Sao chép mảng vào biến variant
Print var(1) ' Truy xuất mảng qua biến variant
Một cách tương tự, có thể truyền một mảng cho chương trình con với tham số hình
thức khai báo là variant rồi truy xuất các phần tử mảng trong chương trình con thông qua tham số đó.
Ví dụ: Hàm tính tổng các phần tử mảng
Function ArraySum(arr As Variant) As Variant
Dim i As Long, result As Variant
For i = LBound(arr) To UBound(arr) result = result + arr(i) Next ArraySum = result End Function
Cũng có thể áp dụng cách trên để truyền mảng 2 chiều thông qua tham số hình thức có kiểu variant. Ví dụ: Private Sub Form_Load() Giáo trình Visual Basic 6.0 47 Dim Fact(4, 4) As Integer abc Fact End Sub Private Sub abc(x As Variant) For i = 0 To 4 For j = 0 To 4 s = s + x(i, j) Next Next End Sub
Để xác định kiểu của mảng khi truyền cho tham số variant, sử dụng hàm VarType để
xác định kiểu như ví dụ sau:
If VarType(arr) = (vbArray + vbInteger) Then ' Mảng số nguyên
ElseIf VarType(arr) = (vbArray + vbLong) Then ' Mảng kiểu long … End if
b. Gán mảng và trả về giá trị kiểu mảng
Điểm mới của mảng trong Visual Basic 6.0 so với các phiên bản trước đó là gán
mảng và viết chương trình con trả về giá trị kiểu mảng. Ví dụ: Gán mảng ReDim a(10, 10) As Integer Dim b() As Integer … b() = a()
Ví dụ: Hàm trả về giá trị kiểu mảng
Function InitArray(first As Long, Last As Long) As Long()
ReDim result(first To Last) As Long Dim i As Long For i = first To Last result(i) = i Next InitArray = result End Function c. Mảng Byte
Trong Visual Basic, mảng kiểu byte có tính chất đặc biệt, đó là có thể gán trực tiếp
chuỗi cho một mảng byte. Khi đó, mảng được gán được cấp phát động để chứa đủ các
ký tự được gán. Vì mỗi ký tự trong chuỗi của Visual Basic 5.0 và 6.0 có chiều dài 2
byte (unicode) nên số phần tử mảng được cấp phát sẽ gấp đôi số ký tự trong chuỗi. Nguyễn Đăng Quang 48 Giáo trình Visual Basic 6.0 Ví dụ:
Dim b() As Byte, Text As String Text = "123" b() = Text
For i = LBound(b) To UBound(b) Debug.Print b(i)
‘Giá trị in ra sẽ là 49 0 50 0 51 0 Next II. CHUỖI KÝ TỰ 1. Khai báo: Dim As String Hoặc Dim As String* Chiều dài
- Khai báo String: Khai báo chuỗi động có chiều dài tối đa 2 tỷ ký tự.
- Khai báo String* Chiều dài: Khai báo chuỗi có chiêu dài cố định , chiều dài tối đa 65535. 2. Các hám xử lý chuỗi
Len(s): Lấy chiều dài chuỗi Ví dụ: Len(“abcd”)=4
Ucase(s): Đổi chuỗi chữ thường thành chuỗi chữ in
Ví dụ: Ucase(“abcd”)=”ABCD”
Lcase(s): Đổi chuỗi chữ in thành chuỗi chữ thường
Ví dụ: Lcase(“ABCD”)=”abcd”
Ltrim(s): Cắt khoảng trắng bên trái chuỗi
Ví dụ: Ltrim(“ Anh”)=”Anh”
Rtrim(s): Cắt khoảng trắng bên phải chuỗi
Ví dụ: Rtrim(“Anh ”)=”Anh”
Trim(s): Cắt khoảng trắng 2 bên chuỗi
Ví dụ: Trim(“ Anh ”)=”Anh”
Left(s,n): Trả về n ký tự đầu tiên bên trái chuỗi
Ví dụ: Left(“Visual Basic”,6)=”Visual”
Right(s,n): Trả về n ký tự đầu tiên bên phải chuỗi
Ví dụ: Right(“Visual Basic”,5)=”Basic”
Mid(s,i,n): Trả về n ký tự trong chuỗi bắt đầu từ vị trí i.
Ví dụ: Mid(“Visual Basic”,8,3)=”Bas”
Space(n): Trả về chuỗi có n khoảng trắng. Ví dụ: Space(5)=” “
String(n,c): Trả về chuỗi có n ký tự c.
Ví dụ: String(4,”x”)=”xxxx” Giáo trình Visual Basic 6.0 49
Instr([i,]s1,s2[,n]): Cho vị trí xuất hiện của chuỗi s2 trong s1. Trong đó:
i Vị trí bắt đầu xét (tuỳ chọn) S1: Chuỗi cần dò tìm s2: Chuỗi tìm
n : Cách so sánh (0- So từng ký tự, 1-Không phân biệt chữ thường, chữ hoa) St = “Visual Basic” Ví dụ: Instr(St,”a”)=5 Instr(6,St,”a”)=9 Instr(10,St,”a”)=0
Replace(s,s1,s2[, i[, n]]): Tìm và thay thế s1 trong s bởi s2. Trong đó:
i: vị trí bắt đầu thay thế, giá trị mặc định là 1 (thay thế từ đầu)
n : số lần thay thế, giá trị mặc định là 1 (thay thế tất cả) Ví dụ:
St = “tôi đi học với bạn tôi”
Replace(St,”tôi”,”anh”) = ”anh đi học với bạn anh”
Format(s,format):Định dạng chuỗi s theo chuỗi định dạng format.
Ký tự thường sử dụng trong chuỗi định dạng:
@ : Thay thế cho một ký tự hoặc khoảng trắng
&: Thay thế cho một ký tự hoặc không có ký tự nào
Mặc định chuỗi kết quả sẽ được điền đầy theo chuỗi định dạng từ phải sang trái. Ký
tự ! phía trước chuỗi định dạng có ý nghĩa điền kết quả từ trái sang phải. Ký tự > (<)
phía trước chuỗi định dạng buộc chuyển kết quả thành chữ thường (chữ hoa) Ví dụ:
Format(“abcde”,”@@@@@@”) = “ abcde”
Format(Format(1234.567, "Currency"), "@@@@@@@@@@@")=" $1,234.57"
Format("abcde", "!@@@@@@") = "abcde "
Format("abcde", ">& & & & &) = "A B C D E"
Format("6152127865", "&&&-&&&-&&&&") = "615-212-7865" III. COLLECTION 1. Giới thiệu
Là danh sách nhóm phần tử có quan hệ vơi nhau. Đối tượng Collection khác với
mảng ở những điểm sau:
- Không cần khai báo trước số phần tử, có thể thêm, bớt phần tử bất kỳ lúc nào.
- Việc thêm bớt phần tử được thực hiện một cách tự động, người lập trình không
phải quan tâm đến việc cấp phát vùng nhớ cho phần tử muốn thêm hoặc giải
phòng vùng nhớ của phần tử bị xóa. Nguyễn Đăng Quang 50 Giáo trình Visual Basic 6.0
- Dữ liệu của mỗi phần tử chứa trong đối tượng Collection có thể tùy ý trong khi
mảng chỉ có thể chứa các phần tử cùng kiểu dữ liệu.
- Ngoài giá trị chứa trong Collection, mỗi phần tử còn chứa kèm một giá trị
khóa giúp truy tìm phần tử nhanh chóng ngoài chỉ số và tên.
- Khi một phần tử được thêm vào collection, người lập trình chỉ có thể đọc chứ
không thể thay đổi giá trị của phần tử. Muốn thay đổi giá trị phần tử, phải xóa
giá trị cũ rồi thêm giá trị mới.
Những đặc điểm trên cho thấy Collection có nhiều ưu điểm hơn so với mảng, tuy
nhiên nó vẫn không thể thay thế được mảng trong Visual Basic vì tốc độ truy xuất
trên Collection chậm hơn so với mảng. Một ví dụ điển hình như điền một mảng
10000 số nguyên kiểu long nhanh hơn 100 lần so với collection. Vì vậy việc lựa chọn
mảng hay collection tùy thuộc vào yêu cầu của chương trình.
2. Các thao tác trên Collection a. Tạo Collection
Collection là một đối tượng. Khai báo collection như sau: Dim As Collection Set = New Collection Hoặc Dim As New Collection
Ví dụ: Dim EmployeeNames As Collection
Set EmployeeNames = New Collection Hoặc
Dim EmployeeNames As New Collection
b. Thêm giá trị vào Collection
Để thêm một giá trị, sử dụng phương thức Add, dạng như sau:
Add Item [, key][, before][, after] Trong đó Item Giá trị thêm. key
Chuỗi duy nhất đi kèm với mỗi giá trị.
Before, after Vị trí mốc thêm. Lưu ý:
- Thứ tự các phần tử trong Collection đánh bắt đầu từ 1,
- Khi mốc thêm là số, vị trí thêm được xác định theo chỉ số,
- Khi mốc thêm là chuỗi, vị trí thêm được xác định dựa theo thuộc tính key,
- Các tham số Before và After là tùy chọn nhưng không thể xuất hiện đồng thời.
Ví dụ 1: Thêm liên tiếp 2 giá trị vào danh sách nhân viên
Dim EmployeeNames As New Collection
EmployeeNames.Add “John Smith”, “Marketing” Giáo trình Visual Basic 6.0 51
EmployeeNames.Add “Anne Lipton”,”Sales”
Ví dụ 2: Thêm giá trị vào trước Anne Lipton trong danh sách trên
EmployeeNames.Add “Aves Lipton”, “Excecutive”,”Sales”
c. Truy xuất giá trị trong Collection
Giá trị phần tử trong Collection được truy xuất thông qua thuộc tính Item bằng chỉ số hoặc key của phần tử.
Ví dụ: Truy xuất phần tử đầu tiên trong danh sách trên
Debug.Print EmployeeNames.Item(“Sales”)
Debug.Print EmployeeNames.Item(1)
Hàm ItemExists sau đây có thể được dùng để kiểm tra một giá trị có tồn tạo trong
collection hay không dựa theo khóa.
Function ItemExists(col As Collection, Key As String) As Boolean Dim dummy As Variant On Error Resume Next dummy = col.Item(Key)
ItemExists = (Err <> 5) End Function
d. Xóa một giá trị trong Collection
Xóa một giá trị trong Collection bằng phương thức Remove : Remove
Trong đó Index là vị trí xóa, có thể là giá trị số hoặc chuỗi
Ví dụ 1: Xóa phần tử đầu tiên EmployeeNames.Remove 1
Ví dụ 2: Xóa phần tử có key là Sales
EmployeeNames.Remove “Sales”
Ví dụ 3: Xóa toàn bộ danh sách
Sub RemoveAllItems(col As Collection) Do While col.Count col.Remove 1 Loop End Sub Lưu ý:
Có thể xóa nhanh một danh sách bằng cách thực hiện như sau: Set EmployeeNames = Nothing Hoặc
Set EmployeeNames = New Collection Nguyễn Đăng Quang 52 Giáo trình Visual Basic 6.0
e. Thay đổi giá trị một phần tử trong Collection
Không thể thay đổi giá trị phần tử trong collection, cách duy nhất có thể thực hiện là
xóa nó rồi thêm giá trị cần sửa đổi. Chương trình con ReplaceItem sau cho phép thực hiện điều này.
' INDEX có thẻ có giá trị số hoặc chuỗi.
Sub ReplaceItem(col As Collection, index As Variant, newValue As Variant) ' Xóa phần tử col.Remove index ' Rồi thêm mới
If VarType(index) = vbString Then col.Add newValue, index Else col.Add newValue, , index End If End Sub f. Lặp trên Collection
• Lặp thông qua chỉ số phần tử:
Ví dụ: Nạp danh sách giá trị trong Collection vào ListBox Dim i As Long
For i = 1 To EmployeeNames.Count
List1.AddItem EmployeeNames(i) Next
• Lặp bằng phát biểu For Each…Next
Ví dụ: In danh sách giá trị trong Collection Dim var As Variant For Each var in EmployeeNames List1.AddItem var Next Hoặc Dim cust As Customer For Each cust In Customers List1.AddItem cust.Name Next
Mảng đối tượng trên form thực chất được quản lý trong một Collection. Có thể sử
dụng lệnh lặp For Each trên để thao tác nhanh trên mảng đối tượng. Ví dụ:
Làm cho tất cả các TextBox (mảng txtFlds) trên Form ở trạng thái disable Sub Full_Disable() Dim oText as TextBox Giáo trình Visual Basic 6.0 53 For Each oText in txtFlds oText.Enabled = False Next End Sub 3. Ví dụ khác
Giá trị chứa trong Collection có thể có độ phức tạp bất kỳ chứ không chỉ đơn giản là
chứa giá trị như các ví dụ trên. Ví dụ :
Tạo danh sách Collection trong đó mỗi phần tử chứa bao gồm Tên, Đơn vị và mức lương
Dim Employees As New Collection
' Mỗi phần tử gồm tên, đơn vị và mức lương
Employees.Add Array("John", "Marketing", 80000), "John"
Employees.Add Array("Anne", "Sales", 75000), "Anne"
Employees.Add Array("Robert", "Administration", 70000), "Robert" . .
Để in danh sách nhân viên, có thể viết như sau: Dim var As Variant For Each var in Employees Debug.Print var(0) Next In đơn vị của Anne
Debug.Print Employees(“Anne”)(1) In mức lương của Robert
Debug.Print Employees(“Robert”)(2) Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 55 Chương 6 TextBox - ListBox-ComboBox I. TEXTBOX
Là đối tượng điều khiển dùng nhập một nội dung dạng text. Nội dung nhập có thể một dòng hoặc nhiều dòng.
1. Các thuộc tính bổ sung Scrollbars
Qui định các loại thanh cuộn được sử dụng trong textbox, chỉ dùng
khi Multiline=True , có các giá trị:
0 - None. Không có thanh cuộn
1 - Horizontal. Chỉ có thanh cuộn ngang
2 - Vertical. Chỉ có thanh cuộn dọc
3 - Both. Có cả hai loại thanh cuộn SelStart
Đọc hoặc đặt vị trí con trỏ (hoặc vị trí bắt đầu chọn) trong textbox SelLength
Đọc hoặc đặt số ký tự được chọn trong textbox. Khi không chọn, Sellength=0 SelText
Lấy nội dung đang được chọn.
Nếu không chọn, Seltext=””. Gán Seltext sẽ chèn chuỗi mới vào textbox tại con trỏ
Nếu có chọn. Gán Seltext sẽ thay thế chuỗi chọn bởi nội dung mới
HideSelection = False : Phần nội dung chọn vẫn được highlight khi textbox mất focus
= True: Phần nội dung chọn không được highlight khi textbox mất focus
PasswordChar Được sử dụng khi nhập mật khẩu. Các ký tự nhập vào luôn được
trình bày bằng ký tự định nghĩa trong thuộc tính này. 2. Sự kiện
Sự kiện thường hay sử dụng đối với textbox là Change, sự kiện này xảy ra mỗi khi
nội dung textbox thay đổi do người dùng nhập hay hiệu chỉnh thuộc tính Text 3. Ví dụ
Thiết kế chương trình có dạng một Editor (trình soạn thảo văn bản) đơn giản. Định
nghĩa chức năng tìm kiếm một nội dung trên Editor.
Form chính gồm 1 textbox làm editor và nút bấm Find để thực hiện chức năng tìm kiếm (Hình 6.1) Nguyễn Đăng Quang 56 Giáo trình Visual Basic 6.0
Hình 6.1: Các Form của chương trình sọan thảo văn bản
Trên form chính (đặt tên frmMain), có
Trên form tìm kiếm (đặt tên frmFind), các đối tượng sau: có các đối tượng sau: TextBox Label Thuộc tính Giá trị Thuộc tính Giá trị Name TxtEditor Name Label1 Multiline True Caption Find text Scrollbar None CommandButton CommandButton Thuộc tính Giá trị Thuộc tính Giá trị Name CmdFind Name CmdFind Caption &Find Caption &Find CommandButton Enabled False Thuộc tính Giá trị Name CmdCancel Caption &Cancel
Người chạy chương trình sẽ nhập nội dung vào textbox như một Editor. Khi chưa có
nội dung, chức năng tìm kiếm sẽ không có tác dụng. Vì vậy định nghĩa thủ tục xử lý
sự kiện Change: Khi textbox có thay đổi và nội dung khác rỗng thì nút lệnh sẽ được kích hoạt (Enabled)
Private Sub txtEditor_Change()
If txtEditor.Text <> "" Then cmdFind.Enabled = True Else cmdFind.Enabled = False End If Giáo trình Visual Basic 6.0 57 End Sub
Khi bấm nút Find, form thứ hai sẽ xuất hiện. Định nghĩa sự kiện Click cho nút bấm này: Private Sub cmdFind_Click() frmFind.Show End Sub
Trên form tìm kiếm, nếu người dùng nhập một nội dung tìm kiếm và bấm nút Find,
chương trình sẽ thực hiện chức năng tìm kiếm. Vì vậy định nghĩa lệnh cho sự kiện Click Private Sub cmdFind_Click() Dim p As Integer
If txtFind.Text <> "" Then
txtText = frmMain.txtEditor.Text
p = InStr(1, txtText, txtFind.Text)
‘Tìm vị trí xuất hiện đầu tiên If p <> 0 Then
frmMain.txtEditor.SelStart = p- 1
‘Giữ vị trí đầu tiên
frmMain.txtEditor.SelLength = Len(txtFind.Text) Else
MsgBox "Search text not found" End If End If End Sub
Vì chuỗi cần tìm có thể xuất hiện nhiều lần trong editor. Định nghĩa lại Caption của
Nút Find thành Find Next để mỗi lần bấm nút này thì chương trình sẽ tìm tiếp từ sau
vị trí vừa tìm thấy và viết lại lệnh như sau: Private Sub cmdFind_Click() Static p As Integer
If txtFind.Text <> "" Then
txtText = frmMain.txtEditor.Text
p = InStr(p+1, txtText, txtFind.Text)
‘Tìm từ sau vị trí vừa tìm thấy If p <> 0 Then
frmMain.txtEditor.SelStart = p - 1
‘Giữ vị trí đầu tiên
frmMain.txtEditor.SelLength = Len(txtFind.Text) ‘Highlightchuỗi tìm thấy Else
MsgBox "Search text not found" End If End If End Sub
Biến p được định nghĩa lại thành biến static để giữ lại vị trí vừa tìm thấy và chương
trình sẽ tiếp tục tìm từ vị trí kế sau đó. II. LISTBOX
Dùng liệt kê danh sách nhiều đối tượng và cho phép người dùng chọn lựa. Nguyễn Đăng Quang 58 Giáo trình Visual Basic 6.0 1. Các thuộc tính Columns
Số cột được dùng để thể hiện nội dung của listbox, mặc định =0 (Hình 6.2).
Hình 6.2: ListBox với thuộc tính Columns
IntegralHeight Listbox tự động điều chỉnh kích thước sao cho luôn thể hiện
đầy đủ nội dung, có giá trị True/False. ListCount
Thuộc tính này đọc - Số phần tử có trong listbox. List
Danh sách nội dung (chuỗi) trình bày trong listbox ItemData
Danh sách chứa nội dung đi kèm với các phần tử chứa trong
thuộc tính List. Danh sách này không được trình bày , chỉ phục vụ cho chương trình. ListIndex
Chỉ số của phần tử được chọn trong listbox - Phần tử đầu tiên
có chỉ số 0. Khi không có phần tử nào được chọn , thuộc tính này có giá trị -1. Text
Chuỗi chứa nội dung mục được chọn trong danh sách. Tương
đương với cách viết List(Listindex) Multiselect
Qui định chế độ chọn các phần tử trong Listbox
0 - None: Mỗi lúc chỉ chọn được một phần tử.
1 - Simple: Cho phép chọn nhiều phần tử bằng cách click.
2 - Extended: Chọn nhiều phần tử theo kiểu chọn trong Windows Explorer. SelCount
Cho biết số phần tử đang được chọn trong danh sách List Selected
Mảng tương ứng với danh sách list, xác định phần tử có được
chọn trong listbox (True/False) Topindex
Chỉ số phần tử xuất hiện đầu tiên trong Listbox. Giáo trình Visual Basic 6.0 59 Sorted
Qui định các phần tử trong danh sách được sắp thứ tự (True/false) NewIndex
Chỉ số phần tử vừa mới được thêm vào Listbox. Lưu ý:
• Có thể nhập trực tiếp nội dung danh sách trong lúc thiết kế tại cửa sổ thuộc tính,
xuống dòng bằng Ctrl+Enter (Hình 6.2)
Hình 6.2: Nhập giá trị cho thuộc tính List trong cửa sổ thuộc tính
• Để lấy nội dung của đối tượng đang được chọn. Sử dụng cách viết Dim St As String
St = Listbox.List(ListBox.ListIndex) Hoặc St = Listbox.Text
• Để duyệt danh sách chứa trong danh sách list, sử dụng vòng lặp for
For i = 0 to ListBox.ListCount - 1 Debug.Print ListBox.List(i) Next i 2. Các phương thức
AddItem [,]: thêm một phần tử vào danh sách
Thêm phần tử Item vào danh sách tại vị trí Index. Nếu không có tham số index, phần
tử sẽ được thêm vào cuối danh sách. Ví dụ 1: ListBox.AddItem “Hoa” ListBox.AddItem “Ngoc” ListBox.AddItem “Hai” ListBox.AddItem “Tuan” Nguyễn Đăng Quang 60 Giáo trình Visual Basic 6.0
Thêm 4 phần tử vào cuối danh sách . Ví dụ 2:
Thêm 100 phần tử vào danh sách For i = 0 to 99
ListBox.AddItem “Item “ & i Next i
Phương thức AddItem thường được viết trong form_load để khởi động giá trị cho ListBox.
Dữ liệu khởi động có thể chứa trong một mảng như ví dụ sau:
For i = LBound(MyData) To UBound(MyData) List1.AddItem MyData(i) Next
Hoặc có thể khởi động một danh sách nhưng không cần định nghĩa mảng bằng cách
sử dụng hàm choose như sau: For i = 1 To 5
List1.AddItem Choose(i, "America", "Europe", "Asia", "Africa", "Australia")" Next
RemoveItem : xóa một phần tử khỏi danh sách với Index là số thứ tự của phần tử cần xoá. Ví dụ :
Xoá 50 phần tử đầu tiên của danh sách For i = 0 to 49 ListBox.RemoveItem i Next i
Clear: Xóa toàn bộ danh sách List Ví dụ :
Xoá tất cả các phần tử trong danh sách ListBox.Clear 3. Sự kiện
Sự kiện thường hay sử dụng đối với Listbox là Click, sự kiện này xảy ra mỗi khi click
một phần tử trên Listbox hoặc thay đổi phần tử chọn bằng bàn phím (di chuyển vệt sáng). Giáo trình Visual Basic 6.0 61
Một sự kiện cũng đôi khi được sử dụng đó là sự kiện scroll, sự kiện này xảy ra khi nội
dung listbox cuộn. Ví dụ sau minh họa cách sử dụng sự kiện scroll kết hợp với thuộc
tính TopIndex để đồng bộ hoạt động cuộn của 2 listbox.
Hình 6.3: Đồng bộ hoạt động của 2 listbox
Lệnh viết trên các Listbox như sau: Private Sub lstN_Click()
lstSquare.TopIndex = lstN.TopIndex
lstSquare.ListIndex = lstN.ListIndex End Sub Private Sub lstSquare_Click()
lstN.TopIndex = lstSquare.TopIndex
lstN.ListIndex = lstSquare.ListIndex End Sub
Private Sub lstN_MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single) Call lstN_Click End Sub
Private Sub lstSquare_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single) Call lstSquare_Click End Sub
Private Sub lstN_MouseMove(Button As Integer, Shift As Integer, _ X As Single, Y As Single) Call lstN_Click End Sub
Private Sub lstSquare_MouseMove(Button As Integer, _
Shift As Integer, X As Single, Y As Single) Call lstSquare_Click End Sub Private Sub lstN_Scroll()
lstSquare.TopIndex = lstN.TopIndex End Sub
Private Sub lstSquare_Scroll()
lstN.TopIndex = lstSquare.TopIndex End Sub Nguyễn Đăng Quang 62 Giáo trình Visual Basic 6.0 4. Một số ví dụ
Ví du 1: Sử dụng thuộc tính ItemData .
Thiết kế chương trình với Form gồm Listbox, 2 Textbox trình bày phần tử được chọn
và Itemdata của phần tử được chọn (Hình 6.4).
Hình 6.4: Form chương trình của ví dụ 1
- Tại thuộc tính List của listbox, nhập các nội dung “Muc 1”, “Muc 2”. .”Muc 7” .
Sử dụng Ctrl+Enter để xuống dòng.
- Tại thuộc tính ItemData của listbox, nhập các nội dung 100, 200. .700 . Sử dụng
Ctrl+Enter để xuống dòng.
Mỗi khi người dùng click một phần tử trên listbox. Nội dung của phần tử tương ứng
xuất hiện trong textbox. Định nghĩa lệnh xử lý sự kiện Click như sau: Private Sub List1_Click() Dim p As Integer Text1.Text = List1.Text p = List1.ListIndex
Text2.Text = List1.ItemData(p) End Sub
Nội dung listbox được khởi động trong formLoad như sau: Private Sub Form_Load() For i = 0 To 99 List1.AddItem "Muc " & i
List1.ItemData(i) = (i + 1) * 100 Next End Sub
Ví dụ 2: Sử dụng thuộc tính TopIndex để tự động cuộn ListBox.
Sử dụng form của ví dụ 1, thêm nút “Auto Scroll” và viết lệnh như sau: Private Sub Command1_Click() For i = 0 To 99 List1.TopIndex = i Next End Sub Giáo trình Visual Basic 6.0 63
Hình 6.5: Form chương trình của ví dụ 2
Ví dụ 3: Sử dụng thuộc tính Selected để tự động chọn xen kẽ các phần tử trong listbox. (Hình 6.6).
Sử dụng form của ví dụ 2, thêm nút “Select” và viết lệnh như sau: Private Sub Command2_Click() For i = 0 To 99
If i Mod 2 = 0 Then List1.Selected(i) = True Next End Sub
Hình 6.6: Form của chương trình ví dụ 3
Ví dụ 4: Thiết kế form gồm 2 ListBox, dữ liệu được khởi động trước cho một listbox,
viết lệnh trên các nút để di chuyển các phần tử chọn (có thể chọn nhiều) từ listbox này
sang listbox khác. Việc di chuyển cũng có thể thực hiện khi nhấp đúp trong listbox.
Giao diện của chương trình như hình 6.7.
Hình 6.7: Form chương trình ví dụ 4 Nguyễn Đăng Quang 64 Giáo trình Visual Basic 6.0
Lệnh cho các nút viết như sau: Private Sub cmdMove_Click()
' Di chuyển phần tử đang chọn từ listbox trái sang listbox phải
If lstLeft.ListIndex >= 0 Then
lstRight.AddItem lstLeft.Text
lstLeft.RemoveItem lstLeft.ListIndex End If End Sub
Private Sub cmdMoveAll_Click()
' Di chuyển mọi phần tử từ listbox trái sang listbox phải Do While lstLeft.ListCount
lstRight.AddItem lstLeft.List(0) lstLeft.RemoveItem 0 Loop End Sub Private Sub cmdBack_Click()
' Di chuyển phần tử đang chọn từ listbox phải sang listbox trái
If lstRight.ListIndex >= 0 Then
lstLeft.AddItem lstRight.Text
lstRight.RemoveItem lstRight.ListIndex End If End Sub
Private Sub cmdBackAll_Click()
' Di chuyển mọi phần tử từ listbox phải sang listbox trái Do While lstRight.ListCount
lstLeft.AddItem lstRight.List(0) lstRight.RemoveItem 0 Loop End Sub
Private Sub lstLeft_DblClick()
' Mô phỏng tác động bấm phím cmdMove.Value = True End Sub
Private Sub lstRight_DblClick()
' Mô phỏng tác động bấm phím cmdBack.Value = True End Sub Giáo trình Visual Basic 6.0 65 III. COMBOBOX
Là đối tượng điều khiển kết hợp giữa textbox và listbox. Trong combobox, người
dùng có thể chọn một đối tượng có trước hoặc nhập mới một nội dung trong textbox phía trên.
Combo box cũng có các thuộc tính của ListBox (trừ MultiSelect, Selected) , ngoài ra
còn có thêm thuộc tính Style để qui định kiểu của combobox
0 - Dropdown Combo Combo chuẩn. Chỉ trình bày listbox khi click nút mũi tên bên phải. 1 - Simple
Luôn thể hiện listbox bên dưới textbox. Khi nội dung
nhập trong textbox giống với một nội dung trong listbox,
nó sẽ tự động cuộn để thể hiện đầy đủ phần tử đó 2 - Dropdown List
Không có Textbox. Chỉ trình bày listbox khi click nút mũi tên bên phải
Hình 6.8 trình bày các dạng ComboBox với các giá trị của thuộc tính Style.
Hình 6.8: Các dạng ComboBox
ComboBox cũng có các sự kiện giống như ListBox. Sự kiện thuờng viết lệnh là sự kiện Click. Nguyễn Đăng Quang 66 Giáo trình Visual Basic 6.0
IV. DRIVELISTBOX, DIRLISTBOX VÀ FILELISTBOX
Là các đối tượng điều khiển được xây dựng dựa trên ListBox và ComboBox, thường
sử dụng kết hợp với nhau cho phép người sử dụng dễ dàng chọn lựa một ổ dĩa, một
thư mục hoặc một tập tin trong máy. 1. DriveListBox
ComboBox cho phép chọn một ổ dĩa trong các ổ dĩa của máy. Thuộc tính thường sử
dụng là thuộc tính Drive cho biết ổ dĩa đang được chọn. Khi chọn một ổ dĩa mới, sự
kiện Change xảy ra trên DriveListBox. 2. DirListBox
Đối tượng trình bày cây thư mục của một ổ dĩa và cho phép người sử dụng chọn lựa.
Thuộc tính thường sử dụng là Path cho biết đường dẫn thư mục đang chọn. Khi chọn
một thư mục mới, sự kiện Change xảy ra trên DirListBox. 3. FileListBox
Đối tượng trình bày các tập tin trong một thư mục và cho phép người sử dụng chọn
lựa. Các thuộc tính thường sử dụng là : Path Đường dẫn thư mục
FileName Tên đầy đủ tập tin đang chọn trong FileListBox Pattern
Loại tập tin được xuất hiện trong FileListBox
*.* - Mọi tập tin chứa trong thư mục
*.txt; *.doc; *.rtf – 3 loại tập tin được xuất hiện
Khi chọn một tập tin, sự kiện Click xảy ra trên FileListBox.
DriveListBox, DirListBox và FileListBox thường sử dụng chung với nhau để chọn
một tập tin trên dĩa. Khi đặt chúng lên form cần viết lệnh để đồng bộ hoạt động như sau:
Lệnh viết trên DriveListBox Private Sub Drive1_Change()
' Khi chọn ổ dĩa trên DriveListBox, gán cho thuộc tính Path
' của DirListBox để làm thay đổi cây thư mục
Dir1.Path = Left$(Drive1.Drive, 1) & ":\" End Sub
Lệnh viết trên DirListBox Private Sub Dir1_Change()
‘ Gán đường dẫn chọn cho đối tượng FileListBox để làm thay
‘ Đổi nội dung FileListBox File1.Path = Dir1.Path End Sub
Cuối cùng khi người sử dụng click tại tên một tập tin trong FileListBox, tên tập tin sẽ
được xử lý được xác định như sau: Giáo trình Visual Basic 6.0 67 Filename = File1.Path
If Right$(Filename, 1) <> "\" Then Filename = Filename & "\"
Filename = Filename & File1.Filename Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 69 Chương 7 Scrollbar – Image – Timer I. SCROLLBAR
Là một đối tượng điều khiển dùng chọn một giá trị trong một khoảng cố định cho
trước một cách trực quan.
Có hai loại thanh cuộn: thanh cuộn dọc (VScrollbar) và thanh cuộn ngang (HScrollbar) 1. Các thuộc tính Min
Qui định giá trị cực tiểu của thanh cuộn Max
Qui định giá trị cực đại của thanh cuộn Value
Giá trị đang được chọn của thanh cuộn, phụ thuộc vào vị trí của con
chạy trên thanh cuộn. Giá trị này có thể đọc từ vị trí của con chạy
hoặc gán trong chương trinh.
SmallChange Qui định khoảng tăng/giảm của giá trị chọn trên thanh cuộn mỗi khi
bấm nút mũi tên ở hai đầu (default=1)
LargeChange Qui định khoảng tăng/giảm của giá trị chọn trên thanh cuộn mỗi khi
click trên vùng chạy của con chạy (default=1)
Khi một thanh cuộn được tạo ra trên form, luôn luôn cần định nghĩa các giá trị min và max 2. Sự kiện
Change Sự kiện xảy ra sau khi con chạy thay đổi vị trí hoặc thuộc tính value thay đổi Scroll
Sự kiện xảy ra khi con chạy thay đổi vị trí hoặc thuộc tính value thay đổi 3. Ví dụ:
Thiết kế form chọn màu bằng cách phối hợp 3 màu cơ bản RGB. Giá trị của các thành
phần màu sẽ được chọn bằng thanh cuộn. Màu chọn được thể hiện bằng đối tượng Shape.
Hình 7.1: Thiết kế form chọn màu
Các đối tượng trên form được chọn như sau: Nguyễn Đăng Quang 70 Giáo trình Visual Basic 6.0 Đối tượng Shape Các Textbox (Mảng) Thuộc tính Giá trị Thuộc tính Giá trị Name Shape1 Name txtColor FillStyle 0 - Solid
Đối tượng Hscrollbar (mảng) Shape 0 - Rectangle Thuộc tính Value Name hsbColor Min 0 Max 255 Value 100
Viết lệnh cho sự kiện Form_Load như sau: Private Sub Form_Load()
Shape1.FillColor = RGB(hsbColor(0).Value, hsbColor(1).Value, hsbColor(2).Value) End sub
Viết lệnh cho sự kiện Change của các thanh cuộn như sau:
Private Sub hsbColor_Change(Index As Integer)
TxtColor(Index).Text = hsbColor(Index).Value ChangeFillColor End Sub
Định nghĩa sub ChangeFillColor trong phần General như sau: Sub ChangeFillColor()
Shape1.FillColor = RGB(hsbColor(0).Value, hsbColor(1).Value, hsbColor(2).Value) End sub
Sửa định nghĩa Form_Load thành Private Sub Form_Load() ChangeFillColor End sub II. IMAGE
Sử dụng để đặt một hình ảnh lên form. Các thuộc tính Picture
Giữ hình cần trinh bày, thường nhận giá trị trả về từ hàm LoadPicture
BorderStyle Kiểu khung (0-None, 1-Fixed Single) Stretch
Hình tự động co giãn để nằm gọn trong khung đã qui định (True/False)
Hàm LoadPicture(PathName) nạp các tập tin ảnh và chứa vào thuộc tính Picture của
đối tượng Image. Các loại tập tin ảnh có thể nạp là : .BMP, .GIF, .JPG, .WMF, .CUR, .ICO
Ví dụ: Nạp tập tin ảnh từ dĩa
Image1.Picture = LoadPicture(“C:\WINDOWS\SETUP.BMP”) Giáo trình Visual Basic 6.0 71 III. TIMER
Đối tượng dùng xử lý các sự kiện thời gian. Lệnh viết trong đối tượng timer sẽ tự
động thực hiện sau một khoảng thời gian xác định. 1. Thuộc tính
Interval Qui định khoảng thời gian xảy ra sự kiện. Tính bằng ms. Giá trị 0 làm Timer ngưng hoạt động) 2. Sự kiện
Sự kiện được dùng để định nghĩa mã lệnh là sự kiện Timer. Sự kiện này xảy ra mỗi
khi timer đếm đủ khoảng thời gian qui định trong thuộc tính Interval 3. Ví dụ
Sử dụng đối tượng Image và Timer để tạo đối tượng hoạt động trong chương trình
Hình 7.1: Form chương trình tạo đối tượng chuyển động Image1 Image3 Thuộc tính Giá trị Thuộc tính Giá trị Name Image1 Name Image3 Picture Buttfly1 Timer1 Visible False Thuộc tính Giá trị Image2 Name Timer1 Thuộc tính Giá trị Interval 150 Name Image2 Enabled False Picture Buttfly2 CommandButton Visible False Thuộc tính Giá trị Name CmdSw Caption Start
Viết lệnh cho sự kiện form_load như sau: Private Sub Form_Load()
Image3.Picture = Image1.Picture End Sub
Viết lệnh cho sự kiện thời gian của Timer: Nguyễn Đăng Quang 72 Giáo trình Visual Basic 6.0 Private Sub Timer1_Timer() Static T As Integer If T = 0 Then
Image3.Picture = Image1.Picture T = 1 Else
Image3.Picture = Image2.Picture T = 0 End If End Sub
Viếtî lệnh cho CommandButton: Private Sub CmdSw_Click()
If CmdSw.Caption=”Start” Then Timer1.Interval=150 CmdSw.Caption = "Stop" Else Timer1.Interval=0 CmdSw.Caption = "Start" End If End Sub Giáo trình Visual Basic 6.0 73 Chương 8 Truy xuất dữ liệu I.
TRUY XUẤT DỮ LIỆU BẰNG ĐỐI TƯỢNG ĐK CÓ KẾT NỐI CSDL 1. DataControl
Data control là đối tượng điều khiển cho phép tự động hoá quá trình kết nối và truy
xuất dữ liệu từ các tập tin cơ sở dữ liệu Access, Foxpro, Excel, Text. .
Data control cho phép duyệt, thao tác trên các vùng của cơ sở dữ liệu thông qua các
đối tượng điều khiển kết nối cơ sở dữ liệu (Bound-controls) mà không cần viết lệnh. 2. Các thuộc tính Connect
Loại cơ sở dữ liệu kết nối (Access, Dbase,Excel).
DatabaseName Chuỗi đường dẫn tên tập tin cơ sở dữ liệu.
Recordsource Tên tập tin dữ liệu (Tên bảng nếu là cơ sở dữ liệu Access). Recordset
Thuộc tính dùng truy xuất các mẫu tin trong cơ sở dữ liệu đã được kết nối bằng Datacontrol.
Recordsettype Loại recordset, có các giá trị sau:
− dbOpenTable: Sử dụng khi mở 1 table. Có thể thêm, xoá, cập nhật các mẫu tin.
− dbOpenDynaset: Sử dụng khi mở 1 table hay 1 query, có thể gồm
nhiều vùng từ nhiều tập tin. Cho phép thể thêm, xoá, cập nhật các mẫu tin.
− DbOpenSnapshot: Sử dụng khi mở 1 table hay 1 query, có thể
gồm nhiều vùng từ nhiều tập tin, được dùng để duyệt hay tạo
report, không thể thay đổi. ReadOnly
(True/False) Cơ sở dữ liệu có thể cập nhật được hay không BOFAction
Thuộc tính định nghĩa hoạt động của Datacontrol khi di chuyển đến
mẫu tin đầu tiên, có các giá trị sau:
- 0: MoveFirst - Di chuyển về mẫu tin đầu tiên,
- 1: BOF - Ở vị trí đầu tiên EOFAction
Thuộc tính định nghĩa hoạt động của Datacontrol khi di chuyển đến
mẫu tin cuối cùng, có các giá trị sau:
- vbEOFActionMoveLast = 0: Khi di chuyển đến hết tập tin trên
recordset tự động nhảy đến phần tử cuối cùng,
- vbEOFActionEOF = 1: Khi di chuyển đến hết tập tin trên
recordset, disable nút MoveNext trên Datacontrol,
- vbEOFActionAddnew = 2: Khi di chuyển đến hết tập tin trên
recordset, tự động kiểm tra dữ liệu (Validate) và thêm mẫu tin mới vào Recordset
3. Các đối tượng điều khiển có kết nối cơ sở dữ liệu (Bound-controls) Nguyễn Đăng Quang 74 Giáo trình Visual Basic 6.0
Đối tượng điều khiển có kết nối cơ sở dữ liệu là các đối tượng điều khiển có thêm các
thuộc tính (Datasource, DataField) cho phép kết nối với một field của bảng dữ liệu để
trình bày hoặc cập nhật nội dung của field.
Trong Visual Basic, các đối tượng điều khiển có kết nối cơ sở dữ liệu gồm:
Các đối tượng chuẩn (Intrinsic) • Check box • Image • Label • Picture box • Text box • List box • Combo box
Các đối tượng mở rộng (Extended) • Data-bound list box • Data-bound combo box • Data-Bound Grid (DBGrid)
Các thuộc tính được sử dụng khi truy xuất cơ sở dữ liệu Thuộc tính Ý nghĩa
DataChanged True/False: Cho biết nội dung field có thay đổi hay không DataField Tên vùng dữ liệu. Datasource
Tên nguồn dữ liệu, thường là tên của Datacontrol. Ví dụ:
Thiết kế form duyệt bảng Employee chứa trong cơ sở dữ liệu Access NWIND.mdb.
Các Field muốn trình bày dữ liệu gồm:
Họ tên : FirstName + LastName Ngày sinh: Birth Date
Mã số nhân viên: Employee ID
Hình 8.1: Duyệt bảng Employees trong cơ sở dữ liệu NWIND.MDB Giáo trình Visual Basic 6.0 75
Đối tượng, thuộc tính và giá trị thuộc tính của các đối tượng được tóm tắt trong bảng sau
Đối tượng Thuộc tính Giá trị Ý nghĩa Form Name FrmData Caption Bound Browser Data Name datEmployees Tên DataControl Caption Employees DatabaseNameC:\Program
Cơ sở dữ liệu NWIND.MDB Files\VB6\NWIND.MDB RecordSource Employees Bảng Employees TextBox Name TxtLastName DataField LastName Vùng họ (LastName) DataSource DatEmployees TextBox Name TxtFirstName DataField FirstName Vùng tên (FirstName) DataSource DatEmployees TextBox Name TxtBirthDate DataField BirthDate Vùng ngày sinh (BirthDate) DataSource DatEmployees TextBox Name TxtEmployeeId DataField EmployeeID Vùng mã nhân viên DataSource DatEmployees Enabled False Label Name Label1 Caption Employee: Label Name Label2 Caption Birth Date: Label Name Label3 Caption Employee ID:
Bấm phím F5 để chạy chương trình, sử dụng các phím mũi tên trên DataControl để duyệt xem các mẫu tin.
4. Sử dụng data-bound listbox (DBList) và combobox (DBCombo)
Giả sử có 2 bảng dữ liệu cho như sau: Nguyễn Đăng Quang 76 Giáo trình Visual Basic 6.0
- Publishers chứa thông tin về các nhà xuất bản sách, thông tin chứa trong bảng
gồm các field PubID (Mã NXB) và Name (Tên NXB),
- Titles chứa thông tin về mỗi quyền sách , thông tin chứa trong bảng gồm các
field PubID (Mã NXB), AU_ID (Mã tác giả), Title (Tựa sách), Year_Published (Năm XB) và ISBN.
Hình 8.2: Quan hệ giữa các bảng Publishers và Titles
Người ta muốn xem các thông tin về một quyển sách gồm tựa (Title), năm XB
(Year_Published), ISBN và tên NXB (Name) với vùng Name có thể chọn để cập nhật
từ danh sách các nhà xuất bản. Form dữ liệu có dạng như hình 8.3.
Hình 8.3: Xem thông tin sách có thể điều chỉnh tên nhà xuất bản
Databound ListBox (DBList) và Databound ComboBox (DBCombo) là các đối tượng
được thiết kế để thực hiện chức năng này, chúng là các Listbox và ComboBox có
thêm một số thuộc tính đặc biệt để kết nối với cơ sở dữ liệu. Hai đối tượng điều khiển
này chứa trong Microsoft Databound List Control. Để sử dụng, nạp lên ToolBox bằng
cách bấm tổ hợp phím CTRL+T và chọn trong hộp thoại Components.
Các thuộc tinh kết nối cơ sở dữ liệu của DBList và DBCombo Datasource
Tên nguồn dữ liệu, thường là tên của Datacontrol DataField
Tên vùng dữ liệu chứa trong Recordset đã mở bằng Datacontrol.
Khi giá trị mới được chọn, nội dung vùng tương ứng trong CSDL sẽ
được tự động cập nhật khi di chuyển sang mẫu tin mới. Giáo trình Visual Basic 6.0 77 Rowsource
Tên Datacontrol kết nối với table có nội dung được sử dụng để điền vào DBList/DBCombo
BoundColumn Tên vùng thuộc recordset được chỉ định bởi Rowsource được sử
dụng để cập nhật Recordset trong Datasource ListField
Tên vùng thuộc Recordset trong Rowsource được sử dụng để điền vào DBList/DBCombo Lưu ý:
• Tên các vùng DataField và BoundColumn nên giống nhau trong 2 cơ sở dữ liệu.
Thường đó là các vùng có thiết lập quan hệ (Relationship).
• Trong trường hợp chỉ sử dụng 1 Datacontrol các thuộc tính Datasource và
Rowsource sẽ có cùng giá trị. Khi đó BoundColumn và DataField cùng có giá trị
là tên vùng cần cập nhật trong cơ sở dữ liệu. Ví dụ
Muốn tạo form duyệt bảng Titles với mã NXB (PubID) và Name được lấy từ bảng
Publishers. Giá trị các vùng gán được tóm tắt theo hình 8.4 .
Hình 8.4: Sử dụng DBCombo và DBList để duyệt bảng Titles và Publishers
Các đối tượng điều khiển sử dụng và giá trị thuộc tính đuợc tóm tắt theo bảng sau: Ðối tượng Thuộc tính Giá trị Data1 Connect Access DatabaseName Biblio.mdb Recordsettype 0-dbOpenTable RecordSource Titles Data2 Connect Access DatabaseName Biblio.mdb
Recordsettype 2-dbOpenSnapshot
RecordSource SELECT PubID, Name FROM Publishers ORDER BY PubID TextBox Name TxtTitle Datasource Data1 DataField Title TextBox Name TxtYear Datasource Data1 Nguyễn Đăng Quang 78 Giáo trình Visual Basic 6.0 DataField Year Published TextBox Name TxtISBN Datasource Data1 DBCombo Name DBCombo1 Datasource Data1 DataField PubID Rowsource Data2 BoundColumn PubID ListField Name
5. Sử dụng Databound Grid Control (DBGrid)
Databound Grid control là đối tượng điều khiển giúp trình bày nội dung bảng dữ liệu
dưới dạng bảng (dòng, cột), nó có các thuộc tính kiểm soát thao tác trên bảng dữ liệu
như sửa chữa (edit), thêm mới (addnew) hoặc xóa một mẫu tin trong bảng. Hình dưới
trình bày một form sử dụng DBGrid để thao tác trên bảng Pulishers (Nhà xuất bản)
của cơ sở dữ liệu BIBLIO.MDB.
Hình 8.5: Trình bày dữ liệu bằng DBGrid
Phần này trình bày các bước sử dụng DBGrid để thao tác trên bảng dữ liệu kết hợp
với Data control mà không cần viết lệnh.
Bước 1: Đặt Datacontrol lên form, điều chỉnh các thuộc tính:
Database Name: Tên cơ sở dữ liệu,
Recordsource: Tên bảng dữ liệu ,
Bước 2: Nạp đối DBGrid lên ToolBox
Bấm tổ hợp phím Ctrl+T để mở hộp thoại Components,
Check tại đối tượng Microsoft Databound Grid Control 5.0 Bấm nút OK
Biểu tương DBGrid xuất hiện trên Toolbox.
Bước 3: Đặt DBGrid lên form
Click tại biểu tượng DBGrid trên ToolBox,
Click , kéo để xác định kích thước DBGrid trên form. Giáo trình Visual Basic 6.0 79
Bước 4: Liên kết DBGrid với DataControl
Điều chỉnh thuộc tính Datasource của DBGrid thành tên của Datacontrol,
Bấm phím phải trên DBGrid rồi chọn Retrieve fields
Tên các vùng của bảng dữ liệu sẽ xuất hiện trên dòng tiêu đề của DbGrid.
Hình 8.6: DBGrid sau khi nạp các vùng của bảng dữ liệu
Bước 5: Điều chỉnh các thuộc tính của DBGrid
Bấm phím phải trên DBGrid, chọn properties để mở Property Pages, Hình 8.7: Thẻ General Thẻ General
Ý nghĩa các tùy chọn được tóm tắt trong bảng sau: AllowAddnew
Cho phép nhập thêm mẫu tin mới trên DBGrid AllowDelete
Cho phép xóa mẫu tin ngay trên DBGrid bằng cách chọn mẫu tin rồi bấm phím Delete AllowUpdate
Cho phép thay đổi nội dung các mẫu tin ngay trên DBGrid
ColumnHeaders Có tiêu đề hay không Headlines
Kích thước dòng tiêu đề tính theo dòng Nguyễn Đăng Quang 80 Giáo trình Visual Basic 6.0 RowHeight Chiều cao dòng
RowdividerStyle Kiểu đường phân cách các mẫu tin trong DBGrid Datamode
DBGrid có kết nối với bảng dữ liệu hay không Thẻ Keyboard
Định nghĩa cách sử dụng phím Tab trong DBGrid Hình 8.8: thẻ Keyboard Thẻ Columns
Thứ tự trình bày các Field trên các cột của DBGrid và định dạng giá trị trên mỗi cột. Hình 8.9: Thẻ Columns Thẻ Layout
Độ rộng cột và chế độ căn nội dung trong cột của DBGrid, kiểu của vạch phân cách cột Hình 8.10: Thẻ Layout Giáo trình Visual Basic 6.0 81 Thẻ Color
Chọn màu chữ, màu nền trong DBGrid Hình 8.11: Thẻ Color Thẻ Font
Chọn kiểu chữ tiêu đề và nội dung DBGrid Hình 8.12: Thẻ Font Ví dụ :
Sử dụng DBGrid để duyệt bảng Title trong cơ sở dữ liệu Biblio.mdb. Các bước thực hiện như sau:
Bước 1: Đặt DataControl lên form, điều chỉnh các thuộc tính theo bảng sau: Thuộc tính Giá trị Name Data1 Connect Access DatabaseName Biblio.mdb Recordsettype 1-dbOpenDynaset RecordSource Titles
Bước 2: Đặt DBGrid lên form, điều chỉnh các thuộc tính theo bảng sau: Thuộc tính Giá trị DataSource Data1 Nguyễn Đăng Quang 82 Giáo trình Visual Basic 6.0 AllowAddNew False AllowDelete False AllowUpdate False
Bước 3: Nạp các vùng của bảng dữ liệu Title lên DBGrid
Right-Click, chọn Retrieve Fields để lấy thông tin của và vùng thành các cột trong DBGrid.
Bấm F5 chạy chương trình. Di chuyển qua các mẫu tin trong DBGrid bằng các phím
mũi tên hoặc sử dụng Datacontrol để di chuyển. Chương trình có dạng như hình 8.12.
Hình 8.13: Sử dụng DBGrid duyệt bảng Title
Thêm DBCombo chọn nhà xuất bản (Publisher) để người dùng có thể chọn chỉ xem
các tựa sách theo một nhà xuất bản . Thêm TextBox chọn năm xuất bản để người
dùng có thể chọn xem các tựa sách xuất bản trong một năm nào đó.
Đặt thêm các đối tượng lên form và qui định các thuộc tính như cho trong bảng sau: Đối tượng Thuộc tinh Giá trị Data2 Connect Access DatabaseName Biblio.mdb
Recordsettype 2-dbOpenSnapshot
RecordSource SELECT PubID, Name FROM Publishers ORDER BY PubID TextBox Name TxtFlt ComboBox Name cbFlt List Year Published Publisher DBCombo Name cbPublisher Datasource Data2 DataField PubID Rowsource Data2 BoundColumn PubID Giáo trình Visual Basic 6.0 83 ListField Name Button Name CmdApply Caption Apply
Hình 8.14: Thêm đối tượng để thực hiện chức năng lọc
Viết lệnh cho sự kiện click trên ComboBox Private Sub CbFlt_Click() Select Case CbFlt.ListIndex Case 0 FltMode = 0 txtFlt.Visible = True cbPublisher.Visible = False Case 1 FltMode = 1 txtFlt.Visible = False cbPublisher.Visible = True End Select End Sub
Trong đó biến FltMode là biến chung được dùng để chọn chế độ xem theo năm xuất bản hay nhà xuất bản
Viết lệnh cho nút lệnh Apply Private Sub CmdApply_Click()
QryStr = "SELECT * FROM Titles WHERE " Select Case FltMode Case 0
QryStr = QryStr & "[Year Published]= " & txtFlt.Text Case 1 Nguyễn Đăng Quang 84 Giáo trình Visual Basic 6.0
QryStr = QryStr & "PubID= " & cbPublisher.BoundText End Select Data1.RecordSource = QryStr Data1.Refresh End Sub
Viết lệnh cho form_load qui định phần tử đầu tiên được chọn trong ComboBox Private Sub Form_Load() CbFlt.ListIndex = 0 End Sub
Bấm F5 chạy chương trình, thay đối giá trị chọn năm xuất bản rồi bấm nút Apply để xem tác dụng. II.
TRUY XUẤT DỮ LIỆU THÔNG QUA DATA ACCESS OBJECT
Một cách khác để truy xuất dữ liệu là sử dụng Data Access Object (DAO). Đối tượng
này phép truy xuất dữ liệu bằng chương trình. 1. Các thao tác cơ bản a. Mở Cơ sở dữ liệu
Lệnh Set Db = OpenDatabase(DbName, Options, read-only) Trong đó Db
Biến kiểu Database đại điện cho cơ sở dữ liệu cần truy xuất DbName
Chuỗi tên tập tin dữ liệu Options
Tuỳ chọn khi mở cơ sở dữ liệu. Có giá trị True khi mở ở chế độ
Exclusive (chỉ có một người truy xuất), có giá trị False khi mở ở
chế độ Shared (nhiều người truy xuất)
read-only (True/False) Chế độ mở cơ sở dữ liệu
Ví dụ: Mở cơ sở dữ liệu BIBLIO.MDB Private Sub Form_Load() AppFolder = App.Path Dim db As Database
Set db = OpenDatabase(AppFolder & "\BIBLIO.MDB") … End sub b. Mở Recordset
Lệnh Set rs = db.OpenRecordset(Source) Trong đó rs Biến kiểu Recordset
Source Tên bảng dữ liệu hoặc chuỗi câu lệnh SQL Ví dụ:
Dim Db As Database, rs As Recordset
Set Db = OpenDatabase("BIBLIO.MDB")
Set rs = Db.OpenRecordset("AUTHORS") Giáo trình Visual Basic 6.0 85
Hoặc mở Recordset từ chuỗi SQL
Set Db = OpenDatabase("BIBLIO.MDB")
Set Rs = Db.OpenRecordset("SELECT * FROM AUTHORS")
Có thể liên kết một recordset đã mở với Datacontrol như sau: Set Data1.Recordset = Rs
2. Các thuộc tính của Recordset
AbsolutePosition Vị trí tuyệt đối của mẫu tin trong Recordset, mẫu tin đầu tiên có thứ tự 0 Bookmark
Vị trí của mẫu tin hiện thời (kiểu Variant) EOF
Thuộc tính cho biết mẫu tin hiện hành có ở sau mẫu tin cuối (True/False)
cùng hay không , cho giá trị True khi không có mẫu tin nào. BOF
Thuộc tính cho biết mẫu tin hiện hành có ở trước mẫu tin đầu (True/False)
tiên không, cho giá trị True khi không có mẫu tin nào. NoMatch
Cho kết quả tìm kiếm sau lệnh Seek hoặc Find (True/False) RecordCount
Số mẫu tin trong Recordset Fields
Mảng các vùng trong Recordset Index Chọn tên vùng Index Sort Chọn tên vùng sort
3. Các thao tác trên Recordset
a. Lấy giá trị của 1 vùng : Có 3 cách viết Cách 1: Recordset.Fields() Ví dụ: mYear = rs.Fields(5) Cách 2: Recordset.Fields() Ví dụ:
mYear = rs.Fields(“Year Published”)
Cách 3: Recordset![Chuỗi tên vùng] Ví dụ: mYear = rs![Year Published] b. Duyệt Phuơng thức Công dụng Ví dụ MoveNext
Chuyển sang mẫu tin kế tiếp rs.MoveNext MoveLast
Chuyển đến mẫu tin cuối cùng rs.MoveLast
MovePrevious Chuyển về mẫu tin trước rs.MovePrevious MoveFirst
Chuyển về mẫu tin đầu tiên rs.MoveFirst Nguyễn Đăng Quang 86 Giáo trình Visual Basic 6.0
Ví dụ: Thiết kế form duyệt bảng Titles của cở sở dữ liệu BIBLIO.MDB không sử
dụng DataControl. Giao diện chương trình có dạng như hình dưới 8.14
Hình 8.14: Truy xuất dữ liệu bằng DAO
Khai báo biến toàn cục như sau: Dim myDb As Database Dim myRS As Recordset
Mở cơ sở dữ liệu khi nạp form và làm xuất hiện mẫu tin đầu tiên Private Sub Form_Load()
AppFolder = App.Path ' Lấy đường dẫn hương trình
If Right(AppFolder, 1) <> "\" Then AppFolder = AppFolder & "\"
' Mở cơ sở dữ liệu BIBLIO.MDB
Set myDb = OpenDatabase(AppFolder & "BIBLIO.MDB") 'Mở Recordset
Set myRS = myDb.OpenRecordset("Select * from Titles ORDER BY Title")
' Hiện mẫu tin đầu tiên
If myRS.RecordCount > 0 Then myRS.MoveFirst
'di chuyển về mẫu tin đầu tiên Displayrecord
' Hiện nội dung mẫu tin End If End Sub Private Sub Displayrecord()
' Làm xuất hiện nội dung mẫu tin bằng cách gán giá trị vào các textbox With myRS
txtTitle.Text = .Fields("Title")
txtYearPublished.Text = .Fields("[Year Published]")
txtISBN.Text = .Fields("ISBN")
txtPubID.Text = .Fields("PubID") End With End Sub Giáo trình Visual Basic 6.0 87
Viết lệnh cho các nút di chuyển Private Sub CmdNext_Click() myRS.MoveNext
' Di chuyển sang mẫu tin kế tiếp If Not myRS.EOF Then Displayrecord Else myRS.MoveLast End If End Sub
Private Sub CmdPrevious_Click()
myRS.MovePrevious ' Di chuyển về mẫu tin trước đó If Not myRS.BOF Then Displayrecord Else myRS.MoveFirst End If End Sub Private Sub CmdFirst_Click() myRS.MoveFirst
' Di chuyển về mẫu tin đầu tiên Displayrecord End Sub Private Sub CmdLast_Click() myRS.MoveLast
' Di chuyển về mẫu tin cuối cùng Displayrecord End Sub
c. Di chuyển nhanh bằng Bookmark Dim Lastmark As Variant
Lastmark = rs.Bookmark ‘ Đánh dấu trước khi di chuyển rs.MoveLast
‘ Di chuyển đến mẫu tin cuối … rs.Bookmark =Lastmark
‘Quay trở lại mẫu tin trước khi dc c. Tìm kiếm bằng Find
Phương thức Hoạt động Ví dụ FindNext
Tìm mẫu tin kế tiếp thỏa mãn điều kiện rs.FindNext “PubID=5” FindLast
Tìm mẫu tin cuối cùng thỏa mãn điều kiện rs.FindLast “PubID=5” Nguyễn Đăng Quang 88 Giáo trình Visual Basic 6.0
FindPrevious Tìm mẫu tin phía trước thỏa mãn điều rs.FindPrevious kiện “PubID=5” FindFirst
Tìm mẫu tin đầu tiên thỏa mãn điều kiện rs.FindFirst “PubID=5” Ví dụ:
FindStr = “PubID = “ & mID With rs.Recordset Bm= .Bookmark .MoveFirst .FindFirst FindStr if .Nomatch then MsgBox “Not found” .Bookmark = bm End if End with d. Tìm kiếm bằng Seek Ví dụ: Dim MyTable As Recordset Set MyTable = Data1.Recordset MyTable.Index = "Supplier ID" With MyTable Bm= .Bookmark .Seek "=", mID if .Nomatch then MsgBox “Not found” .Bookmark = bm End if End with
e. Cập nhật cơ sở dữ liệu
• Thay đối giá trị 1 Field
Gọi phương thức Edit, gán giá trị mới cho vùng cần thay đổi, sau đó sử dụng phương
thức Update để cập nhật thay đổi. Ví dụ: With rs .Edit .Fields![PubID]=”12345” .Update End With Giáo trình Visual Basic 6.0 89 • Thêm mẫu tin mới
Sử dụng phương thức AddNew để thêm mới một mẫu tin trống, gán giá trị rồi sử
dụng phương thức Update để cập nhật. Ví dụ: With rs ‘ Thêm mẫu tin trống .AddNew ' Gán giá trị mới
.rs.Fields("Title") = "The Data Control"
.rs.Fields("Year Published") = "1993" .rs.Fields("AU_ID") = 37
.rs.Fields("ISBN") = "2344456533" .rs.Fields("PubID") = 43 ' Cập nhật .rs.Update End With f. Xoá 1 mẫu tin
Sử dụng phương thức Delete để xoá mẫu tin hiện hành rs.Delete Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 91 Chương 9 PictureBox – Xử lý mouse I. PICTUREBOX
Là đối tượng điều khiển dùng để trình bày các hình ảnh. Picture Box khác với Image
ở chỗ Image chỉ trình bày ảnh, không thể xử lý trên ảnh. PictureBox ngoài chức năng
trình bày hình ảnh, còn có các phương thức đồ họa cho phép xử lý trên ảnh như xoá ảnh, vẽ thêm . .
PictureBox còn dùng làm đối tượng chứa để chứa các đối tượng khác. 1. Thuộc tính: Picture
Giữ hình ảnh cần trình bày, sử dụng LoadPicture để nạp tập tin ảnh
BorderStyle Kiểu khung 0-None , 1- Fixed Single Align
Vị trí đặc biệt trên form
0-None,1-Align Top, 2-Align Bottom, 3-Align Left, 4-Align Right AutoSize
True/False: Thuộc tính tự động điều chỉnh kích thước PictureBox để
thể hiện đầy đủ đối tượng chứa trong nó (giống thuộc tính stretch của Image) FillColor Màu tô FillStyle Mẫu tô, có các giá tri:
0-Solid, 1-Transparent, 2- Horizontal Line, 3-Vertical Line, 4-
Upward Diagonal, 5-Downward Diagonal, 6-Cross, 7-Diagonal Cross
Hình 9.1: Các mẫu nét vẽ 92
Giáo trình Visual Basic 6.0
DrawStyle Kiểu của nét vẽ, có các giá trị:
0-vbSolid, 1-vbDash, 2-vbDot, 3-vbDashDot, 4- vbDashDotDot, 5- vbInvisible, 6-vbInsideSolid Hình 9.2: Mẫu tô
DrawWidth Bề dày nét vẽ tính theo điểm. Có giá trị 0-32767 CurrentX,
Tọa độ vẽ hiện tại trong PictureBox. Được cập nhật sau mỗi lệnh vẽ CurrentY
AutoRedraw True/False:Nội dung vẽ trong PictureBox được tự động vẽ lại mỗi
khi thay đổi kích thước
2. Các phương thức đồ họa Pset [Step] (x,y), color
Chấm 1 điểm trên Picture Box với
(x,y) Tọa độ điểm. Khi có từ khóa Step, tọa độ điểm có ý nghĩa là độ dời điểm so
với tọa độ hiện tại.
Color Màu điểm chấm, nét chấm phục thuộc vào thuộc tính DrawWidth
Ví dụ: Chấm 1000 với màu và độ dày nét ngẫu nhiên trên Picture Box For i = 1 To 1000
Picture1.DrawWidth = Rnd * 10 + 1
Picture1.PSet (Rnd * ScaleWidth, Rnd * ScaleHeight), _
RGB(Rnd * 255, Rnd * 255, Rnd * 255) Next Picture1.DrawWidth = 1 Print
In lên PictureBox tại tọa độ hiện tại và cập nhật CurrentX = 0 , CurrentY =
tọa độ dòng kế tiếp. Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 93 Ví dụ : Picture1.Print “Hello” Cls Xoá PictureBox
Line [Step] (x1,y1) – [Step] (x2,y2), Color, BF
Vẽ đoạn thẳng hoặc hình chữ nhật Trong đó:
Step (x1,y1) Tọa độ đầu.
Step là tuỳ chọn, khi đó (x1,y1) có ý nghĩa là độ dời so với tọa độ vẽ hiện tại.
(x1,y1) Tọa độ bắt đầu vẽ, nếu không có thì vẽ từ tọa độ hiện tại.
Step (x2,y2) Tọa độ cuối
Step là tuỳ chọn, khi đó (x2,y2) có ý nghĩa là độ dời so với tọa độ vẽ hiện tại.
(x2,y2) Tọa độ cuối, bắt buộc phải có. Color Màu nét vẽ . B Vẽ hình chữ nhật F
Tô hình chữ nhật, chỉ được dùng với F Lưu ý:
- Màu nét vẽ cũng có thể xác định bằng thuộc tính ForeColor.
- Kiểu , cỡ nét vẽ xác định bằng thuộc tính DrawStyle, DrawWidth Ví dụ 1:
Picture1.Line (0,0) - (100,100)
’ Vẽ đoạn thẳng từ (0,0) - (100,100) Picture1.Line - Step (50,50)
’ Vẽ tiếp từ (100,100) đến (150,150)
Picture1.Line (0,0) - (100,100), vbRed , B
‘Vẽ hình chữ nhật với nét vẽ màu đỏ
Picture1.Line (0,0) - (100,100), vbRed , BF
‘Vẽ hình chữ nhật tô màu đỏ Ví dụ 2: Vẽ tam giác
Line (1000, 2000)- Step (1000, 0) ' Vẽ đường ngang Line -Step (0, 1000) ' Vẽ đường dọc Line -(1000, 2000) ' Khép kín tam giác
Ví dụ 3: Vẽ đồ thị hàm số y = sin(x) trong đoạn -pi đến +pi Const pi = 3.141593 Xc = Picture1.ScaleWidth/2 Yc = Picture1.ScaleHeight/2
kx = Picture1.Width / (2 * pi)
‘ Hệ số giãn đồ thị theo trục x ky = Picture1.Height / 2
‘ Hệ số giãn đồ thị theo trục y For i = -pi To pi Step 0.2 94
Giáo trình Visual Basic 6.0
Picture1.Line -(Xc + kx * i, Yc - ky * Sin(i)) Next I
Ví dụ 4: Vẽ đồ thị hàm số theo cận trái, cận phải và số mẫu vẽ
Dim Count As Integer, xLeft As Integer, xRight As Integer Dim nStep As Single pi = 3.141593 Picture1.Cls Count = Val(txtCnt.Text) xLeft = Val(txtFrom.Text) xRight = Val(txtTo.Text)
nStep = (xRight - xLeft) / Count With Picture1
kx = .ScaleWidth / (xRight - xLeft) ky = .ScaleHeight / 2 .CurrentX = kx * xLeft .CurrentY = -ky * Sin(xLeft) End With
For i = xLeft To xRight Step nStep
Picture1.Line -(kx * i, -ky * Sin(i)), vbRed Next i
Circle [Step] (x, y), radius, color, start, end [,aspect]
Vẽ đường tròn, ellipse hoặc một cung tròn, ellipse Trong đó: (x,y)
Tọa độ tâm, khi có Step thì có ý nghĩa là độ dời so với tọa độ hiện tại radius Bán kính
Color Màu nét vẽ. Cỡ nét vẽ qui định bởi thuộc tính DrawStyle Start Góc đầu (radian) End Góc cuối (radian)
Aspect Số dương, thực hoặc nguyên dùng qui định tỷ lệ vẽ 2 trục.
Aspect > 1: Ellipse kéo dài theo trục X
Aspect < 1: Ellipse kéo dài theo trục Y Ví dụ :
- Vẽ hình tròn với nét vẽ có cỡ 3 pixel, viền màu xanh, tô màu vàng With Pict1 .DrawWidth = 3 .FillStyle = vbFSSolid Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 95 .FillColor = vbYellow
.Circle (1200, 1200), 1000, vbGreen End With
- Vẽ Ellipse đặc, bán kính trục Y là 500, trục X là 250 With Pict1 .FillStyle = 0
.Circle (1000,1000), 500, , , , 2 End With
- Vẽ Ellipse đặc, bán kính trục Y là 250, trục X là 500 With Pict1 .FillStyle = 0
.Circle (1000,1000), 500, , , , 1/2 End With
Để đơn giản hoá lệnh vẽ Ellipse có thể định nghĩa thủ tục vẽ Ellipse như sau:
Sub Ellipse(X As Single, Y As Single, RadiusX As Single, RadiusY As Single)
Dim ratio As Single, radius As Single ratio = RadiusY / RadiusX If ratio < 1 Then radius = RadiusX Else radius = RadiusY End If
Circle (X, Y), radius, , , , ratio End Sub
- Vẽ một cung 1/4 đường tròn: Const PI = 3.141593
Circle (ScaleWidth / 2, ScaleHeight / 2), 1500, vbBlack, 0, PI / 2 - Vẽ Pie slice: Const PI = 3.141593 FillStyle = vbFSSolid FillColor = vbBlue
Circle (ScaleWidth / 2 + 200, ScaleHeight / 2 - 200), 1500, vbBlack, -(PI * 2), - (PI / 2) FillColor = vbCyan 96
Giáo trình Visual Basic 6.0
Circle (ScaleWidth / 2, ScaleHeight / 2), 1500, vbBlack, -(PI / 2), -(PI * 2) Hình 9.3: Vẽ PieSlice
3. Các thuộc tính qui định đơn vị vẽ
ScaleMode Qui định đơn vị vẽ, có các giá trị
0 - User: Đơn vị vẽ do người dùng định nghĩa
1 - Twip: 1440 twips = 1’’, 567 twips = 1 cm (Đơn vị mặc định) 2 - Point: 72 = 1’’
3 - Pixel: Đơn vị điểm trên màn hình
4 - Character: Tính theo đơn vị ký tự. Theo chiều ngang mỗi đơn vị bằng
120 twip, theo chiều dọc mỗi đon vị bằng 240 twip 5 - Inch 6 - Milimeter 7 - Centimeter
ScaleHeight, Qui định đơn vị tính theo ScaleMode. ScaleWidth ScaleLeft,
Qui định lại trục tọa độ trên PictureBox. Giá trị mặc định là (0,0). ScaleTop Ví dụ:
Muốn dời trục tọa độ đến (50,50). Đặt ScaleLeft = -50, ScaleTop = -50
Ví dụ : Vẽ đồ thị hàm số trên form bằng cách dời hệ trục toạ độ sử dụng các thuộc tính ScaleLeft, ScaleTop.
‘ Vùng cần vẽ trên mặt phẳng X-Y
Const XMIN = -5, XMAX = 5, YMIN = -100, YMAX = 100 Const XSTEP = 0.01 Private Sub Form_Resize()
' Tự động điều chỉnh vùng vẽ khi kích thước form thay đổi ScaleLeft = XMIN ScaleTop = YMAX Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 97 ScaleWidth = XMAX - XMIN ScaleHeight = -(YMAX - YMIN) ' Vẽ lại Refresh End Sub Private Sub Form_Paint() Dim x As Single, y As Single Cls ForeColor = vbBlack CurrentX = ScaleLeft CurrentY = ScaleTop
Print "f(x) = x ^ 3 - 2 * x ^ 2 + 10 * x + 5" CurrentX = ScaleLeft
Print "X-interval: [" & XMIN & "," & XMAX & "]" CurrentX = ScaleLeft
Print "Y-range: [" & YMIN & "," & YMAX & "]" ' Vẽ hệ trục x- y Line (XMIN, 0)-(XMAX, 0) Line (0, YMIN)-(0, YMAX)
' Vẽ đồ thị với nét vẽ màu đỏ ForeColor = vbRed
For x = XMIN To XMAX Step XSTEP
y = x ^ 3 - 2 * x ^ 2 + 10 * x + 5 PSet (x, y) Next End Sub
4. Các lệnh ghi nạp ảnh
- Hàm LoadPicture nạp tập tin ảnh từ dĩa và trình bày trong PictureBox.
Dạng Picture1.Picture = LoadPicture() Ví dụ:
Picture1.Picture = LoadPicture(“C:\Window\setup.bmp”)
Lệnh SavePicture lưu ảnh trên PictureBox lên dĩa thành tập tin. Ảnh luôn được lưu dạng Bitmap
Dạng SavePicture Picture1.Image, Ví dụ:
SavePicture Picture1.Image, “MyPic.bmp” 98
Giáo trình Visual Basic 6.0 II. XỬ LÝ MOUSE
Xử lý Mouse bao gồm việc viết lệnh để xử lý cho các sự kiện sau:
- Sự kiện bấm phím mouse
Private Sub MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
- Sự kiện di chuyển mouse
Private Sub MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
- Sự kiện nhả phím mouse
Private Sub MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Ý nghĩa của các tham số:
Button Cho biết nút trên mouse đang được bấm, có các giá trị sau: 1 - vbLeftButton: Nút trái
2 - vbRightButton: Nút phải
4 - vbMiđleButton: Nút giữa Shift
Giá trị cho biết trạng thái các phím Shift, Ctrl và Alt khi
xảy ra sự kiện Mouse. Có các giá trị sau: 1 - vbShiftMask: Bấm Shift 2 - vbCtrlMask: Bấm Control
4 - vbAltMask: Bấm Alternate X,Y
Tọa độ hiện tại trên đối tượng Lưu ý:
Trạng thái của các phím tổ hợp được tính như sau: Giá trị Trị thập Hằng Ý nghĩa nhị phân phân 001 1 vbShiftMask Bấm phím SHIFT 010 2 vbCtrlMask Bấm phím CTRL 100 4 VbAltMask Bấm phím ALT 011 3
vbShiftMask + vbCtrlMask Bấm tổ hợp phím SHIFT+CTRL 101 5
vbShiftMask + vbAltMask Bấm tổ hợp phím SHIFT+ALT Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 99 110 6
vbCtrlMask + vbAltMask CTRL+ALT 111 7
vbCtrlMask + vbAltMask + Bấm tổ hợp phím SHIFT+ vbShiftMask CTRL+ALT
Quan hệ giữa các sự kiện MouseDown, MouseUp, MouseMove với Click và DblClick như sau:
• Sư kiện Click xảy ra sau chuỗi sự kiện MouseDown. .MouseUp
• Khi người dùng DbClick trên đối tượng, chuỗi sự kiện sau xảy ra: MouseDown,
MouseUp, Click, MouseMove, DblClick, MouseUp, MouseMove
Ví dụ 1: Xét sự kiện bấm phím khi di chuyển chuột
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then
Print "You're pressing the left button." ElseIf Button = 2 Then
Print "You're pressing the right button." ElseIf Button = 3 Then
Print "You're pressing both buttons." End If End Sub
Ví dụ 2: Xét phím đuợc bấm kèm với sự kiện bấm phím chuột
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Select Case Shift Case 1 ' or vbShiftMask
Print "You pressed the SHIFT key." Case 2 ' or vbCtrlMask
Print "You pressed the CTRL key." Case 4 ' or vbAltMask
Print "You pressed the ALT key." Case 3
Print "You pressed both SHIFT and CTRL." Case 5
Print "You pressed both SHIFT and ALT." Case 6
Print "You pressed both CTRL and ALT." Case 7
Print "You pressed SHIFT, CTRL, and ALT." 100
Giáo trình Visual Basic 6.0 End Select End Sub
Thuộc tính DrawMode qui định chế độ của bút vẽ, gồm các hằng có ý nghĩa như sau: Hằng Giá Hoạt động Phép toán trị (S=Screen, P=Pen) vbBlackness
1 Màu nền = 0 (Đen), màu bút vẽ không có S = 0 tác dụng
vbNotMergePen 2 Thực hiện phép OR trên màu bút vẽ và S = Not (S Or P)
màu nền rồi đảo các bit kết quả bằng phép NOT vbMaskNotPen
3 Đảo màu bút vẽ bằng phép NOT rồi S = S And Not P AND với màu nền. vbNotCopyPen 4 Đảo màu bút vẽ S = Not P vbMaskPenNot
5 Đảo màu nền bằng phép NOT rồi AND S = Not S And P với màu bút vẽ. vbInvert
6 Đảo màu nền, màu bút vẽ không có tác S = Not S dụng vbXorPen
7 Thực hiện phép XOR trên màu bút vẽ và S = S Xor P màu nền vbNotMaskPen
8 Thực hiện phép AND trên màu bút vẽ và S = Not (S And P)
màu nền rồi đảo màu kết quả bằng phép NOT vbMaskPen
9 Thực hiện phép AND trên màu bút vẽ và S = S And P màu nền vbNotXorPen
10 Thực hiện phép XOR trên màu bút vẽ và S = Not (S Xor P)
màu nền rồi đảo màu kết quả bằng phép NOT vbNop 11 Tắt chế độ vẽ S = S
vbMergeNotPen 12 Đảo màu bút vẽ rồi OR kết quả với màu S = S Or Not P nền vbCopyPen 13 Màu bút vẽ S = P
vbMergePenNot 14 Đảo màu nền rồi OR kết quả với màu bút S = Not S Or P vẽ vbMergePen
15 Thực hiện phép OR giữa màu bút vẽ và S = S Or P màu nền
Ví dụ 1: Viết chương trình vẽ tự do bằng mouse. Chế độ vẽ bắt đầu khi bấm phím trái
rồi di chuyển. Kết thúc chế độ vẽ khi nhả phím trái Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 101
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button=1 then Pict1. CurrentX = X Pict1.CurrentY = Y End if End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then Pict1. Line -(X, Y) End Sub
Ví dụ 2 : Viết chương trình vẽ tự do bằng mouse trên form, màu nét vẽ được chọn
ngẫu nhiên. Cách vẽ là Click để xác định điểm đầu, kéo để xác định kích thước và
nhả mouse để xác định hình; nếu click phím trái thì vẽ hình chữ nhật, click phím phải
thì vẽ hình chữ nhật có tô màu bên trong
' Biến toàn cục của form
Dim X1 As Single, X2 As Single
Dim Y1 As Single, Y2 As Single
' Biến xác định chế độ vẽ, có giá trị True nếu đang vẽ Dim dragging As Boolean Private Sub Form_Load()
' Xoá nền form thành màu đen BackColor = vbBlack End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single)
If (Button=1) or (Button=2) Then dragging = True
' Ghi lại toạ độ bắt đầu
X1 = X: Y1 = Y: X2 = X: Y2 = Y
' Chọn màu vẽ ngẫu nhiên
ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255) DrawWidth = Rnd * 3 + 1 DrawMode = vbXorPen ' Vẽ hình chữ nhật Line (X1, Y1)-(X2, Y2), , B If Button = 2 Then
‘ Nếu là phím phải thì tô hình 102
Giáo trình Visual Basic 6.0 FillStyle = vbFSSolid FillColor = ForeColor End If End If End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _ X As Single, Y As Single) If dragging Then ' Xoá hình cũ Line (X1, Y1)-(X2, Y2), , B ' Vẽ hình mới X2 = X: Y2 = Y Line (X1, Y1)-(X2, Y2), , B End If End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, _ X As Single, Y As Single) If dragging Then dragging = False DrawMode = vbCopyPen Line (X1, Y1)-(X, Y), , B FillStyle = vbFSTransparent End If End Sub Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 103 Chương 10 Menu – Common Dialog I. MENU
Về cấu trúc, menu là một danh sách mục chọn, mỗi mục chọn là một đối tượng.
Hệ thống menu là một danh sách đối tượng và được tổ chức phân cấp. Cấp trên
cùng là menu thanh (bar), cấp kế tiếp là menu kéo xuống (PullDown), trong menu
kéo xuống lại có thể có những menu con cấp thấp hơn… 1. Định nghĩa Menu
Để định nghĩa menu thực hiện như sau:
- Bấm tổ hợp phím CTRL-E, hoặc - Nút Menu Editor trên thanh công cụ,
Hiện hộp thoại Menu Editor xuất hiện như hình 10.1.
Hình 10.1: Hộp thoại Menu Editor
Hộp thoại Menu Editor gồm 3 phần: 104
Giáo trình Visual Basic 6.0
- Phần trên cùng: Các thuộc tính của một mục chọn. Các thuộc tính này phải
được xác định khi định nghĩa mới 1 mục chọn. - Phần các nút lệnh.
- Phần danh sách các mục chọn đã định nghĩa.
Các thuộc tính của một mục chọn này được tóm tắt trong bảng sau: Thuộc tính Ý nghĩa Caption
Tên mục chọn Menu, có thể định nghĩa Hotkey .
Sử dụng ký tự “-“ cho vạch phân cách trên menu Name
Tên trong chương trình, thường bắt đầu bằng mnu Index
Đánh chỉ số nếu sử dụng mảng mục chọn Shortcut
Định nghĩa tổ hợp phím tắt Checked
Mục chọn thuộc loại chọn, bỏ chọn Enabled
Cho phép/Không cho phép hoạt động Visible
Xuất hiện/Không xuất hiện mục tương ứng trên menu
WindowList Menu có chứa danh sách các form đang mở trong chương trình (ứng dụng MDI)
- Mỗi mục chọn trên menu được định nghĩa bằng cách nhập các thuộc tính
Name, Caption, Shortcut. . Giá trị Caption xuất hiện trong danh sách mục
chọn phía dưới của Menu Editor. Sau khi nhập đầy đủ các thuộc tính, bấm
nút Next để định nghĩa mục chọn kế tiếp.
- Danh sách mục chọn định nghĩa trình bày theo cột. Mục chọn ở cột ngoài
cùng bên trái tương ứng với các mục chọn trên menu bar. Mục chọn ở cột
kế tiếp tương ứng với các mục chọn trên menu kéo xuống, cột kế tiếp nữa
tương ứng với các mục chọn trên menu cấp thấp hơn . . Sử dụng các nút
để chuyển một mục chọn lên (xuống) cấp menu tương ứng. Sử dụng các nút
để thay đối thứ tự các mục chọn trên menu.
- Nút Insert chèn thêm một mục chọn.
- Nút Delete xoá một mục chọn. 2. Viết lệnh
- Click vào mục chọn cần định nghĩa mã lệnh, khai báo của thủ tục xử lý sự
kiện tương ứng sẽ xuất hiện trong cửa sổ lệnh Private sub Tênmenu_click() End sub
- Nhập lệnh định nghĩa cho mục chọn bên trong thủ tục xử lý sự kiện. Lưư ý: Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 105
- Khi có nhiều mục chọn trên menu cùng cấp, có thể định nghĩa mảng mục
chọn để thuận tiện cho việc xử lý lệnh. Khi định nghĩa mảng mục chọn cần
lưu ý các mục chọn sẽ được định nghĩa cùng tên, gán thuộc tính Index liên
tiếp cho mỗi mục chọn.
Ví dụ: Định nghĩa menu chọn chế độ vẽ trong chương trình vẽ hình, các chế độ vẽ
được định nghĩa là mảng mnuDraw với chỉ số liên tiếp (0,1,2) hoặc (1,2,3)
Thủ tục xử lý sự kiện khi đó có dạng:
Private Sub mnuDraw_Click(Index As Integer) DrMode = Index ‘ Chọn chế độ vẽ End Sub
- Khi mảng mục chọn hoạt động theo nhóm (kiểu nút chọn Options), sử dụng
thêm thuộc tính checked để ký hiệu giá trị đang chọn và viết thêm lệnh
đồng bộ hoạt động của các mục này. Đoạn lệnh sau đồng bộ hoạt động của
các mục chọn hoạt động theo nhóm.
Private Sub mnuDraw_Click(Index As Integer) For i = 1 To mnuDraw.Count mnuDraw(i).Checked = False
‘ Uncheck tất cả các mục chọn Next
MnuDraw(Index).Checked = True ‘ Check mục chọn DrMode = Index End Sub c. Menu Popup
Là loại menu được kích hoạt khi người sử dụng bấm phím phải chuột trên một đối
tượng. Menu popup có thể là một menu độc lập được thiết kế bằng Menu Editor,
nó cũng có thể là một menu thành phần trong hệ thống menu đã được thiết kế bằng
Menu Editor. Để làm xuất hiện menu Popup, sử dụng phương thức PopupMenu
Trong đó tham số là tên của menu Popup
Ví dụ: Làm xuất hiện menu popup khi bấm phím phải chuột trên listbox
Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button And vbRightButton Then PopupMenu mnuListPopup End Sub 106
Giáo trình Visual Basic 6.0 II. COMMON DIALOG
Là một lớp hộp đối thoại thường được sử dụng trên các ứng dụng chạy trên
windows. Các loại hộp thoại này gồm:
- Hộp thoại thao tác trên tập tin: File Open, File Save,
- Hộp thoại định dạng font chữ : Chọn kiểu chữ, kiểu dáng chữ, cỡ chữ. ., - Hộp thoại chọn màu, - Hộp thoại in ấn.
Common Dialog được chứa trong hệ thống dưới dạng ActiveX Control, có thể
được gọi sử dụng trong các ứng dụng viết trên windows. Để có thể sử dụng đối
tượng này, cần nạp lên ToolBox.
Để nạp đối tượng lên ToolBox thực hiện như sau:
- Chọn Project/Components hoặc bấm Ctrl-T, xuất hiện Dialog Components.
- Trong listbox Control, chọn Microsoft Common Dialog Control
- Bấm nút Apply, biểu tượng xuất hiện trên Toolbox
Để đưa vào chương trình:
- Double-Click để đặt đối tượng lên form
Để làm xuất hiện hộp thoại trong chuơng trình, sử dụng các phương thức tương ứng sau:
Tên phương thức Ý nghĩa ShowOpen
Xuất hiện hộp đối thoại open file ShowSave
Xuất hiện hộp đối thoại Save ShowColor
Xuất hiện hộp đối thoại chọn màu ShowFont
Xuất hiện hộp đối thoại chọn font ShowPrinter
Xuất hiện hộp đối thoại in
1. Hộp đối thoại Open, Save Thuộc tính Ý nghĩa
DialogTitle Tiêu đề Dialog. InitDir
Đường đẫn thư mục đầu tiên xuất hiện trong Dialog FileName
Gán hoặc lấy tên tập tin được chọn (đầy đủ đường dẫn) FileTitle
Tên tập tin không có đường dẫn Filter
Chuỗi chứa các loại tập tin được trình bày trong Dialog.
Ví dụ: Text (*.txt)|*.txt|Pictures (*.bmp;*.ico)|*.bmp;*.ico
FilterIndex Chỉ số qui định loại tập tin được chọn đầu tiên khi trình bày
dialog (Loại đầu tiên có Index=1)
DefaultExt Chuỗi ký tự qui định phần mở rộng mặc định
CancelError True/False: Gây lỗi hệ thống khi người dùng bấm nút Cancel Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 107 flags
Thuộc tính tùy chọn tính chất của hộp thoại, có các giá trị:
cdlOFNReadOnly – Đặt tùy chọn chỉ đọc khi mở tập tin
cdlOFNAllowMultiselect – Cho phép chọn nhiều tập tin
cdlOFNHideReadOnly – Bỏ nút chọn Read-Only trên hộp thoại
Ví dụ 1: Viết lệnh xử lý sự kiện click mục chọn Open trên menu Private Sub mnuOpen_Click() On Error GoTo ErrorOpen With CmDlg .InitDir = "C:\"
.Filter = "Text (*.txt)|*.txt|Pictures (*.bmp;*.ico)|*.bmp;*.ico" .FilterIndex = 2 .CancelError = True .ShowOpen . . End With ErrorOpen: End Sub
Hình 10.2: Hộp thoại Open
Ví dụ 2 : Viết lệnh xử lý sự kiện click mục chọn Save trên menu Private Sub mnuSave_Click() On Error GoTo ErrorOpen With CmDlg .InitDir = "C:\"
.Filter = "Text (*.txt)|*.txt|Pictures (*.bmp;*.ico)|*.bmp;*.ico" .FilterIndex = 2 108
Giáo trình Visual Basic 6.0 .CancelError = True .ShowSave . . End With ErrorOpen: End Sub 2. Hộp thoại chọn màu
Cho phép người sử dụng chọn màu hoặc định nghĩa thêm một màu tùy chọn ngoài
các màu có sẵn của hệ thống.
Để mở hộp thoại chọn màu, sử dụng phương thức ShowColor. Hộp thoại chọn
màu xuất hiện có dạng như hình bên
Để có thể chọn được nhiều màu hơn hoặc định nghĩa
màu tùy ý người sử dụng phải bấm nút Define Custom
Colors để mở thêm bảng bên phải (Hình 10.3). Trong
chương trình có thể thực hiện điều này bằng cách gán giá
trị cdlCCFullOpen cho thuộc tính Flags như sau: With Cmdlg .Flags = cdlCCFullOpen .ShowColor … End with
Hình 10.3: Hộp thoại chọn màu đầy đủ
Giá trị màu chọn sau khi người sử dụng bấm nút OK được lấy thông qua thuộc tính color. Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 109 Chương 11
Kiểu bản ghi – Tập tin I. KIỂU BẢN GHI 1. Định nghĩa:
Là kiểu dữ liệu gồm nhiều thành phần gọi là vùng/trường (Fields), mỗi thành phần
dùng mô tả một đặc điểm của đối tượng. Bản ghi được sử dụng để lưu trữ các đối
tượng mà mô tả về đối tượng đó cần nhiều thông tin. 2. Khai báo: Type As As . . End Type Ví dụ: Type Sinhvien Hoten As String*25 Phai As Byte DiemToan As Single DiemLy As Single DiemHoa As Single End Type Và khai báo biến: Dim SV As Sinhvien Lưu ý:
Khai báo Type phải được viết trong tập tin module. II. TẬP TIN 1. Định nghĩa:
Là đối tượng được sử dụng để lưu trữ dữ liệu trên bộ nhớ ngoài. 2. Phân loại:
Theo cách truy xuất, có 2 loại tập tin: 110
Giáo trình Visual Basic 6.0
• Tập tin truy xuất ngẫu nhiên (Random Access File): Là tập tin cho phép đọc
hoặc ghi ở vị trí bất kỳ trên file. Dữ liệu ghi trên tập tin truy xuất ngẫu
nhiên được tổ chức thành các mẫu tin (Record) có kích thước giống nhau.
• Tập tin truy xuất tuần tự (Sequential Access File): Dữ liệu ghi lên tập tin có
kích thước mỗi phần tử không giống nhau, để phân biệt các phần tử với
nhau, sử dụng ký hiệu phân cách giữa các phần tử.
3. Thủ tục truy xuất dữ liệu trên tập tin:
Việc truy xuất trên tập tin được thực hiện thành 3 bước: • Mở tập tin • Truy xuất (Đọc/Ghi) • Đóng tập tin
4. Các lệnh trên tập tin truy xuất ngẫu nhiên
Lệnh Open <Đường dẫn> For Random As #n Len=
Mở tập tin để đọc hoặc tạo mới. Trong đó:
<Đường dẫn> Chuỗi ký tự đường dẫn tên tập tin n
Số thứ tự tên tập tin mở, giá trị này là số nguyên duy nhất đối với
mỗi tập tin, tập tin mở đầu tiên có giá trị là 1. Để lấy số thứ tự
của tập tin có thể mở kế tiếp, sử dụng hàm freefile()
Kích thước mỗi phần tử Lưu ý:
Để tính kích thước của một kiểu dữ liệu, sử dụng hàm Len(). Trong đó là tên của một biến. Ví dụ: Type Sinhvien Hoten As String*25 Phai As Byte DiemToan As Single DiemLy As Single DiemHoa As Single End Type Dim sv As SinhVien Dim fnum As Integer fnum = freefile()
‘ Lấy số thứ tự tập tin mở kế tiếp
Open “Thu.dat” for Random As #fnum Len = Len(sv) Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 111 Lệnh Put #n, [],
Ghi giá trị của lên tập tin tại Ví dụ: Type Record ID As Integer Name As String * 20 End Type
Dim MyRecord As Record, RecordNumber Dim fnum As Integer fnum = freefile() ' Mở file.
Open "TESTFILE" For Random As #fnum Len = Len(MyRecord) For RecordNumber = 1 To 5 MyRecord.ID = RecordNumber
MyRecord.Name = "My Name" & RecordNumber
Put #1, RecordNumber, MyRecord ' Ghi record lên file Next RecordNumber Close #1 ' Đóng file. Lưu ý:
- Vị trí các mẫu tin trên tập tin có thứ tự bắt đầu từ 1.
- Mẫu tin ghi lên tập tin phải có chiều dài đúng bằng chiều dài khai báo khi
mở tập tin. Trường hợp ghi mẫu tin có kích thước nhỏ hơn, vb tự động điền
cho đủ (với các giá trị ngẫu nhiên). Trường hợp ngược lại sẽ cho thông báo lỗi.
- Không thể ghi đối tượng lên tập tin.
- Tham số vị trí là tuỳ chọn, khi không có tham số này, dữ liệu sẽ được ghi
vào kế sau mẫu tin vừa truy xuất.
- Muốn ghi dữ liệu vào cuối tập tin, cho giá trị của lớn hơn số mẫu
tin hiện có trong tập tin. Ví dụ sau mở và ghi dữ liệu vào cuối tập tin bằng cách sử dụng hàm LOF Type Record ID As Integer Name As String * 20 End Type
Dim MyRecord As Record, RecCount
Dim fnum As Integer, fsize As long Dim recsize As Integer fnum = freefile() 112
Giáo trình Visual Basic 6.0 recsize = Len(MyRecord) ' Mở file.
Open "TESTFILE" For Random As #fnum Len = recsize fsize = LOF(fnum)
‘ Lấy kích thước tập tin RecCount = fsize \ recsize ‘ Tính số mãu tin MyRecord.ID = RecCount+1
MyRecord.Name = "My Name" & RecCount
Put #fnum, RecordNumber, MyRecord Close #fnum Lệnh Get #n, [],
Đọc từ n vào từ tập tin. Lệnh đọc báo lỗi khi lớn hơn số mẫu tin hiện có . Ví dụ 1: Type Record ID As Integer Name As String * 20 End Type
Dim MyRecord As Record, Position ' Mở file
Open "TESTFILE" For Random As #1 Len = Len(MyRecord) Position = 3
Get #1, Position, MyRecord ' Đọc mẫu tin thứ 3 Close #1 ' Đóng file.
Ví dụ 2: Đọc tuần tự từ tập tin Type Record ID As Integer Name As String * 20 End Type Dim MyRecord As Record
Open "TESTFILE" For Random As #1 Len = Len(MyRecord) Do While Not EOF(1) Get #1, , MyRecord
Debug.Print Myrecord.ID, MyRecord.Name Loop Close #1 Sửa chữa một mẫu tin Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 113
Để sửa chữa một mẫu tin, thực hiện các bước sau:
- Đọc mẫu tin cần sửa chữa bằng lệnh Get
- Sửa chữa mẫu tin với giá trị mới
- Ghi lên tập tin tại vị trí cũ bằng lệnh Put Ví dụ: Get #1, 2, MyRecord
MyRecord.Name = “New Name” Put #1, 2, MyRecord Lệnh Close #n Đóng tập tin
III. CÁC LỆNH TRÊN TẬP TIN VĂN BẢN Lệnh Open For As #n Trong đó:
: Chuỗi ký tự đường dẫn tên tập tin
: Chế độ truy xuất tập tin, gồm:
Output Tạo tập tin mới, nếu tên tập tin đã có trên dĩa, tập tin cũ bị xoá Input Mở tập tin để đọc
Append Mở tập tin để viết thêm nội dung
n: Số thứ tự tên tập tin mở, mỗi tập tin được mở với 1 số duy nhất. Có giá trị 1-511
Ví dụ: Mở tập tin readme.txt để đọc Dim fnum As Integer fnum = FreeFile()
Open "readme.txt" For Input As #fnum Lệnh Print #n,
: Danh sách các biến muốn ghi giá trị, sử dụng dấu ; giữa các
biến, mỗi lệnh in danh sách trị trên một dòng.
Ví dụ: Tạo tập tin văn bản có 10 dòng Private Sub Command1_Click()
Open "F:\Test.txt" For Output As #1 For i = 1 To 10 Print #1, "Line " & i Next Close #1 End Sub 114
Giáo trình Visual Basic 6.0 Lưu ý:
Dấu “;” cuối danh sách biến sẽ làm cho dòng được in không có ký tự xuống dòng ở cuối dòng
Để đọc tập tin ghi dạng này, sử dụng lệnh Input
Ví dụ: Thủ tục ghi Text File với tuỳ chọn ghép thêm hoặc tạo mới
Private Sub WriteTextFileContents(Text As String, filename As String,
Optional AppendMode As Boolean) Dim fnum As Integer fnum = FreeFile() If AppendMode Then
Open filename For Append As #fnum Else
Open filename For Output As #fnum End If Print #fnum, Text Close #fnum End Sub Lệnh Write #n,
In giá trị các biến lên tập tin , giá trị được rào bằng dấu nháy kép “” , dấu phẩy là
ký hiệu phân cách các giá trị ghi.
Ví dụ lệnh Write #1, Maso, Hoten, Quoctich với Maso, Hoten, Quoctich là các
biến chứa giá trị sẽ cho kết quả ghi lên tập tin như sau: “001”,” Tigana”,”Phap”
Sử dụng lệnh Input để đọc tập tin ghi dạng này Lệnh input #n,
Đọc tập tin văn bản ghi bằng lệnh Print #n, Ví dụ:
Tập tin tạo bằng đoạn chương trình
Open "F:\Test.txt" For Output As #1 For i = 1 To 10 Print #1, "Line " & i Next Close #1 Sẽ được đọc như sau
Open "F:\Test.txt" For Input As #1 For i = 1 To 10 Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 115 Input #1, Line Debug.Print Line Next Close #1 Lệnh input #n,
Đọc tập tin văn bản ghi bằng lệnh Write #n, Ví dụ:
Tập tin tạo bằng đoạn chương trình
Open "C:\test.txt" For Output As #1 . .
Write #1, txtMa.Text, txtHoten.Text, iCQT.Text . . Close #1 Sẽ được đọc như sau
Open "C:\test.txt" For Input As #1 Do While Not EOF(1) Input #1, Maso, Hoten, QT Debug.Print Maso, Hoten, QT Loop Close #1 Lệnh Line input #n,
Đọc 1 dòng từ văn bản (không kể ký tự xuống dòng)
Ví dụ: Đọc dữ liệu từ tập tin văn bản Private Sub Command1_Click()
Open "F:\Test.txt" For Input As #1 Do while not eof(1) Line input #1, Line
St = St & Line & vbCRLF Loop Close #1 Text1.Text = St End Sub Hàm input (,#n)
Hàm đọc dữ liệu từ tập tin, kết quả trả về là một chuỗi. Nếu đọc từ tập văn bản,
chuỗi trả về gồm tất cả các ký hiệu xuống dòng. Trong đó: 116
Giáo trình Visual Basic 6.0 Số byte muốn đọc n Số thứ tự tập tin
Ví dụ: Định nghĩa hàm ReadTextFileContents đọc tập tin văn bản, dữ liệu đọc chứa vào một chuỗi.
Function ReadTextFileContents(filename As String) As String Dim fnum As Integer
' Lấy số thứ tự tập tin mở kế tiếp fnum = FreeFile()
Open filename For Input As #fnum
' Đọc toàn bộ nội dung file bằng một lệnh
ReadTextFileContents = Input(LOF(fnum), fnum) Close #fnum End Function
Nạp tập tin Bootlog.txt vào textbox
Text1.Text = ReadTextFileContents("c:\bootlog.txt")
Ví dụ: Đọc tập tin văn bản vào listbox
Sub TextFileToListbox(lst As ListBox, filename As String)
Dim items() As String, i As Long
' Đọc nội dung file rồi sử dụng hàm split để chuyển các dòng ‘ vào mảng chuỗi
items() = Split(ReadTextFileContents(filename), vbCrLf)
' Nạp các chuỗi khác rống vào ListBox.
For i = LBound(items) To UBound(items)
If Len(items(i)) > 0 Then lst.AddItem items(i) Next End Sub Lưu ý:
Hàm Split(,[,]) cho giá trị là một mảng chuỗi
con được trích ra từ với ký hiệu phân cách được cho trong tham số hiệu> , tham số thứ ba qui định số chuỗi con muốn trích ra. Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 117 Chương 12
Microsoft Windows Common Controls
Imagelist - Listview - Imagecombo
Windows Common Controls là tên gọi chung của các loại đối tượng điều khiển chỉ
có trong Windows 9x. Các đối tượng này chứa trong thư viện Microsoft Windows
Common Controls. Sử dụng phương pháp đã mô tả ở chương trước để nạp đối tượng lên Toolbox . I. IMAGELIST
Đối tượng được sử dụng để quản lý một mảng hình ảnh hay danh sách hình ảnh.
Danh sách hình ảnh được sử dụng trong các ứng dụng cần tạo các hiệu ứng hình
hảnh động hoặc sử dụng kết hợp với các đối tượng điều khiển khác có sử dụng
hình ảnh như Listview, ImageCombo. . Sử dụng ImageList
- Nhấp đúp biểu tượng ImageList trên ToolBox để đặt ImageList lên form
- Nhấp phím phải trên biểu tượng ImageList trên form
- Chọn Properties trên menu xuất hiện hộp thoại Property Pages, chọn thẻ Images
- Bấm nút Insert Picture để chọn các hình (*.BMP, *.ICO) đưa vào danh sách hình ảnh.
Thuộc tính Index chỉ thứ tự của hình trong danh sách, giá trị này được tự động gán cho mỗi hình
Thuộc tính ImageCount cho biết tổng số hình hiện có trong danh sách, giá trị này
được tự động tăng lên khi có một hình mới được chèn thêm vào danh sách
Bấm nút Remove Picture để xoá 1 hình trong danh sách. II. LISTVIEW
Là đối tượng điều khiển được sử dụng để trình bày danh sách đối tượng. Các đối
tượng trong Listview có thể trình bày theo nhiều kiểu khác nhau. 118
Giáo trình Visual Basic 6.0 1. Các thuộc tính
View: Thay đổi cách trình bày các đối tượng trong listview, có các giá trị như sau: Hằng Giá trị Ý nghĩa lvwIcon 0
Trình bày đối tượng bằng icon lớn với nhãn ở phía dưới lvwSmallIcon 1
Các đối tượng được trình bày bằng icon nhỏ, nhãn ở phía
bên phải, các đối tượng được liệt kê theo chiều ngang lvwList 2
Các đối tượng được trình bày bằng icon nhỏ, nhãn ở phía
bên phải, các đối tượng được liệt kê theo chiều dọc lvwReport 3
Các đối tượng được trình bày bằng icon nhỏ với nhãn ở
cột đầu tiên, các thông tin khác về đối tượng được trình
bày trong các cột kế tiếp
Thay đổi chế độ trình bày của Listview bằng lệnh trên menu Private Sub mnuLarge_Click() ListView1.View = lvwIcon End Sub Private Sub mnuList_Click() ListView1.View = lvwList End Sub Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 119 Private Sub mnuRpt_Click() ListView1.View = lvwReport End Sub Private Sub mnuSmall_Click()
ListView1.View = lvwSmallIcon End Sub
GridLine (True/False): Kẻ đường lưới trong chế độ ReportView
FullRowSelect (True/False): Phần tử chọn được highlight cả dòng.
MultiSelect (True/False): Qui định thuộc tính cho phép chọn nhiều
CheckBoxes: (True/False): Cóï/ không có checkbox
Text: Nhãn/giá trị cột đầu tiên trong listview khi ở chế độ Report
LabelEdit :(0-lvwAutomatic, 1-lvwmanual) Qui định nhãn đối tượng (text) có thể
sửa chữa trực tiếp trên listview khi người dùng Click trên nhãn
Các thuộc tính mô tả trên có thể chọn trực tiếp trong Property Pages/General của
Listview (bấm phím phải mouse)
ListItems: Thuộc tính quan trọng nhất, chứa danh sách các phần tử được trình bày
trong listview. Mỗi phần tử là một đối tượng có kiểu ListItem. Cách truy xuất các
phần tử trong listItems cũng giống như mảng Ví dụ: With lvw For i = 1 to .ListItems.Count
Debug.Print .ListItems(i).Text Next End with
SelectedItem: Cho giá trị là đối tượng ListItem đang được chọn trong Listview
hoặc dùng chọn một phần tử trong Listview
- Chọn phần tử đầu tiên trong listview
Set lvw.SelectedItem = lvw.ListItems(1)
- Lấy giá trị phần tử đang được chọn Dim Item as ListItem Set Item = lvw.SelectedItem
ImageList: Tham chiếu đến đối tương ImageList quản lý danh sách hình sử dụng trong Listview
Để định nghĩa danh sách hình cho Listview, sử dụng thẻ Image Lists trong Property Pages của Listview
Mỗi Listview có thể liên kết với 3 loại danh sách hình: 120
Giáo trình Visual Basic 6.0
- Normal : danh sách hình để xem listview ở dạng Large Icon - Kích thước
mặc định của biểu tượng là 32x32
- Small : danh sách hình để xem listview ở dạng Small Icon.- Kích thước
mặc định của biểu tượng là 16x16
- Column Header: danh sách hình sử dụng cho dòng tiêu đề cột - Kích thước
mặc định của hình là 16x16
Như vậy khi viết ứng dụng có sử dụng Listview thì các danh sách hình phải được
định nghĩa trước rồi mới được liên kết với Listview bằng thẻ Image Lists như hình trên.
2. Các thuộc tính của đối tượng ListItem Thuộc tính Ý nghĩa Text
Chuỗi ký tự mô tả đối tượng, là nhãn đi kèm với biểu tượng trong
listview, cũng chính là nội dung cột đầu tiên trong chế độ Report Index
Chỉ số của phần tử trong mảng ListItems Key
Chuỗi ký tự duy nhất xác định phần tử trong danh sách ListItems Icon,
Gán hoặc lấy chỉ số của hình (index) tương ứng trong danh sách
SmallIcons hình (Imagelist) liên kết với listView.
Ví dụ: lvw.ListItems(5).SmallIcons=1 Selected
(True/False): Cho biết phần tử có được chọn trong Listview hay không SubItems
Mảng chuỗi chứa các thông tin khác của đối tượng, các thông tin
này được trình bày trong chế độ Report, số phần tử của mảng phải
tương ứng với số cột trong listview Ghosted
(True/False) Làm mờ icon của phần tử trong listview
ColumnHeaders: Thuộc tính quản lý danh sách cột trong Listview khi sử dụng ở
chế độ Report view. Mỗi cột là một đối tượng có kiểu ColumnHeader. Cách truy
xuất các cột trong ColumnHeaders cũng giống như truy xuất các phần tử trong
ListItems. Một số phương thức cũng được áp dụng chung cho cả hai đối tượng. Ví dụ:
In danh sách các cột trong Listview ở chế độ report With lvw
For i = 1 to .ColumnHeaders.Count
Debug.Print .ColumnHeaders(i).Text Next End with 3. Các phương thức Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 121 Add
Thêm 1 phần tử vào danh sách ListItems hoặc ColumnHeaders.
Dạng áp dụng cho ListItems:
Add [Index][, Key][, Text][, Icon][, SmallIcon] Trong đó: Index
Vị trí thêm, nếu không có : thêm vào cuối danh sách Key Khoá của phần tử thêm Text Giá trị thêm Icon Biểu tượng lớn
SmallIcon Biểu tượng nhỏ
Ví dụ 1: Thêm 5 giá trị vào ListItems không sử dụng Icon For i = 1 to 5
Listview1.ListItems.Add , , “Item No. “ & i Next
Ví dụ 2:Thêm các giá trị vào listview sử dụng cả Icons và SmallIcons With ListView1.ListItems .Add , , "Brazil", 1, 1 .Add , , "Italia", 2, 2 .Add , , "Japan", 3, 3 .Add , , "Usa", 4, 4 End with
Dạng áp dụng cho ColumnHeaders:
Add [Index][, Key][, Text][, Width][,Alignment] Trong đó: Index
Vị trí thêm, nếu không có : thêm vào cuối danh sách Key Khoá của cột thêm Text Tiêu đề cột Width Bề rộng cột
Alignment Chế độ canh lề cột
Ví dụ 1: Thêm 2 cột Name, Phone vào Listview với các độ rộng 1400, 1500 With ListView1.ColumnHeaders .Add , , “Name”, 1400 .Add , , “Phone”, 1500 End with
Ví dụ 2: Tạo một listview ở chế độ Report có 3 cột với tiêu đề Col 1, Col 2, Col 3
và thêm vào đó 10 phần tử 122
Giáo trình Visual Basic 6.0 Private Sub Form_Load() Dim clm As ColumnHeader Dim itm As ListItem Dim i As Integer For i = 1 To 3
Set clm = ListView1.ColumnHeaders.Add() clm.Text = "Col " & i Next i For i = 1 To 10
Set itm = ListView1.ListItems.Add() itm.SmallIcon = 1
itm.Text = "ListItem " & i
itm.SubItems(1) = "Subitem 1"
itm.SubItems(2) = "Subitem 2" Next i End Sub
Chương trình khi chạy sẽ có dạng như hình 12.1
Hình 12.1: Form chương trình ví dụ 2
FindItem(String, Value, Index, Match)
Tìm kiếm 1 giá trị trong danh sách ListIt m
e s, có thể qui định việc tìm kiếm được
thực hiện trên thuộc tính text, subitems . Phương thức cho giá trị là tham chiếu đến
đối tượng ListItem tìm thấy. Trong đó: String Giá trị cần tìm
Value Qui định loại thuộc tính tìm kiếm
lvwText - 0 : Tìm trên thuộc tính e T xt (*)
lvwSubItem - 1: Tìm trên SubItem
Index Có thể là 1 chuỗi hoặc 1 số. Khi là h
c uỗi, nó có ý nghĩa là Key, khi là
số, nó có ý nghĩa là Index. Dùng để qui định vị trí bắt đầu tìm kiếm Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 123
Match Qui định phương thức tìm kiếm
lvwWholeWord - 0: Tìm từ toàn v ẹn (*) lvwPartial - 1: Tìm 1 phần Ví dụ: Tìm ngư i
ờ có họ là Nguyễn Thị trong danh sách:
Set It = lvw.FindItem(“Nguyen Thi”, , ,lvwPartia )l GetFirstVisible Hàm cho giá trị l
à tham chiếu đến đối tượng đầu tiên xuất hiện trong Listview Remove Index
Xoá một phần tử tại vị trí Index Clear Xoá tất ả
c các phần tử trong danh sách ListItems 4. Sự kiện
Private Sub object_ItemClick(ByVal Item As ListItem)
Sự kiện xảy ra khi click trên biểu tượng hoặc hình ảnh đại diện cho đối tượng.
Tham số của thủ tục là đối tượng ListItem mà sự kiện xảy ra trên đó Ví dụ :
Private Sub lvw_ItemClick(ByVal Item As ListItem)
Item.Ghosted = Abs(Item.Ghosted) - 1 End Sub
Lưu ý: Trên listview cũng có sự kiện click nhưng sự kiện này xảy ra khi người
dùng click tại một vùng bất kỳ trên listview.
Private Sub object_ColumnClick(ByVal c l o umnheader As ColumnHeader)
Sự kiện xảy ra khi click trên dòng tiêu đề của listview. Tham số của thủ tục là đối
tượng ColumnHeader mà sự kiện xảy ra trên đó.
Ví dụ: Sử dụng thuộc tính Sorted và Sortkey để sắp xếp nội dung Listview theo cột
Private Sub lvw_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHea e d r) lvw.Sorted = True
lvw.SortKey = ColumnHeader.Index - 1 End Sub III. IMAGECOMBO Là ố
đ i tượng điều khiển giống ComboBox nhưng có thêm hình ảnh đi kèm. 1. Các thuộc tính ComboItems: T u
h ộc tính quan trọng nhất, chứa danh
sách các phần tử được trình bày trong ComboItems. Mỗi 124
Giáo trình Visual Basic 6.0
phần tử là một đối tượng có kiểu ComboItem. Thuộc tính này cũng giống như
ListItems và ListItem trong Listview. Cách truy xuất các phần tử trong
ComboItems cũng giống như mảng Ví dụ: With ImageCombo1
For i = 1 to .ComboItems.Count
Debug.Print .ComboItems i().Text Next End with
SelectedItem: Cho giá trị là tham chiếu (reference) đến đối tượng ComboItem
đang được chọn trong ImageCombo hoặc dùng chọn một phần tử trong ImageCombo
Chọn phần tử đầu tiên trong ImageCombo
Set ImageCombo1.SelectedItem =ImageC m o bo1.ComboItems(1)
Lấy giá trị phần tử đang được chọn Dim icItem as ComboItem Set icItem = ImageCombo . 1 SelectedItem
ImageList: Tham chiếu đến đối tương ImageLis tquản lý danh sách hình sử dụng trong ImageCombo Danh sách hình ch
o ImageCombo được định nghĩa bằng Property Pages/General
của ImageCombo (Bấm phím phải rồi chọn properties)
Locked: (True, False) Thuộc tính qui định các giá trị x ấ
u t hiện chỉ ở trạng thái chỉ đọc
2. Các thuộc tính của đối tượng ComboItem Thuộc tính Ý nghĩa Text
Chuỗi ký tự giá trị xuất hiện trong ImageCombo Index
Chỉ số của phần tử trong mảng ComboItems Key
Chuỗi ký tự duy nhất xác định phần tử trong danh sách ComboItems SelImage Chỉ số của hì h
n (index) tương ứng trong danh sách hình (Imagelist)
liên kết với ImageCombo khi phần tử được chọn Image
Chỉ số của hình (index) tương ứng trong danh sá h c hình Selected
(True/False): Cho biết phần tử có được chọn trong Im g a eCombo hay không
Indentation Số nguyên qui định khoảng canh lề của đối tượng so với lề trái của ImageCombo Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 125 3. Các phương thức
Add [Index][, key][, Text][, Image][, SelImage][, Indentation]
Thêm một phần tử vào danh sách ComboItems của ImageCombo Trong đó: Index
Chỉ số của phần tử trong mảng ComboItems Key
Chuỗi ký tự duy nhất xác định phần tử trong danh sách ComboItems Text
Chuỗi ký tự giá trị xuất hiện trong ImageCombo Ima e g
Chỉ số của hình (index) tương ứng trong danh sách hình SelImage Chỉ số của hì h
n (index) tương ứng trong danh sách hình (Imagelist)
liên kết với ImageCombo khi phần tử được chọn Indent t
a ion Số nguyên qui định khoảng canh lề của đối tượng so với lề trái của ImageCombo Ví dụ:
Sử dụng Add để khởi động ImageCombo trong sự kiện Form_Load. Private Sub Form_Load() Wit h ImageCombo1.ComboItems .Add , , "Brazil", 1, , 1 .Add , , "Italia", 2, , 2 .Add , , "Spain", 3, , 3 .Add , , "Usa", 4, , 4 End With Set ImageCombo1.Select d
e Item = ImageCombo1.ComboItems(1) End Sub GetFirstVisible
Hàm cho giá trị là tham chiếu đến đối tượng đầu tiên xuất hiện trong ImageCombo Remove Index
Xoá một phần tử tại vị trí Index Clear
Xoá tất cả các phần tử trong danh sách ComboItems.
Ví dụ sau minh họa cách nạp cá
c ổ dĩa (và nhãn dĩa) vào ImageCombo. 126
Giáo trình Visual Basic 6.0
Sub LoadDrivesIntoImageCombo(ImgCombo As ImageCombo)
Dim fso As New Scripting.FileSystemObject, dr As Scripting.Drive
Dim drLabel As String, drImage As String
' ImageCombo phải được liên kết với một danh sách hình đã
' có sẵn biểu tượng các loại ổ dĩa
ImgCombo.ComboItems.Add , , "My Computer", "MyComput r e " For Each dr In fso.Drives Select Case dr.DriveType Case Removable: dr m I age = "FloppyDrive" Case CDRom: drIm g a e = "CDDrive"
Case Else: drImage = "HardDrive" End Select
drLabel = dr.DriveLetter & ": " If dr.IsRea y d Then If Len(dr.VolumeName) Then r
d Label = drLabel & "[" & _ dr.VolumeNa e m & "]" End If ImgCombo.ComboItems.Ad
d , dr.DriveLetter, drLabel, drImage, , 2 Next
' Chọn ổ dĩa hiện tại. Set I g
m Combo.SelectedItem = ImgCombo.ComboItems(Left$(CurDir$, 1)) End Sub
Hình 12.2: Giao diện chưong trình ví dụ Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 127 Chương 13
Microsoft Windows Common Controls
Toolbar - Statusbar - DTpicker I. TOOLBAR
Toolbar là thanh công cụ, được sử dụng để trình bày các chức năng thường sử
dụng trong chương trình. Trên Toolbar có thể gồm các loại đối tượng sau: - Nút bấm thường - Nút bấm dạng Check
- Nút bấm hoạt động theo nhóm (Option Buttons) - ComboBox hoặc TextBox
Nội dung trình bày trên nút bấm của Toolbar có thể là text hoặc hình ảnh. Hình
ảnh xuất hiện trên các nút bấm của Toolbar được quản lý thông qua ImageList. 1. Sử dụng Toolbar
- Nhấp đúp biểu tượng Toolbar trên ToolBox
- Nhấp phím phải trên biểu tượng Toolbar trên form
- Chọn Properties, xuất hiện hộp thoại Property Pages a. Thẻ General
Qui định các thuộc tính cơ bản nhất của một ToolBar, gồm : Thuộc tính Ý nghĩa MousePointer Chọn dạng con trỏ . ImageList
Tên Imagelist quản lý danh sách hình . BorderStyle
Kiểu viền (0 - ccNone, 1 - ccFixedSingle) Appearance
Dạng ToolBar (0-ccFlat, 1-cc3D) ButtonHeight Chiều cao nút bấm. ButtonWidth Chiều rộng nút bấm.
AllowCustomize Cho phép thay đổi các nút trên Toolbar khi chạy chương trình Wrappable
Cho phép cuộn toolbar thành nhiều hàng nút ShowTips
Xuất hiện lời nhắc chức năng của nút 128
Giáo trình Visual Basic 6.0 Hình 13.1: Thẻ Button b. Thẻ Button
Các nút bấm trên Toolbar được quản lý trong mảng Buttons (là một thuộc tính của Toolbar). Các th ộ
u c tính của mỗi nút bấm được trình bày trong thẻ Buttons: Thuộc tính Ý nghĩa Index ố
S thứ tự của nút trên Toolbar Caption
Nội dung xuất hiện trên ú n t Key
Tên nút được sử dụng trong chương trình Value
Trạng thái của nút (0 - tbrUnpressed, 1 - tbrPressed) Style
Loại nút: 0 – tbrDefault, 1 – tbrCheck, 2 – tbrButtonGroup, 3 –
tbrSeparator, 4 – tbrPlaceholder, 5- Dropdown
ToolTipText Lời nhắc khi con trỏ di c u h yển trên nút Image
Chỉ số hình trong ImageList Width
Độ rộng khoảng chừa chỗ trên Toolbar tbrDefault tb t r b P r la l c a e c H e o H l o d l e d r e r tbrSeparator tbrCheck tbrGroup
Hình 13.2: Các loại nút trên Toolbar Nguyễn Đăng Quang Gi G áo á trìrn ì h h Visua u l a lBa B sisc c 6. 6 0 12 1 9 2. Định nghĩa Toolbar
- Định ngĩa ImageList chứa danh sách hình sẽ sử dụng trên Toolbar, - Đặt Toolbar lên form,
- Trong hộp thoại Property Pages của Toolbar: Thẻ General
- Chọn danh sách hình đã định nghĩa (thuộc tính ImageList)
- Chọn dạng thể hiện (Flat, 3D), viền/không có viền (thuộc tính Appearance)
- Chọn kích thước nút bấm Thẻ Buttons
- Bấm nút Insert Button để thêm nút mới. Qui định thuộc tính cho mỗi nút :
o Key: Chuỗi tên dùng trong chương trình
o Style: Loại nút: bình thường, thanh phân cách, dành chỗ cho combobox. .
o Value:Giá trị ban đầu cho nút (nếu nút bấm loại check)
o Image:Chọn chỉ số hình trong ImageList
- Bấm Apply sau khi định nghĩa xong 1 nút
- Lặp lại nhiều lần để định nghĩa cho các nút khác - Viết lệnh
Nhấp đúp trên toolbar, xuất hiện khai báo Private S b
u Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button) End Sub Trong đó tha
m số Button chứa thông tin về nút được bấm trên Toolbar. Để xác đ
ịnh nút được bấm, có thể sử dụng thu c
ộ tính Index hoặc Key của Button: Private S b
u Toolbar1_ButtonClick(ByVal Bu tton As ComctlLib.Button) Select Case Button.Key Case “FileOpen” Do_Open Case “FileSave” Do_Save . . End Select End Sub Hoặc
Private Sub Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button) Select Case Button.index Case 1 130
Giáo trình Visual Basic 6.0 Do_Open Case 2 Do_Sa e v . . End Sele t c End u S b
3. Định nghĩa nút Toolbar lúc chạy chương trình Có t ể
h thêm nút Toolbar lúc c ạ
h y chương trình bằng phương thức Add với có dạng như sau:
Add ([Index], [key], [caption], [Style], [Image]) As Button Trong đó: Index vị trí nút thêm vào. Key Chuỗi duy nhất
Caption Chuỗi xuất hiện trên nút. Style Loại nút. Image
Chỉ số hình trong danh sách hình. Ví d
ụ 1: Thêm một nút bấm hoạt động theo kiểu CheckBox lên Toolbar. Dim btn As Button
Set btn = Toolbar1.Buttons.Add(, , , tbrCheck, "Lock") t b n.Value = tbrPressed
Ví dụ 2: Thêm một nút phân cách trên Toolbar.
Toolbar1.Buttons.Add , , , tbrSeparator
Ví dụ 3: Thêm hai nút hoạt động theo nhóm trên Toolbar.
Set btn = Toolbar1.Buttons.Add(, , , tbrButtonGroup, "Green")
Set btn = Toolbar1.Buttons.Add(, , , tbrButtonGroup, "Red") btn.Value = tbrPressed
Ví dụ 4: Thêm khoảng trống trên Toolbar và đặt ComboBox vào khoảng trống đã tạo. Dim btn As Button
Set btn = Toolbar1.Buttons.Add(, , , tbrPlaceholder)
btn.Width = cboFontSizes.Width
Set cboFontSizes.Container = Toolbar1 cboFontSizes.Move btn.L f e t, btn.Top Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 131
Trường hợp nút tạo ra có Style = tbr r
D opDown, có thể định nghĩa các mục chọn
khi người sử dụng bấm mũi tên bên phải nút bằng phương thức Add như sau:
Add ([Index], [key], [caption], [Styl ] e , [Image]) As ButtonMenu
Ví dụ: Thêm nút bấm l ạ
o i Drop-down rồi tạo menu có 3 mục chọn. Dim btn As Button
Set btn = Toolbar1.Buttons.Add(, , , tbrDropDown, "New") With btn.ButtonMenus .Add , , "File" .Add , , "Document" .Add ,, "Image" End With
Sự kiện ButtonMenuClick xảy ra khi mục chon trên menu kéo xuống của nút bấm kiểu drop-do n
w được chọn. Ví dụ sau trình bày lệnh xử lý sự kiện khi nút bấm được chọn. Private u S b Toolbar1_ButtonMenuCl c i k(ByVal ButtonMenu As MS o C mctlLib.ButtonMenu) Sele t c Case ButtonMenu.Key Case "Document" Call mnuFi e l NewDocument Case "Image" Call mnuFileNe I w mage End Select End Sub II. STATUS BAR
Đối tượng điều khiển thường đặt phía dưới form để thông báo tình trạng hoạt động
của chương trình hoặc thông báo trạng thái của các nút bấm. 1. Sử dụng
Đặt statusbar lên form. Click mục (Custom) tại properties windows, xuất hiện hộp thoại Property Pages. 13 1 2 Gi G áo á trìrnh n h Vi V su s a u l lBa B s a ic c 6.0 0 Hình 13.3: Thẻ general a. Thẻ General Style
Loại Status bar (0 - sbrNormal, 1 - sbrSimple)
SimpleText Chuỗi xuất hiện trên Toolbar khi style = 1 StatusBar dạng Simple Panels StatusBa rdạng Normal
Hình 13.4: Các Style của StatusBar b. Thẻ a P nel Hình 13.5: Thẻ Panel Ng N uy u ễn ễ n Đă Đ ng n g Qu Q a u n a g n g Giáo trình Visual Basic 6.0 133 Index
Chỉ số các panel trên toolbar Text
Chuỗi xuất hiện trong Panel ToolTipText
Lời nhắc khi mouse di chuyển trên Panel Minimum
Bề rộng tối thiểu của Panel width Alignment
Dạng canh lề text trong panel (0-sbrLeft,1-Center,2- Right) Style Loại Panel 3-sbrIns 0-sbrText 4-sbrCtrl 1-sbrCaps 5-sbrTi e m 2-sbrNum 6-sbrDate e B vel
Kiểu viền của Panel (0-sbrNoBevel,1-sbrInset, - 2 sbrRa s i ed) AutoSize
Tự động điều chỉnh text xuất hiện trong Panel
0 - sbrNoAutosize, 1-sbrSprings, 2-sbrContents Picture
Hình xuất hiện trong Panel
Để thêm Panels cho StatusBar dạng Normal, bấm nút Insert Panel, gán các th ộ u c
tính cần thiết cho Panel.
Để điều chỉnh thuộc tính của một Panel, click nút mũi tên bên phải hộp Index để
chọn, điều chỉnh giá trị thuộc tính rồi bấm nú tApply.
Để xóa một Panel, bấm nút Remove Panel.
2. Viết lệnh cho Statusbar
Khi viết lệnh cho statusbar, phân biệt hai trường hợp:
StatusBar có Style = sbrSimple: Sử dụng thuộc tính Simple Text
Statusbar1.SimpleText = “StatusBar with Simple text”
StatusBar có Style = sbrNormal: Sử dụng thuộc tính Text của các Panels
StatusBar1.Panels(1).Text = “Edit mode”
Các Panel loại sbrCaps, sbrNum, sbrIns, sbrCtrl,sbrTime.sbrDate tự động cập
nhật propert text theo thời gian, trạng thái của các phím tương ứng trên bàn phím.
Với các thông báo dài, có thể tạm thời chuyển Style thành sbrSimple để trình
bày thông báo rồi chuyển trở lại Style Normal: StatusBar1.Style = sbrSimple
StatusBar1.SimpleText = "Saving data to file. ." ' . .
' Chuyển trở lại sbrSimple StatusBar1.Style = sbrText 134
Giáo trình Visual Basic 6.0
Có thể thêm một Panel trong chương trình bằng phương thức Add, dạng như sau:
Add ([Index], [Key], [Text], [Style], [Picture )] As Panel
Ví dụ: Thêm 1 Panel loại Text vào bên trái StatusBar Wit
h StatusBar1.Panels.Add(1, "temp r
o ary", "Hello World", sbrText) .Alignment = sbrCenter .Bevel = sbrNoBevel .AutoSize = sbrContents End With
Xóa một Panel bằng phươn
g thức Remove với tham số l à vị trí của Panel.
Ví dụ sau yêu cầu người sử dụng nhập nội dung cho Pan l
e khi người sử dụng nhấp đúp tại Panel.
Private Sub StatusBar1_PanelDblClick(ByVal Panel As MSComctlLib.Panel) i D m s As String
If Panel.Style = sbrText Then
s = InputBox("Enter a new text f r o this panel")
If Len(s) Then Panel.Text = s End If End Sub
Ví dụ sau tạo hình ảnh một mặt trăng xoay trên Panel. Chương trình sử dụng mảng
đối tượng Image để quản lý 8 hình ảnh mặt rtăng ở các vị trí khác nhau. Private Sub Timer1_ i T mer() Static n As Integer
StatusBar1.Panels("moon").Picture = imgMoon(n).Picture n = (n + 1) Mod 8 End Sub
StatusBar có thể thông báo trạng thái các phím L c
o k (Caps, Num…) nhưng chỉ có
thể thay đổi trạng thái các phím này bằng bàn phím. Ví dụ sau sử dụng các hàm
API để thay đổi trạng thái các phím Lock bằng mouse.
' Khai báo sử dụng hàm API
Declare Function GetKeyboardState Lib "user32" (KeyState As Byte) As Long Declare Function SetKeyboar S
d tate Lib "user32" (KeyState As Byte) As Long Pri a
v te Sub StatusBar1_PanelDblClick(ByVal Panel As MSComctlLib.Panel) Select Case Panel.Style Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 135
Case sbrCaps: ToggleKey vbKeyCapital
Case sbrNum: ToggleKey vbKeyNumlock
Case sbrScrl: ToggleKey vbKeyScrollLock
Case sbrIns: ToggleKey vbKeyInsert End Select StatusBar1.Refresh End Sub Sub ToggleKey(vKey As Ke C y odeConstants) Dim keys(255) As Byte
' Đọc trạng thái hiện tại từ bàn phím. GetKeyboardState keys(0)
keys(vKey) = keys(vKey) Xor 1 ‘ Thay đổi trạng thái ' Gán giá trị mới SetKeyboardSta e t keys(0) End Sub III. DTPICKER
Là đối tượng điều khiển có 3 chức năng:
- Thông báo ngày giờ theo định dạng,
- Nhập giá trị ngày giờ theo dạng và phạm vi định trước,
- Tự động kiểm tra giá trị nhập ngày giờ theo định dạng. 1. Thuộc tính CalendarBackColor, C c
á thuộc tính màu nền, màu chữ lịch, màu nền và màu CalendarForeColor, chữ tiêu đề CalendarTitleForeColor, CalendarTitleBackColor DayOfWeek
Giá trị ngày trong tuần (1-Chủ nhật, 2- Thứ hai,. .7-Thứ
bảy) của ngày đang chọn Day, Month, Year
Giá trị ngày (1-31), tháng (1-12), ă n m đang chọn MinDate, MaxDate
Các thuộc tính qui định phạm vi chọn ngày tháng Value Giá trị ngày đang chọn Format
Qui định loại định dạng sử dụng. có các giá trị:
0-dtpLongDate . Ví dụ Friday, Nov 14, 1972
1-dtpShortDate. Ví dụ 11/14/1972
2-dtpTime. Ví dụ 5:31:47 PM 3- t
d pCustom. Định dạng theo kiểu của người sử dụng 136
Giáo trình Visual Basic 6.0 CustomFormat
Chuỗi ký tự qui định dạng ngày giờ xuất hiện trong
DTPicker. Chỉ có tác dụng khi thuộc tính Format có giá trị dtpCustom
Các loại ký tự sử dụng trong chuỗi CustomFormat và ý nghĩa: d Giá trị ng y
à 1 hoặc 2 chữ số (1-31) dd Giá trị ngày 2 chữ ố
s có chữ số 0 phía trước (01-31) ddd
Chuỗi 3 ký tự đầu tiên viết tắt tên ngày tiếng anh (Sun, Tue, Wed. .) dddd
Chuỗi tên ngày tiếng anh (Sunday, Tuesd y a , Wednesday. .) h
Giá trị giờ 1 hoặc 2 c ữ h số (1-12) hh
Giá trị giờ 2 chữ số có chữ số 0 phía t rước (01-12) H
Giá trị giờ 1 hoặc 2 chữ s ố (0-23) HH
Giá trị giờ 2 chữ số có chữ số 0 phía trước (0-23) m Giá trị phút 1 h ặ o c 2 chữ số (0-59) mm
Giá trị phút 2 chữ số có h
c ữ số 0 phía trước (01-59) M
Giá t ịr tháng 1 hoặc 2 chữ số (1-12) MM
Giá trị tháng 2 chữ số có chữ số 0 phía trước (01-12) MMM
Chuỗi 3 ký tự đầu tiên viết tắt tên tháng tiếng anh (Jan, Feb, Mar. .)
MMMM Chuỗi tên tháng tiếng anh (January, February, March. .) s
Giá trị giây 1 hoặc 2 chữ số (0-59) ss
Giá trị giây 2 chữ số có chữ số 0 phía trước (01-59) t AM-PM ( 1 ký tự) tt AM-PM (2 ký tự) X Vùng CallBack y
Giá trị 1 chữ số cuối của năm yy
Giá trị 2 chữ số cuối của năm yyy
Giá trị năm đầy đủ (4 chữ số)
Một số ví dụ về cách sử dụng thuộc tính CustomFor a m t như sau: dtpDate.Format = dtpCustom
Sẽ cho kết quả: 01/25/199 9 08:24:24 dtpCustomFormat = “ MM/dd/yyy hh:mm:ss dtpDat . e Format = dtpCustom
Sẽ cho kết quả: January/Monday/1999
dtpCustomFormat = “MMMM/dddd/yyy” dtpDate.Format = dtpCustom Sẽ cho kết quả: Thurs a d y , February 14,
dtpCustomFormat = “dddd, MMMM dd, yyy” 2002 dtpDate.Format = dtpCustom
Sẽ cho kết quả: Thursday Feb 14, 2002 Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 137
dtpCustomFormat = “dddd MMM d, yyy”
Vùng CallBack (callback fields)
Ngoài các loại ký tự cho trong bảng trên, người lập trình còn có thể định nghĩa
thêm các vùng trong chuỗi CustomForm t
a với nội dung tuỳ ý, các vùng này được
mô tả bằng chuỗi các ký tự X. Số lượng ký tự X liên tiếp xác định các vùng khác
nhau trong chuỗi CustomFormat. Ví d : ụ Chuỗi Số vùng CallBack MMMM ddXXX yyy 1 MMMM ddXXX yyyy hh:mm:ss XXXX 2
Giá trị của các vùng CallBack được xác định bằng cách vi t ế lệnh trong sự kiện Fo m
r at. Sự kiện này xảy ra khi DTPicker chuẩn bị trình bày giá trị của nó. 2. Sự kiện
Private Sub object_Format(CallbackField As String, FormattedStrin g As String)
Sự kiện xảy ra trước khi DTPicker trình bày giá trị. Giá trị cầ n trình bày sẽ được xác địn
h và gán cho chuỗi FormattedString Private Sub objec _
t FormatSize(CallbackField As String, Size As Long)
Sự kiện xảy ra trước khi Format đuợc sử dụng để DTPicker cấp phát đủ bộ nhớ
chứa chuỗi CallBack. Thường viết lệnh cho sự kiện này cùng với sự kiện Format Ví dụ:
Muốn trình bày thêm các chuỗi “st”, “nd”, “rd” sau giá trị ngày có dạng Thursday, F b
e ruary 2nd, 2002 , chuỗi CustomFormat phải có dạng dddd, MMMM dXXX, yy y
y . Viết lệnh cho sự kiện F ormat như sau: r
P ivate Sub DTPicker1_Format(ByVal a
C llbackField As String, FormattedString As String) If C allbackField = "XXX" Then
Select Case DTPicker1.Day Mod 10 Case 1 FormattedString = "st" Case 2 FormattedString = "nd" Case 3 FormattedString = "rd" Case Else 138
Giáo trình Visual Basic 6.0 FormattedString = "th" End Select End If End Sub
Private Sub DTPicker1_FormatSize(ByVal CallbackField As String, Size As Integer) If CallbackField = "XXX" The n Size = 2 n E d Sub Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 139 Chương 14 Micros f o t Windows Common Controls Treeview - Updown - Slider - Progressbar I. TREEVIEW
Là đối tượng điều khiển thường được sử dụng để trình bày cấu trúc tổ chức của
một đối tượng như cấu trúc cây thư mục, tổ chức một cơ quan, một đơn vị 1. Các thuộc tính
Nodes: Thuộc tính quan trọng nhất của Treeview, là một danh sách các đối tượng
Node. Mỗi Node được xem là một cây con, có các nút con, nút cháu. . Nodes Node_a Node_b Node 1 Node 2 Node 1 Node 2 Node 3 Node 4 Node 5
Hình 14.1: Đối tượng Nodes
ImageList: Tham chiếu đến đối tương ImageList quản lý danh sách hình liên kết
với TreeView. Gán giá trị này trong Property Pages
Hoặc gán bằng lệnh như sau: Private Sub Form_Load()
Set TreeView1.ImageList = ImageList1 End Sub
CheckBoxes (True/False): Làm xuất hiện Checkbox bên trái mỗi nút
LabelEdit:Chế độ sửa chữa giá trị nhãn (0-tvwAutomatic, 1-tvwManual)
Linestyle: Chế độ vẽ đường nối giữa nút và nút cha , có hai giá trị 0-tvwTreelines, 1- tvwRootLines 140
Giáo trình Visual Basic 6.0
Hình 14.2: Thuộc tính Linestyle
SelectedItem: Cho giá trị là tham chiếu (reference) đến đối tượng Node đang được chọn trong Tre V
e iew hoặc dùng chọn một Node trong TreeView
Chọn nút gốc trong Treeview
Set Treeview1.SelectedItem =Treeview1.Nodes(“Root”)
In giá trị nút đang được chọn Dim nd as Node
Set nd = Treeview1.SelectedItem Debug.Print nd.Text
2. Các thuộc tính của đối tượng Node Child
Tham chiếu đến nút con đầu tiên Children Số nút con
Expanded (True/False) Là xuất hiện các nút con của một nút - Tương đương
với việc nhấp đúp tại nút hoặc click tại dấu +/- để triển khai/thu gọn một nút
FirstSibling Tham chiếu đến nút con đầu tiên ở cùng cấp a
L stSibling Tham chiếu đến nút con cuối cùng ở cùng cấp Next
Tham chiếu đến nút con kế sau ở cùng cấ p Previous
Tham chiếu đến nút con kế trước ở cùng cấp Parent
Tham chiếu đến nút cha của một nút Root
Tham chiếu đến nút gốc Sorted
Sắp xếp các nút con cùng cấp theo thứ tự alphabet Text
Chuỗi xuất hiện bên phải nút Index S
ố thứ tự của nút trong mảng các nút cùng cấp
Chương trình con sau in nhãn (Text) các nút con của một nút
Private Sub ListChildren(pnod As Node) Dim pnodCurrent As Node Set pno C d urrent = pnod.Child
‘ Tham chiếu đến nút con đầu tiên For i = 1 To pnod.Children ‘ Lặp qua số nút con Debug.Print pnodCurrent.Text ‘ In thuộc tính Text Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 141
Set pnodCurrent = pnodCurrent.Next
‘ Trỏ sang nút con kế tiếp Next End Sub
In các nút con của nút gốc Private sub Command1_Click() Dim nd as Node
Set nd = Treeview1.Nodes(“Root”) ListChildren nd End sub 3. Phương thức
Add [Relative][, Relationship][, Key][, Text][, Image][, SelImage]
Thêm một nút mới vào danh sách Nodes trong Treeview. Trong đó Relative
Key hoặc Index của nút mà nút mới được thêm vào
Quan hệ của nút mới so với nút cho trong tham số relative, có các giá trị như sau: 0-tvwFirst Nút được th m
ê là nút đầu tiên so với các nút cùng cấp với nút cho tron g tham số relative 1-tvwLast
Nút được thêm là nút sau cùng so ớ v i các nút cùng cấp Relationship
với nút cho trong tham số relative 2-tvwNext
Nút được thêm vào sau nút cho trong tham số relat v i e
3-tvwPrevious Nút được thêm vào trước so với nút cho trong tham số relative 4-tvwChild
Nút được thêm vào là nút con của nút cho trong tham số relative Key
Chuỗi mã số duy nhất cho mỗi nút Text
Chuỗi xuất hiện bên phải nút Imag e
Hình ảnh của nút ở trạng thái bình thư n ờ g (Lấy từ Imagelist) SelImage
Hình ảnh của nút ở trạng thái được chọn (Lấy từ I a m gelist)
Ví dụ: Sử dụng đối tượng Treeview trình bày sơ đồ tổ chức của công ty Kova như hình
Sử dụng đối tượng ImageList với các hình ảnh được chọn nh ư sau: 142
Giáo trình Visual Basic 6.0 Hình 14.3: Thẻ general
Lệnh cho sự kiện Form_load With tvw.Nodes
.Add , , "Root", "Kova Co.ltd", 3
.Add "Root", tvwChild, "KD", "P.Kinh doanh", 1, 2
.Add "Root", tvwChild, "KT", "P.Ke toan", 1, 2 .Add "Root", tvwChild, " VT", "P.Vat tu", 1, 2 End With
• Lệnh .Add , , "Root", " o
K va Co.ltd", 3 tạo nút gốc với Key=Root, Text=”Kova
Co.ltd” sử dụng hình thứ ba (3) trong Imagelist
• Lệnh .Add "Root", tvwChild, "KD", "P.Kinh doanh", 1, 2 tạo nút con dưới gốc với Key=KD, Text = “P.Ki h
n doanh” sử dụng các hình 1, 2 trong ImageList
• Lệnh .Add "Root", tvwChild, "KT", "P.Ke toan", 1, 2 tạo nút con dưới gốc với Key=KT, Text = “P.Ke o
t an” sử dụng các hình 1, 2 trong ImageList • Lệnh .Add R
" oot", tvwChild, "VT", "P.Vat tu", 1, 2 tạo nút con dưới gốc với
Key=VT, Text = “P.Vat tu” sử dụng các hình , 1 2 trong ImageList Cách v iết khác Dim nd As Node
Set nd = tvw.Nodes.Add(, , "Root", "Kova Co.ltd", 3)
Set nd = tvw.Nodes.Add("Root", tvwChild, "KD", "P.Kinh doanh", 1, 2) Set n
d = tvw.Nodes.Add("Root", tvwChild, "KT", "P.Ke toan", 1, 2)
Set nd = tvw.Nodes.Add("Root", tvwChild, "VT", "P.Vat tu", 1, 2)
Muốn thêm 5 nhân viên vào phòng kinh doanh như hình , viết thêm lệnh như sau: For i = 1 To 5
Set nd = tvw.Nodes.Add("KD", tvwChild, , "Nhan vien #" & i, 4, 5) Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 143 Next nd.Expanded = True
Có thể viết cách khác như sau: Private Sub Form_Load() Dim DptStr
DptStr = Array("P.Kinh doanh", "P.Ke toan", "P.Vat tu") Dim nd As Node, nd1 As Node
Set nd = tvw.Nodes.Add(, , "Root", "Kova Co.ltd", 3) For i = 0 To 2
Set nd = tvw.Nodes.Add("Root", tvwChild, , DptSt ( r i), 1, 2) nd.Expanded = True For j = 1 To 5
Set nd1 = tvw.Nodes.Add(nd.Index, tvwChild, , "Nhan vien # "& j, 4, 5) Next Next End sub Remove Index
Xoá nút tại vị trí Index hoặc nút có Key cho trước Ví dụ:
Xoá nút đang được chọn trên Treeview khi nhấp đúp trong Treeview Private Sub tvw_DblClick() Dim nd As Node Set nd = tvw.SelectedItem idx = nd.Index tvw.Nodes.Remove idx End Sub Clear
Xoá toàn bộ cây trong Treeview Ví dụ: Private Sub tvw_DblClick() tvw.Nodes.Clear End Sub 4. Sự kiện
Private Sub object_NodeClick(ByVal node As Node)
Sự kiện xảy ra khi người dùng click tại một nút trên Treeview 144
Giáo trình Visual Basic 6.0 Ví dụ:
In giá trị Key và Text lên tiêu đề form khi người sử dụng Click tại một nút trên Treeview
Private Sub tvw_NodeClick(ByVal Node As Node) Me.Caption = "In e
d x = " & Node.Index & " Text:" & Node.Text End Sub Ví dụ:
In tất cả các nút con khi người sử dụng Click tại một nút bằng cách sử dụng
chương trình con ListChildren ở h p ần trên.
Private Sub tvw_NodeClick(ByVal Node As Nod ) e ListChil r d en Node End Sub II. UPDOWN
Đối tượng điều khiển hoạt động theo kiểu thanh cuộn nhưng luôn gắn liền v i ớ một
đối tượng khác để tăng hoặc giảm giá trị của đối tượng gắn liền với nó 1. Các thuộc tính AutoBuddy
Tự động chọn đối tượng đi kèm với Updown dựa trên
TabIndex, khi thuộc tính này được chọn, thuộc tính Buddy
Control cũng được tự động chọn (True/False)
BuddyControl Tên đối tượng đi kèm với Updown. Được tự động chọn khi Autobuddy=Tru e
BuddyProperty Qui định thuộc tính muốn thay đổi giá trị của đối tượng đi kèm với updown Min
Qui định giá trị nhỏ nhất trên đối tượng khi bấm nút down Max
Qui định giá t ịr lớn nhất trên đối tượng khi bấm nút up Increment
Qui định độ tăng giá trị khi bấm nút Up/Down (Luôn dương) Value Giá trị đang chọn Wrap
Giá trị chọn trong đối tượng được tự đông quay về min/max khi
tăng/giảm đến hết phạm vi giá trị (True/False) 2. Sự kiện Private Sub object_Chan e g ()
Sự kiện xảy ra khi Updown thay đổi giá trị
Private Sub object_DownClick()
Sự kiện xảy ra bấm nút Down Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 145 Private Sub object_UpClick()
Sự kiện xảy ra bấm nút Up
Ví dụ sau thay đổi độ tăng, giảm giá trị bằng cách định nghĩa thuộc tính Increment
khác nhau khi bấm nút up, down Private Sub Updown1_UpClick() Updow 1 n .Increment = 5 End Sub
Private Sub Updown1_DownClick() Updown1.Increment = 1 End Sub III. SLIDER
Đối tượng điều khiển dùng để chọn một giá trị trong một phạm vi xác định trước.
Slider cũng có các thuộc tính giống thanh cuộn ngang. ngoài ra nó còn có thêm
khả năng chọn một phạm vi giá trị. 1. Thuộc tính Min, Max, a
V lue, SmallChange, LargeChange:Giống Scrollbar
Text: Nội dung xuất hiện trong Tooltip khi kéo thanh trượt
TextPosition:Vị trí xuất hiện Text khi kéo thanh trượt, có các gi á trị 0-sldAboveLeft Phía trên thanh trượt
1-sldBelowRight Phía dưới thanh trượt
TickStyle: Qui định các trình bày các vạch giá trị trên thanh trượt, có các giá trị 0-sldBottomRight Vạch g
iá trị xuất hiện phía dưới thanh trượt 1-sldTopLeft
Vạch giá trị xuất hiện phía trên thanh trượt 2-sldBoth
Vạch giá trị xuất hiện cả trên & dưới thanh trượt 3-sldNone Không có ạ v ch giá trị
Đoạn chương trình sau sử dụng ComboBox để chọn thuộc tính TickStyle cho một thanh trượt Private S b u Form_Load() With combo1 .AddItem "Bottom/R g i ht" .AddItem "Top/Left" .AddItem "Both" .AddItem "None" 146
Giáo trình Visual Basic 6.0 .ListIndex = 0 End With End Sub Private Sub combo1_ l C ick()
Slider1.TickStyle = combo1.ListIndex End Sub
TickFrequency: Thuộc tính qui định số h k oảng vạch xuất hiện
SelectRange (True/False): Thuộc tính qui định chế độ chọn phạm vi giá trị
SelStart: Giá tr ịbắt đầu phạm vi chọn trên thanh trượt
SelRange: Giá trị phạm vị chọn
Thường lập trình chế độ chọn phạm vi được kích hoạt khi người dùng bấm phím SHIFT 2. Phương h t ức
ClearSel: Xoá phạm vi chọn trên thanh trượt
GetNumTicks: Phương thức cho số vạch giá trị xuất hiện trên thanh trượt Ví dụ: Private Sub Slider1_Click() MsgBox Slider1.GetNumTicks Slider1.M x a = Slider1.Max + 10 End Sub 3. Sự kiện Private Sub object_Scr l o l( )
Sự kiện xảy ra khi thanh trượt di chuyển. Sự kiện n
ày xảy ra trước sự kiện Click Private Sub object_Change( )
Sự kiện xảy ra sau khi thuộc tính Value đã thay đổi giá trị Ví dụ sau minh h ạ
o hoạt động chọn phạm vi giá trị trên slider bằng cách bấm phím
SHIFT khi click trên thanh trượt
Private Sub Slider1_MouseDown(Button As Inte e
g r, Shift As Integer, x As Single, y As Single) If Shift = vbShiftMask Then
' Bấm phím SHIFT, chuyển sang chế độ chọn phạm vi. Slider1.SelectRange = True Slider1.SelLength = 0
StartSelection = Slider1.Value Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 147 Else
' Bỏ chế độ chọn phạm i v . Slider1.SelectRange = False End If End Sub Private Sub Slider1_Scroll()
Slider1.Text = "Value = " & Slider1.Value If Slider1.SelectRange Then
If Slider1.Value > StartSelection Then
Slider1.SelStart = StartSelection
Slider1.SelLength = Slider1.Value - StartSelecti n o Else
Slider1.SelStart = Slider1.Value l
S ider1.SelLength = StartSelection - Slider1.Value End If End If End Sub IV. PROGRESSBAR
Đối tượng điều khiển trình bày tốc độ hoặc thời gian thực hiện của một hoạt động
mất một khoảng thời gian khá lâu trê
n máy như hoạt động mở File, sao chép,
truyền dữ liệu trên mạng. . Các Thuộc ítnh Min Giá rtị nhỏ nhất Max Giá trị lớn nhất Value Giá trị hiện tại
Scrolling Thuộc tính qui định tính chất của vạch mô tả tiến trình, có các giá trị: 0- ccScrollingStandard 1-ccScrollingSmoot h
Lập trình trên ProgressBar thường gồm việc qui định các gía trị Min, Max trước
khi tiến trình thực hiện. Trong quá trình thực hiện tiến trình (thường là vòng lặp),
giá trị Value sẽ được cập nhật
Ví dụ sau minh hoạ tiến trình gán giá trị cho một mảng có 1 0 0 0 phần tử Dim A(1000) As Integer Private Sub Form_L a o d() 148
Giáo trình Visual Basic 6.0 With ProgressBar1 .Min = 0 .Max = 1000 .Value = 0 n E d With End Sub Private Sub CmdStart C _ lick() For i = 0 To 1000 A(i) = i ProgressBar1.Value = i Next End Sub Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 149 Chương 15 RichTextbox – Form MDI I. RICHTEXTBOX Là một loại Text o
b x đặc biệt, ngoài các thuộc tính cơ bản của một textbox. RichTextBox c n
ò bao gồm các thuộc tính định dạng văn bản như: - Định dạng font chữ,
- Định dạng đoạn văn như bullet, canh lề, - Khả năng nh n
ú g đối tượng (Object Embedding),
- Khả năng lưu văn bản dạng text hoặc dạng có định dạng (RTF - Rich Text Format .)
RichTextBox không có sẵn trên ToolBox. Sử dụng hộp thoại Components để nạp RichText o B x lên ToolBox. 1. Các thuộc tính
Các thuộc tính bổ sung so với textbox SelRTF
Giống thuộc tính SelText của TextBox nhưng có thêm định dạng SelFontName Chọn font SelFontsize Chọn font size SelFontColor Chọn màu SelBold
(True/False) Chọn chữ đậm SelItalic
(True/False) Chọn chữ nghiêng SelUnderline
(True/False) Chọn chữ gạch chân SelAlignment
Canh lề cho đoạn văn, có các giá trị:
Null : Phần văn bản chọn trên nhiều đoạn có trạng thái canh lề khác nhau
0 - rtfleft: Canh trái (default) 1 - rtfRight: Canh phải 2 - rtfCenter: Canh giữa SelBullet
(True/False) Đánh bullet cho đoạn văn SelIndent Qui định lề trái SelRightIndent Qui định lề phải
SelHangingIndent Qui định đoạn thụt vào của dòng đầu tiên trong đoạn AutoverbMenu
(True/False) Cho phép xuất hiện menu popup khi bấm phím phải trên richtextbox 150
Giáo trình Visual Basic 6.0 2. Các phương thức a. LoadFile Path, Filetype
Nạp tập tin Text hoặc RTF lên RichTextBox. Trong đó: Path: Đường dẫn
FileType: Loại tập tin nạp (0 - rtfRTF, 1 - rtfText). Giá trị mặc định là rtfRTF Ví dụ: Private Sub mnuOpen_Click() On Error GoTo E r r orOpen With CmDlg .InitDir = "C:\My Documents"
.Filter = "Text (*.txt)|*.txt|RichText format (*.rtf)|*.rtf .Filt r e Index = 2 .CancelError = True .ShowOpen rtfDat . a LoadFile .FileName, rtfRTF Eîxit s b u End With ErrorOpen: End Sub b. SaveFile a P th, Filetype
Ghi nội dung RichTextBox lên tập tin. Các tham ố
s và tuỳ chọn giống LoadFile Ví dụ: Private Sub mnuSave_Click() On E r r or GoTo ErrorSave With m C Dlg .InitDir = "C:\My Documents"
.Filter = "Text (*.txt)|*.txt|RichText format (*.rtf)|*.rtf .FilterIndex = 2 .CancelError = True .ShowSave
rtfData.SaveFile .FileName, rtfRTF Eîxit sub End Wi h t ErrorOpen: MsgBo x "Not save" End Sub Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 151
c. Find(string, start, end, option)
Tìm kiếm một chuỗi rtong RichTextBox, chuỗi tìm thấy được highlight. Phương
thức trả về giá trị là vị trí đầu tiên của chuỗi trong RichTextBox Các tham số: String Chuỗi cần tìm Start Vị trí b t
ắ đầu (vị trí đầu tiên = 0) End
Vị trí kết thúc tìm kiếm
Option Qui định cách thức tìm: 2 - rtfWholeword: Tì m từ trọn vẹn
4 - rtfMatchCase: Phân biệ tchữ thường, chữ in Các tham số trên có t ể h kết hơp bằng phép OR Ví dụ: Private Sub mnuFind_Click() Static p As Long
p = Form1.Richtxt.Find(txtFind.Text, p + 1) If p <> -1 The n
MsgBox "Find text at position " & p Else MsgBo x "Search text not found" End If E d n Sub d. GetLineFromChar(charpos)
Cho giá trị là số thứ tự dòng chứa vị trí cần xét Ví dụ: Private Sub mnuFind_Click() Static p As Long
p = Form1.Richtxt.Find(txtFind.Text, p + 1) If p <> -1 Then
MsgBox "Find text at line " & Form1.Richtxt.GetLineF o r mChar(p) Else MsgBox "Search text o n t found" End If End Sub II. SỬ DỤNG R C I HTEXTBOX
1. Chọn dáng vẻ Font chữ (Font style) bằng nút lệnh trên Toolbar Private Sub tbr_Butto C
n lick(ByVal Button As MSComctlLib.Button) 152
Giáo trình Visual Basic 6.0 Select Case Button.Index Case 8
rtfBox.SelBold = No trtfBox.SelBold Case 9
rtfBox.SelItalic = Not rtfBox.SelItalic C s a e 10 rtfBox.SelU d
n erline = Not rtfBox.SelUnderline Case 11
rtfBox.SelAlignmen t= rtfLeft Case 12
rtfBox.SelAlignment = rtfCent r e Case 13
rtfBox.SelAlignment = rtfRight End Select End Sub
2. Chọn Font chữ bằng lệnh trên menu và hộp thoại Font Private Sub mnuF n o t_Click() Cmdlg.Flags =CdlCFBoth Cmdlg.ShowFont With rtfBox .Sel o F ntName = Cmdlg.FontName .Sel o F ntSize = Cmdlg.FontSize .SelBold = Cmdlg.FontBold .SelItalic = Cmdlg.Fo t n Italic
.SelUnderline = Cmdlg.FontUnder ilne End With End Sub 3. Sự kiện SelChange
Do có thêm tính chất của đoạn văn, font chữ, người lập trình còn viết lệnh trên sự
kiện Selchange để thông báo tính chất của font chữ, trạng thái canh lề của đ ạ o n
văn. . Sự kiện này xảy ra khi con trỏ chèn thay đổi vị trí hoặc thay đổi phần chọn trong RichTextBox Ví dụ: Chương trình so n
ạ thảo văn bản có RichTextBox và Toolbar với các nút bấm
Private Sub rtfBox_SelChange()
' Trang thai Text - Bold, Italic, Underline Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 153 If rtfBox.SelBold Then
tbr.Buttons(8).Value = tbrPressed Else
tbr.Buttons(8).Value = tbrUnpressed End If If rtfBox.SelItalic Then
tbr.Buttons(9).Value = tbrPressed Else
tbr.Buttons(9).Value = tbrUnpressed End If If rtfBox.S l e Underline Then
tbr.Buttons(10).Value = tbrPressed Else
tbr.Buttons(10).Value = tbrUnpress d e End If
If rtfBox.SelAlignment = rtfLeft The n tbr.Butto s n (12).Value = tbrPressed ElseIf trfB x
o .SelAlignment = rtfCenter Then
tbr.Buttons(13).Value = tbrPressed
ElseIf rtfBox.SelAlignment = rtfRight Then tbr.Buttons(14).Value = t r b Pressed Else For i = 12 To 14 tbr.Butto s n (i).Value = tbrUnpressed Next End If End Sub III. SỬ DỤNG CLIPBOARD
1. Sao chép vào clipboard (Copy) Private Sub n m uCopy_Click()
Clipboard.SetText rtfBox.SelRTF End Sub
2. Chèn dữ liệu từ Clipboard vào văn bản (Paste) Private Sub mnuPaste_Click()
rtfBox.SelRTF = Clipboard.GetText End Sub
3. Cắt dữ liệu vào Clipboard (Cut) 154
Giáo trình Visual Basic 6.0 Private Sub mnuCut_Click()
Clipboard.SetText rtfBox.SelRTF rtfBox.SelRTF = "" End Sub
IV. SỬ DỤNG COMBO BOX CHỌN O
F NT CHỮ VÀ CỠ CHỮ TRÊN TOOL A B R
Nạp font chữ và cỡ chữ trong sự kiện Form_load Private Sub Form_Load() Dim i As Integer With cmbFontName
For i = 0 to Screen.FontCount - 1 .AddItem Screen.Fonts(i) Next i ' Set ListIndex to 0. .ListIndex = 0 End i W th With cmbFontSize For i = 8 To 72 Step 2 .AddItem i Next i ' Set ListIndex to 0 .ListIndex = 1 ' size 10. End With End Sub V. MDI F R O M
Là loại form được sử dụng trong các ứng dụng có giao diện đa tài liệu (Multiple
Document Interface) là loại ứng dụng mà mỗi lú
c trong nó có thể mở nhiều cửa sổ tài liệu khác nhau. 1. Đặc điểm:
- Luôn là cửa sổ chính của m t ộ chương trình
- Mỗi chương trình chỉ có một for m dạng MDI
- Cửa sổ MDI chứa các cửa sổ khác bên trong nó, các ử c a sổ này chỉ nằm
trong vùng làm việc của form MDI
- Khi một cửa sổ con được cực đại, kích thước của nó sẽ bằng kích thước
vùng làm việc của cửa sổ MDI và tiêu đề của cửa ổ s này chính là tiêu đề của cửa sổ MDI Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 155
- Khi một cửa sổ con được cực tiểu, icon của nó sẽ nằm trong MDI chứ không nằm trên taskbar. 2. Form con MDI
- Một form MDI có thể chứa một ho c
ặ nhiều form con. Để định nghĩa một form là con của form D
M I, đặt thuộc tính MDIChild thành True.
- Form con MDI không thể xuất hiện bên ngoài form MDI. Nếu một form
con MDI được chọn làm form bắt đầu (startup) thì form MDI cũng được tự động nạp trư c ớ khi nạp form con.
- Menu thanh (nếu có) trên form con MDI ẽ
s trở thành menu của form MDI
khi form con được kích hoạt (Active), chính vì thế thường chỉ định nghĩa Menu cho form M I D .
3. Các thuộc tính và phươ g
n thức bổ sung so với form thường
Thuộc tính ActiveForm: cho biết form con đang nhận focus trong MDIForm.
Ví dụ: Sử dụng thuộc tính Activeform đ
ể đóng form đang hoạt động khi chọn lệnh File/Close trên menu. Private Sub mnuFileCl s o e_Click() If Not (ActiveF r
o m Is Nothing) Then Unload ActiveForm End Sub
Với các ứng dụng MDI có nhiều form khác loại chẳng hạn như ứng dụng vừa soạn
văn bản (kiểu Wordpad) vừa vẽ hình (kiểu Paint), phải có các thanh công cụ tương ứng cho chức năng vẽ ì
h nh và định dạng văn bản. Chương trinh phải có khả năng nhận biết loại for
m đang hoạt động để hiển thị ToolBar tương ứng: Private Sub mnuFilePrint_Cli k c ()
If TypeOf ActiveForm Is frmDocument Then Tbr_Dra . w Enabled = True Tbr_Do . c Enabled = False l E seIf TypeOf Acti e v Form Is frmDraw Then Tbr_Draw.Enabled = False Tbr_Doc.Enabled = True End If End Sub Phương thức Arrang e
Sắp xếp các cửa sổ con bên trong cửa sổ MDI
Trong đó Option có các giá trị sau: Hằng Giá trị Ý nghĩa vbCascade 0
Sắp xếp theo kiểu Cascade 156
Giáo trình Visual Basic 6.0 vbTileHorizontal 1
Sắp xếp kiểu Tile theo chiều ngang vbTileVertical 2
Sắp xếp kiểu Tile theo chiều dọc vbArrangeIcons 3
Sắp xếp các icon đang minimize trong MDI
Ví dụ: Xắp sếp các cửa sổ con trong ứng dụng MDI bằng lệnh trên menu Private Sub mnuTil H e orizontally_Click() Arrange vbTileHorizontal End u S b
Private Sub mnuTileVertically_Click() Ar a r nge vbTileVertical End Sub
Private Sub mnuCascade_Click() Ar a r nge vbCascade End Sub
Private Sub mnuArrangeIcons_Click() Arrange vbArrangeIcons End Sub
4. Nạp cửa sổ con trong form MDI
- Khi form đã được thiết kế: .Show
- Nạp nhiều form tương tự như form đ ã thiết kế Dim As New Load .Show Ví dụ: Private sub mnuNew_Click() Dim f As frmEdit Load f f.Show End sub
5. Sử dụng Form Wizard tạo ứng dụng MDI
Hộp thoại New Project có chức nă g
n tạo tự động ứng dụng MDI với Menu và
Toolbar có dạng chuẩn của Micros f
o t. Có thể sử dụng chức năng này để tạo nhanh
các ứng dụng MDI. Các bước thực hiện như sau: 1. C ọ
h n File/New Project xuất hiện cửa sổ New Project (Hình 15.1), chọn VB Application Wizard, bấm K O . Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 157
Hình 15.1: Cửa sổ chọn New Project
2. Trong hộp thoại Interface y
T pe, click chọn loại giao diện ứng dụng cần tạo là MDI rồi bấm ú n t Next (Hình 15.2).
Hình 15.2: Chọn loại giao diện MDI
3. Chọn loại menu và menu con (submenu) muốn sử dụng trong chương trình,
Check để chọn lệnh muốn xuất hiện trên menu, Uncheck để bỏ lệnh xuất
hiện, bấm nút hoặc để di chuyển thứ tự xuất hiện các mục trên menu rồi bấm nút Next. 158
Giáo trình Visual Basic 6.0
Hình 15.3: Chọn menu trong Application Wizard
4. Hộp thoại Customize Toolbar xuất hiện cho phép chọn lựa loại nút lệnh
muốn xuất hiện trên Toolbar (Hình 15.4).
Hình 15.4: Lựa chọn nút lệnh trên Toolbar
5. Bấm nút Finish để kết thúc. Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 159 Chương 16 Lập trình Drag-and-Drop I. TỔNG QUAN
Khả năng lập trình Drag-and-Drop (kéo-nhả) đã được hỗ trợ từ những phiên bản
đầu tiên của Visual Basic, chương này trình bày kỹ thuật lập trình kéo-nhả trong Visual Basic 6.0. 1. Kéo-nhả tự động Visual Basic ỗ
h trợ hai chế độ kéo-nhả: tự động và bằng tay. Trong chế độ tự
động, người lập trình chỉ cần gán một thuộc tính trong lúc thiết kế (design-time) ho c
ặ trong lúc chạy chương trình (run-time), Visual Basic sẽ thực hiện mọi việc;
ngược lại trong chế độ bằng tay, người lập trình phải viết lệnh trong một số sự
kiện xảy ra trong lúc đối ư
t ợng đang được kéo. Chế độ lập trình bằng tay cho phép
người lập trình tác động lên qui trình kéo-nhả một cách linh hoạt hơn.
Hầu hết các đối tượng điều khiển chuẩn và một số đối tượng điều khiển ActiveX
hỗ trợ chế độ kéo-nhả. Một số chỉ có thể là đối tượng đích, một số khác có t ể h vừa
là đối tượng nguồn, vừa là đối tượng đích. Chỉ có một số đối tượng có thể hoạt
động ở chế độ kéo-thả tự động.
Để xác định đối tượng là nguồn trong hoạt động kéo-nhả, người lập trình sử dụng
thuộc tính OLEDragMode. Để xác đối tượng là đích trong hoạt động kéo-nhả,
người lập trình sử dụng thuộc tính OLEDropMode. Bảng 16.1 tóm tắt mức độ hỗ
trợ của các loại đối tượng trong hoạt động kéo-nhả. Bảng 16.1 Đối tượng OLEDragMode OLEDropMode TextBox, PictureBox, Image, vbManual, vbNone, RichTextBox, MaskEdBox vbAutomatic vbManual, vbAutomatic
ComboBox, ListBox, DirListBox, vbManual, vbNone, FileListBox, DBCombo, DBList, vbAutomatic vbManual
TreeView, ListView, ImageCombo, DataList, DataCombo
Form, Label, Frame, CommandButton, Không hỗ trợ vbNone,
DriveListBox, Data, MSFlexGrid, SSTab, vbManual TabStrip, Toolbar, StatusBar,
ProgressBar, Slider, Animation, UpDown,
MonthView, DateTimePicker, CoolBar 160
Giáo trình Visual Basic 6.0
Đối với đối tượng hỗ trợ chế độ kéo-nhả tự động, để lập trình kéo-nhả, người lập
trình chỉ cần gán các thuộc tính OLEDragMode và OLEDropMode có giá trị
vbAutomatic. Ví dụ để viết một ứng dụng sử dụng RichTextBox cho phép nhận dữ
liệu kéo-nhả từ các ứng dụng xử lý văn bản khác như MS Word hoặc WordPad,
người lập trình chỉ cần gán giá trị vbAutomatic cho các thuộc tính OLEDragMode
và OLEDropMode của RichTextBox.
2. Kéo-nhả điều khiển bằng chương trình
Chế độ kéo-nhả điều khiển bằng chương trình (manual drag-and-drop) bằng tay cho phép người ậ
l p trình tác động lên qui trình kéo-nhả một cách linh hoạt hơn.
Hình 16.1 mô tả các bước viết lệnh trên đối tượng nguồn và đích khi muốn điều
khiển hoạt động kéo-nhả bằng chương trình.
Người sử dụng click trên đối tượng nguồn Sub Source_MouseDown(…)
Đối tượng nguồn định dạng source.OLEDrag
dữ liệu sẽ được chuyển đi
Người sử dụng di chuyển mouse
Sub Source_OLEStartDrag(Data, effects)
trên đối tượng đích. Đối tượng
Data.SetData [bytes][, format]
đích gán một hoặc nhiều hiệu ứng kéo-nhả
Sub Target_OLEDragOver(Data, effects…)
Đối tượng nguồn nhận phản hồi Effects = vbDropEffectCopy
bằng cách thay đổi dang con trỏ
Sub Source_OLEGiveFeedback(Data, DefaultCursors) S r c een.MousePointer=vbCustom
Người sử dụng nhả phím chuột
Sub Target_OLEDragDrop(Data, effects…)
If Data.GetFormat(vbCFText) then Text = Data.GetData(vbCFText)
Đối tượng nguồn hoàn tất hoạt
động kéo-nhả bằng cách xóa dữ
liệu nguồn nếu là lệnh Move
Sub Source_OLECompleteDrag(format)
Hình 16.1: Các sự kiện được kích hoạt khi kéo-nhả điều khiển bằng chương trình Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 161 II.
MỘT CHƯƠNG TRÌNH VÍ DỤ
Phần này trình bày một chương trình ví dụ có giao diện như hình 16.2
Hình 16.2: Giao diện chương trình ví dụ C ư
h ơng trình gồm một RichTextBox được sử dụng vừa làm đối tượng nguồn, vừa
làm đối tượng đích cho các hoạt động kéo-nhả. ListBox bên phải được sử dụng
làm đối tượng đích cho các thao tác kéo nhả. Khi nội dung từ RichTextBox hoặc
từ một chương trình soạn thảo văn bản khác được kéo nhả vào ListBox, nó sẽ tách t ,
ừ sắp xếp rồi đưa vào thuộc tính List như hình 16.2. Lệnh viết cho từng sự kiện
theo sơ đồ hình 16.1 được lần lượt trình bày như sau:
1. Khởi tạo hoạt động kéo-nhả K ở
h i tạo hoạt động kéo-nhả bằng cách đặt thuộc tính OLEDragMode thành
vbManual rồi khởi động quá trình kéo bằng cách cho thực hiện phương thức
OLEDrag trong sự kiện MouseDown:
Private Sub rtfText_MouseDown(Button As Integer, Shift As Integer, _ x As Single, y As Single)
' Khởi động hoạt động kéo khi phím phải được bấm
If Button = 2 Then rtfText.OLEDrag End Sub
Khi phương thức OLEDrag được gọi thực thi, sự kiện OLEStartDrag được kích h ạ
o t trên đối tượng nguồn. Sự kiện này có tham số là đối tượng DataObject và
tham số AllowedEffects. DataObject là đối tượng chứa dữ liệu chuyển giữa đối tư n
ợ g nguồn và đối tượng đích. Dữ liệu cũng có thể chứa trong đối tượng này 162
Giáo trình Visual Basic 6.0
bằng phương thức SetData. Tương tự như cách sử dụng Clipboard, dữ liệu chứa có thể ở
nhiều dạng khác nhau như tóm tắt trong bảng 16.2.
Bảng 16.2: Khai báo hằng các loại dữ liệu chứa trong Clipboard Hằng Giá trị Ý nghĩa vbCFText 1 Text vbCFBitmap 2 Bitmap (BMP) vbCFMetafile 3 Metafile (WMF) vbCFEMetafile 14 Enhanced metafile (.emf) vbCFDIB 8
Device independent bitmap (dib or bmp) vbCFPalette 9 Color palette vbCFFiles 15 List of files vbCFRTF -16639 Rich Text Format (RTF)
Ví dụ đối với RichTextBox, dữ liệu di chuyển có thể ở dạng RTF hoặc Text không có định dạng:
Private Sub rtfText_OLEStartDrag(Data As RichTextLib.DataObject, _ AllowedEffects As Long) If rtfText.SelLength Then
Data.SetData rtfText.SelRTF, vbCFRTF
Data.SetData rtfText.SelText, vbCFText Else
Data.SetData rtfText.TextRTF, vbCFRTF
Data.SetData rtfText.Text, vbCFText End If
AllowedEffects = vbDropEffectMove Or vbDropEffectCopy End Sub
2. Chuẩn bị cho thao tác nhả trên đối tượng nguồn
Khi hoạt động kéo đang xảy ra, Visua lBasic kích hoạt biến cố OLEDragOver trên
mọi đối tượng mà mouse di chuyển ngang qua nó. Biến cố này nhận các tham s ố là
đối tượng DataObject và giá trị Ef e
f ct đã được chuẩn bị bởi đối tượng nguồn. Căn
cứ trên các thông tin này, người lập trình sẽ gán cho tham số Effect giá trị tương
ứng với hoạt động sẽ được thực hiện khi ngư i
ờ sử dụng nhả chuột trên đối tượng.
Giá trị effect có t hể có giá trị như cho trong bảng sau: Hằng Giá trị 0 vbDropEffectNone 1 vbDropEffectCopy Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 163 2 vbDropEffectMove
&H80000000 vbDropEffectScroll
Giá trị cuối cùng có ý nghĩa đối tượng đích sẽ cuộn nội dung bên trong nó ví dụ khi mouse i d chuyển trên o
m use thanh cuộn của Listbo . x Tham số trạng thái (State) ch a
ứ giá trị xác định trạng t á
h i mouse đang di chuyển theo hướng vào hay ra khỏi hoặc i
d chuyển ngang qua đối tượng và c ó giá trị như sau: Hằng Giá trị 0 vbEnter 1 vbLeave 2 vbO e v r
Ví dụ sau làm thay đổi màu ề
n n Listbox khi kéo mouse ngang qua Listbox
Private Sub lstWords_OLEDragOver(Data As DataObject, Effect As Long, Butt n
o As Integer, Shift As Integer, X As Single, Y As Single, State As Integer)
If Data.GetFormat(vbCFText) Then Effect = Effect And vb r D opEffectCopy Else Effect = vbDropEffectNone End If ' Là
m thay đổi màu nền ListBox khi kéo mouse ngang qua listbox. If State = vbLeave Then
' Khôi phục màu nền khi di chuyển m u o se ra khỏi Listbox lstW r
o ds.BackColor = vbWindowBackground
ElseIf Effect <> 0 And State = vbEnter Then
' Đổi màu nền thành màu vàng khi di chuyển mouse vào Listbox
lstWords.BackColor = vbYellow End If End Sub
Ngay sau biến cố OLEDragOver xảy ra trên đối tượng nguồn, Visual Basic kích
hoạt tiếp biến cố OLEGiveFeedback trên đối tượng này để nhận biết hoạt động
kéo tác động như thế nào đối với đối tượng đích để có thể thực hiện thao tác tương
ứng ví dụ dạng con trỏ mouse được thay đổi khác nhau với hoạt động sao chép
hoặc di chuyển. Ví dụ sau thay đổi dạng con trỏ Cust m
o khi thực hiện thao tác sao
chép trên đối tượng đích.
Private Sub lstWords_OLEGiveFeedback(Effect As o L ng, _ DefaultCursors As Boolean)
' effect là Copy, sử dụng dạng con trỏ custom. 164
Giáo trình Visual Basic 6.0
If Effect = vbDropEffectCopy Then DefaultCursors = False
Screen.MousePointer = vbCustom
'Dạng con trỏ nạp trong đối tượng Image.
Screen.MouseIcon = imgCopy.Picture Else DefaultCursors = True End If End Sub
Cần lưu ý là nếu không cần thay đổi dạng con trỏ thì không phải viết lệnh cho biến cố OLEGiveFeedback.
3. Nhả trên đối tượng đích
Khi người sử dụng nhả mouse trên đối tượng đích, Visual Basic kích hoạt biến cố
OLEDragDrop trên đối tượng đích. Ngoài tham số State, biến cố này nhận các
tham số tương tự như OLEDragOver. Trong trường hợp này, tác dụng của tham số
Effect hơi khác so với biến cố OLEDragOver vì nó thể hiện hành vi được quyết định trên đối tư n ợ g đích.
Thủ tục dưới đây minh họa lệnh viết tro g
n biến cố OLEDragDrop trên Listbox. Private S b
u lstWords_OLEDragDrop(Data As DataObject, Effect As Long,
Button As Integer, Shift As Integer, X As Single, Y As Single)
' Khôi phục màu nền Listbox.
lstWords.BackColor = vbWindowBackground
' Xác định giá trị tham số Effect: sao chép hay di c huyển.
If Effect And vbDropEffectCopy Then Effect = vbDropEffectCopy
ElseIf Effect And vbDropEffectMov eThen Effe t c = vbDropEffectMove End If
' Trong cả hai trường hợp, chỉ nhận dữ liệu dạng Text Dim text As String
text = Data.GetData(vbCFText)
' Lệnh xử lý Text và nạp vào ListBox … End Sub
Ngay sau khi biến cố OLEDragDrop xảy ra, Visual Basic kíc h hoạt biến cố
OLECompleteDrag. Người lập trình phải viết lệnh trong biến cố này để hoàn tất Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 165
thao tác đã thực hiện trên đối tượng nguồn chẳng hạn như xóa phần text trong đối
tượng nguồn nếu là hoạt động di ch y
u ển (effect = vbDropEffectMove) hoặc khôi
phục dữ liệu trên đối tượng nguồn nếu là hoạt động sao chép. Thủ tục dưới đây
minh họa lệnh viết trong biến cố OLECompleteDrag tr n ê Listbox.
Private Sub rtfText_OLECompleteDrag(Eff c e t As Long) If Eff c e t = vbDropEf ectMove Then
' Nếu là di chuyển thì xóa phần Text chọn. rtfT x e t.SelText = "" Else
' Nếu là sao chép thì thôi chọn. rtfText.SelL n e gth = 0 End If End Sub
4. Nạp dữ liệu theo yêu cầu
Khi phương thức GetData của đối tượng DataObject trên đối tượng đích để nhận
dữ liệu ở một dạng nào đó, Visual Basic kích hoạt biến cố OLESetData trên đối
tượng nguồn. Lệnh viết cho biến cố OLESetData trên RichTextbox của ví dụ trên như sau:
Private Sub rtfText_OLESetData(Data As RichTextLib.DataObject, _ DataFormat As Integer) If DataFormat = vbCFText T e h n If rtfText.SelLength Then
Data.SetData rtfText.SelText, vbCFText Else Data.SetData rtfText.text, v bCFText End If ElseIf DataFormat = vbCFRT F Then If rtf e T xt.SelLength Then
Data.SetData rtfText.SelRTF, vbCFRTF Else Data.SetData rtfText.TextR F T , vbCFRTF End If End If End Sub 5. Kéo-nhả File 166
Giáo trình Visual Basic 6.0
Windows Explorer hỗ trợ kéo nhả tập tin và nhiều ứng dụng windows có thể làm
đối tượng đích cho hoạt động kéo-nhả từ windows explorer. Phần này trình bày
cách thực hiện thao tác kéo-nhả tập tin.
Yếu tố chính của hoạt động này là thuộc tính files của đối tượng DataObject. Nếu
người lập trình muốn ứng dụng làm đối tượn
g đích cho hoạt động kéo-nhả file thì
phải kiểm tra xem đối tượng DataObject có chứa d
ữ liệu ở dạng vbCFFile hay
không . Ví dụ sau minh họa các
h nạp tên tập tin khi người sử dụng nhả tập tin trên Listbox :
If Data.GetFormat(vbCFFiles) Then For i = 1 To Data.Files. o C unt lstFi e l s.AddItem Data.Files(i) Next End If
Sự kiện OLEStartDrag viết sau đây minh họa đối tượng FileListBox làm đối tượng
nguồn cho hoạt động kéo nhả:
Private Sub File1_OLEStartDrag(Data As DataObject, AllowedEffects As L n o g)
Dim i As Integer, path As String
path = File1.path & IIf( i
R ght$(File1.path, 1) <> "\", "\", "") Data.Files.Clear
For i = 0 To File1.ListCoun t- 1 If File1.Selected(i) Then D t
a a.Files.Add path & File1.List(i) End If Next If Data.Files.Count Then Data.SetData , vbCFFile s
AllowedEffects = vbDropEffectCopy End If End Sub
Hình 16.3 là ví dụ giao diện chương trình thực hiện chức năng kéo nhả tập tin.
Cửa sổ phía trên trình bày nội dung tập tin AutoDrop.vbp được kéo-nhả từ
Windows Explorer, còn cửa sổ phía dưới trình bày danh sách tập tin được nhả từ
hộp thoại File ở bên phải. Nguyễn Đăng Quang Giáo trình Visual Basic 6.0 167 Hình 16.3: Kéo nhả file
Bài tập Visual Basic - Phần cơ bản 168 BÀI TẬP PHẦN CƠ BẢN Bai tập 1
Viết 1 form nhập 2 số và bấm nút để cho kết quả phép cộng
Chương trình khi chạy sẽ cho kết quả như sau: Hướng dẫn:
1. Khởi động Visual Basic , chọn New/ Standard EXE
2. Điều chỉnh các thuộc tính của form1 theo nh ư bảng sau: Thuộc tính Giá trị (Value) (Property) Thuộc tính Giá trị (Value) Alignment 1 - Right justify (Property) Name txtTong Name frmTinh Lock True Caption Cong hai so Height 315 Height 2500 Width 735 Width 2800
8. Nhấp đúp CommandButton trên Toolbox.
3. Nhấp đúp Label trên Toolbox để đặt Label lên
Button sẽ xuất hiện chính giữa form. Di
giữa form. Di chuyển và đặt các thuộc tính
chuyển và điều chỉnh các thuộc tính theo bảng theo như bảng sau: sau: Thuộc tính Giá trị (Value) Thuộc tính Giá trị (Value) (Property) (Property) Name Label1 Name CmdTinh Caption Nhap so thu 1 Caption Tinh
4. Làm tương tự như bước 3 với các thuộc tính Height 330 theo như bảng sau: Width 1335 Thuộc tính Giá trị (Value)
9. Nhấp đúp CommandButton đ ể viết lệnh cho (Property)
chức năng tính toán khi người dùng bấm vào Name Label2
nút này. Cửa sổ lệnh sẽ xuất hiện với phần Caption Nhap so thu 2
khai báo thủ tục khi bấm nút được định nghĩa
5. Nhấp đúp Textbox trên Toolbox. Textbox th ứ sẵn:
nhất sẽ xuất hiện chính giữa form. Di chuyển Private Sub CmdTinh_Click()
và điều chỉnh các thuộc tính theo bảng sau: Thuộc tính Giá trị (Value) End Sub (Property) Alignment 1 - Right justify
Nhập lệnh để cuối cùng ta có Name txtSo1 Private Sub CmdTinh_Click() Height 315 txtTong.Text = Val(tx tSo1.Text) + Width 735 Val(txtSo2.Text)
6. Nhấp đúp Textbox trên Toolbox. Textbox th ứ End Sub
hai sẽ xuất hiện chính giữa form. Di chuyển
10. Bấm nút Run trên Toolbar hoặc F5 để chạy
và điều chỉnh các thuộc tính theo bảng sau:
chương trình. Nhập 2 số vào 2 text box. Bấm Thuộc tính Giá trị (Value)
nút tính. Kết quả cộng 2 số xuất hiện trong ô (Property) thứ 3.
11. Chọn File/Save Project để save các tập tin của Alignment 1 - Right justify chương trình như sau: Name txtSo2 FrmTinh.FRM Tập tin định nghĩa form Height 315 frmTinh) Width 735 Vd1.VBP
Tập tin định nghĩa dự án)
7. Nhấp đúp Textbox trên Toolbox. Textbox th ứ
ba sẽ xuất hiện chính giữa form. Di chuyển và
điều chỉnh các thuộc tính theo bảng sau:
Thử thay đối các property sau và quan sát các thay đổi trên form Appearance -> Flat
BackColor – Đổi màu nền form
BorderStyle – Thay đổi các dạng viền form
Bài tập Visual Basic – Phần căn bản 169 Bài tập 2
Thiết kế chương trình kiểm tra thuộc tính Alignment của Label bằng cách sử dụng đối tượng Option Button.
Chương trình khi hoạt động có dạng:
Khi click mouse vào 1 trong 3 option Left, Center, Right , Caption của Label sẽ được thay đổi tương ứng Hướng dẫn 1. Chọn New/Standard EXE
2. Đặt các thuộc tính cho form nh ư sau: Thuộc tính Giá trị Name frmMain Caption Bai tap 1 BorderStyle 1 – Fixed Single Control Box False
Định nghĩa mã lệnh cho các sự kiện Form_Load
3. Đặt Label với các thuộc tính
(Khi nạp Form), OpClick (Khi click các Option Thuộc tính Giá trị Private Sub Form_Load() Name lblNotify OpLeft.Value = True Caption End Sub BorderStyle 1 – Fixed Single
4. Đặt Frame với các thuộc tính Private Sub CmdClose_Click() Thuộc tính Giá trị Unload Me Name Frame1 End Sub Caption Label alignment Private Sub OpLeft_Click()
5. Đặt các Option Button trong Frame với Name
lblNotify.Caption = "Label is justified
và Caption lần lượt như sau: left" Thuộc tính Giá trị lblNotify.Alignment = 0 Name OpLeft End Sub Caption Left Name OpCenter Private Sub OpRight_Click() Caption Center
lblNotify.Caption = "Label is justified Name OpRight Caption Right right"
6. Đặt CommandButton với các thuộc tính sau lblNotify.Alignment = 1 Thuộc tính Giá trị End Sub Name CmdClose Caption Close Private Sub OpCenter_Click()
lblNotify.Caption = "Label is justified center" lblNotify.Alignment = 2 Làm thêm
Điều chỉnh TabIndex của các đối tượng để khi bắt đầu chạy chương trình. Nút Close nhận Focus, sau
đó là các Option Button Left, Center, Right.
Bài tập Visual Basic - Phần cơ bản 170 End Sub Bài tập 3
Viết 1 chương trình thực hiện một máy tính đơn giản gồm các nút bấm +, -, x, / . Nhập 2 số cần tính
và bấm nút tương ứng để cho kết quả trong một Label. Form ch ương trình có dạng như sau: Lưu ý:
Dạng viền của form - Không thay đổi kích thước Font tiếng việt Làm thêm:
Thay các nút bấm phép toán bằng các nút chọn (Option Button) Bài tập 4
Viết chương trình thực hiện 1 form có dạng sau:
Họ tên được nhập vào TextBox
Khi bấm nút Nhập , họ tên nhập vào được cập nhật vào nội dung hiện phía d ưới
Viết lệnh thay đổi chiều cao FORM sao cho khi ch ưa bấm nút cập nhật, chiều cao FORM chỉ
đủ trình bày phần TextBox và bút bấm phía trên.
Bài tập Visual Basic - Phần cơ bản 171 Bài tập 5
Thiết kế chương trình có dạng sau:
Các Option Button dùng để En E a n bl b e l /D / i D sa s ble e h o
h ạt động của Button Show.
Button Exit dùng để kết tt hú h c ú c c hư h ơn ơ g n g t r
t ình nhưng chỉ xuất hiện khi form thứ ha h i a ix u x ất hiện.
Form thứ 2 luôn xuất hiện n b ê b n ê n dư d ới form thứ 1
Hãy viết lệnh để khi bấm nút Exit (kết tth t ú h c ú c ch c ư h ơ ư ng
n trình ), cả 2 form đóng lại. Bài tập 6
Thiết kế chương trình kiểm ể m t r t a r a c á c c á c sự s k i k ệ i n ệ n M o M us u e s M e o M v o e, e ,Mo M u o s u eD e o D w o n w n t r t ê r n ê n f o f r o m r : m ấ ệ ầ ầ ẽ ằ ở ữ ọ ộ ở ướ ả ển mouse trên form ươ ẽ ự ệ ặc phải ược bấm ướ ẫ 1. Đặ ự ể ị ị ủ 2. ự ệ ố ứ
ị ạ ộ xảy ra sự kiện 3. ự ệ ố ứ ị ủ ấ ả
Bài tập Visual Basic - Phần cơ bản 172 Bài tập 7 Viết chương trình nhập ậ p họ h ọ tê t n ê , n ph p á h i á ivà v ng n à g y à y thá h n á g n
g n ăm sinh của một người. Chươ ư n ơ g n g tr t ình sẽ thông
báo tuổi và nhân xưng của người đó đ ó th t e h o e
o t uổi. Thang phân loại như sau: Nam: Tuổi Nhân xưng 1-10 Cháu 11-17 Em 18-34 Anh 35-70 Ông 71- Cụ Nữ Tuổi Nhân xưng 1-10 Cháu 11-23 Em 24-30 Chị 31-65 Bà 66- Cụ Lưu ý: Chương trình có kiểm ể m tr t a r a dữ d ữ lilệ i u ệ u n h n ậ h p ậ p ng n à g y y th t á h n á g n g và v à th t ô h n ô g n g bá b o á o lỗi nế n u ế u dữ ữ liệu u nh n ậ h p kh k ô h n ô g n hợp lệ bằng hàm MsgBox. Phái nhập được ợ c c họ h n ọ n bằ b ng n g c ác c O p O t p ion n But u tto t n o Địn ị h n h n g n h g ĩ h a a Ta T b a s b t s op o p và v h o h t o k t e k y e y c h c o h o c á c c á c ô ô n h n ậ h p ậ p dữ d ữ l ilệu ệ Sử dụng lệnh End để ể kế k t ế t h t ú h c ú c c h
c ương trình thay vì dùng lệnh Unload Me Bài tập 8
Viết chương trình giải và biện luận phươ ư n ơ g n g t r
t ình bậc 2. Chương trình có kiểm ể t ra r a dữ d ữ lilệu ệ u nh n ậ h p ậ . p .Cá C c á thông báo lỗi ỗ ivà v à t hô h n ô g n g bá b o á o k ế k t ế tq u q ả u ả sử s ử d ụ d n ụ g n g M s M g s B g o B x o Bài tập 9
Viết chương trình kiểm tra hoạt độn ộ g n g củ c a ủ cá c c á c vò v n ò g n g lặ l p ặ p Fo F r o . r .N . e N x e t x ,t ,Do D o Whi h lie l .. Lo L op và v à Do D . o .Un U t n il bằn ằ g n g cá c c á h c h t h t i h ế i t ế tkế k ế for o m r m có c ó d ạ d n ạ g n g hì h nh n h bê b n ê : n
Mỗi nút bấm sẽ làm xuấ t hiện ệ n 20 2 0 dò d n ò g n
trong textbox bên trái mô t ả ả lo l ạ o i ạ ivò v n ò g n g lặ l p ặ sử dụng Mã lệnh địn ị h n h ng n h g ĩ h a ĩ a cho o Butto t n o n Fo F r o . r ..N . e N x e t x như sau. Private Sub cmdFor_Click() Dim strBegin As String Dim strEnd As String Dim strMsg As String Dim i As Integer strBegin = "This is line #"
strEnd = " of a For..Next Loop" For i = 1 To 20 strMsg = strMsg & strBegin strMsg = strMsg & i st s r t M r s M g s g = = st s r t M r s M g s g & & s t s r t E r n E d n d & & v b v C b r C L r f L txtReport.Text = strMsg Next I End Sub
Bài tập Visual Basic - Phần cơ bản 173 Bài tập 10 Viết chương trình tạo ạ o fo f r o m r m có c ó dạ d n ạ g n g sa s u a . u .mà m u à u tô t ô (F ( i F lill lCo C l o o l r o ) r ) và v mẫ m u tô (F ( i F lill lSt S yl y e l ) của Shape bên ê trái thay đổi ổ ith t e h o o gi g á i á t rị r ịc h c ọ h n ọ n tr t o r n o g n g cá c c á c Op O tio i n o n Bu B t u tton Bài tập 12
Viết chương trình máy tính số nguyên đơn giản bằng cách sử dụng mảng đối tượng điều ề u khi h ể i n Bài tập 13
Viết chương trình thực hiện một chươ ư n ơ g n g tr
t ình soạn thảo văn bản đơn giản, chương trìn ì h n h ch c o h o ph p é h p é
thực hiện các chức năng tìm ì m ( F ( i F nd n ) d ) v à v à t h t a h y y th t ế (Replace) Bài tập 14
Viết chương trình quản lý lươ ư n ơ g n g đơ đ n ơ n gi
g ản bằng cách thiết kế form có dạng sau:
Bài tập Visual Basic - Phần cơ bản 174 Yêu cầu: Họ tên nhân viên được ợ c n h n ậ h p ậ p v à v o à o te t xtbox Họ tên
Chức vụ nhân viên được ợ c c h c ọ h n ọ n t ro r n o g n g c ombo b o bo b x o Chức vụ Mỗi ỗ i kh k i h i ch c ứ h c ứ vụ v ụ nhân n vi v ê i n
ê được chọn. Mức lương tương ứn ứ g n g xu x ấ u t ấ hiệ i n ệ n tr t o r n o g n g hộ h p ộ Lương Khi bấm nút Nhập, ,n h n â h n â n v i v ê i n ê n m
ới được nhập vào ListBox bên trái Tổng lương của ủ a cá c c c nh n â h n n vi v ê i n ê n tr t o r n o g n g da d nh n h sá s ch h nh n ập được ợ c trì r nh n h bà b y à y tr t o r n o g n g tex e t x bo b x o x To T n o g n . g Giá trị này được ợ c c ậ c p p nhậ h t ậ tn g n a g y a y s a s u u kh k i h ida d nh h sá s ch h n h n ậ h p p có ó th t a h y đổi.
Các nút bấm >> và << để ể c hu h y u ể y n ể n nh n â h n â n vi v ê i n ê n ra r a hoặc c và v o da d nh n s á s c á h c . h .Mỗ M i ỗ ikh k i h icó ó thay đổi,
giá trị tổng phải được ợ c c ậ c p ậ p n h n ậ h t. Thêm vào 2 nút bấm ấ m Up U , p ,Do D w o n w để ể kh k i h ibấ b m ấ m nú n t ú tUp U , p ,ph p ầ h n n tử t ử tại ạ ivị v tr t í r íhộ h p ộ p sán á g n được dời lên phía trên; khi bấm ấ m nú n t ú D o D w o n w , n ph p ầ h n ầ n t ử ử t ạ t i vị v ịt r t í r íh ộ h p ộ p s á s n á g n được ợ c dờ d i ờ xu x ố u n ố g n g p h p í h a í dưới.
Bảng chức vụ và mức lươ ư n ơ g n g ch c o h o n h n ư h ư s au: u Chức ứ c v ụ v Mức lương Gi G ám á m đốc 15.000.000 P. P Gi G á i m á m đ ốc 8.000.000 Trưởn ở g n g ph p ò h n ò g n 7.500.000 Ph P ó h ó ph p ò h n ò g n 6.000.000 Nh N â h n n v i v ê i n ê 5.000.000 Bài tập 15
Thiết kế chương trình có giao diện như ư s a s u a : u Yêu cầu
Khi chưa nhập họ tên, nút Nh N a h p a ở trạng thái Disable. Khi bấm nút Nhap, , tê t n ê n nh n â h n â n vi v ê i n ê n và v , à ph p á h i nhập ậ p và v o à o Li L s i t s bo b x o , x , dò d n ò g n g tr t ạ r n ạ g n g th t á h i á d ưới form
thông báo tổng số nhân viên đã ã nh n ập. Sau khi bấm nút Nhap, ,ho h o t ê t n ê
n được xoá trắng và textbox Ho ten nhận focus. Khi bấm ấ m n ú n t ú tD a D nh n h s á s c á h c h n h n â h n â n v i v ê i n ê n N a N m/ m Nữ, ữ ,f orm t h t ứ h ứ hai a x u x ấ u t ấ th iệ i n ệ vớ v i lils i t s b t o b x ch c ỉ h ỉc ó ó t ên c ác á nhân viên Nam/Nữ
Bài tập Visual Basic - Phần cơ bản 175 Bài tập 16
Định nghĩa thêm các chức n ăn ă g n g sa s u u c ho chư h ơ ư n ơ g n g t r
t ình trộn màu trong ví dụ: Người ờ idù d n ù g n g nh n ậ h p ậ p gi g á i á tr t ị r ịm à m u u và v o à o t e t xt x bo b x. x Gi G á i á trị r nà n y y ph p ả h n ả n ảnh h ng n a g y a y tr t ê r n ê n tha h nh n h cuộn ộ t ương ứng.
Thêm check box In Sync. M ỗi ỗ i kh k i
h được check, các giá trị màu RGB sẽ ẽ lu l ô u n ô n lu l ô u n ô n gi g ốn ố g
nhau. Mỗi khi một thanh cuộn đư
đ ợc kéo, các thanh cuộn khác cũng di chuyển t ươ ư n ơ g n ứng. Bài tập 17
Đồng hồ góc dưới bên phải đư đ ợc cập nhật theo giờ hệ thống Textbox Timer Interval nh ập ậ p kh k o h ả o ng n g th t ờ h i ờ i gi g an đếm cho Label phía dưới ớ .i .Sa S u a u mỗi ỗ ikh k oảng thời
gian, bộ đếm được cập nhật.
Nút Start/Stop timer khởi độn ộ g n / g /ng n ưng bộ đếm Bài tập 18
Mở rộng bằng cách thêm vào form các đối tượng DriveListBox, DirListBox,
FileListBox. Cho phép ngư ời
dùng duyệt cây thư mục để
lựa tập tin ảnh cần xem. Bài tập 19
Sử dụng đối tượng Timer, viết chươ ư n ơ g n g trình tạo
một trái bóng chuyển động trên form. Hướng dẫn:
Vẽ trái bóng bằng đối tượn ợ g n g Sh S a h pe p e vớ v i ớ property Shape = Circle Trái bóng chuyển độn ộ g n g bằ b ng n g cá c c á h h t h t a h y a đổi
các thuộc tính Left và Top của ủ đối tượng Shape
Bài tập Visual Basic - Phần thuật toán 176
PHẦN BÀI TẬP VỀ THUẬT TOÁN
Bài 1 : Viết chương trình tính tổng T = 1 + 2 + … + N, với N là số nguyên 0, nếu N=0 thì T=0.
Giao diện tự thiết kế cho phù hợp.
Bài 2 : Viết chương trình tính tổng T = 1 - 2 + 3- 4 + … (-1)N+1N, với N là số nguyên 0, nếu N=0
thì T=0. Giao diện tự thiết kế cho phù hợp.
Bài 3 : Viết chương trình nhập một số nguyên dương có 3 ch ữ số, viết ra màn hình dạng: trăm,
chục, đơn vị. Ví dụ, nhập vào số : 246, kết quả cho là : 2 Trăm 4 chục 6 Đơn vị. Giao diện tự thiết kế cho phù hợp.
Bài 4 : Viết chương trình cho phép nhập vào một số và kiểm tra số đó có phải là số nguyên tố hay
không. Giao diện tự thiết kế cho phù hợp.
Bài 5 : Viết chương trình nhập 3 số và tìm ra số lớn nhất giữa ba số số. Giao diện tự thiết kế cho phù hợp.
Bài 6 : Viết chương trình cho phép nhập vào (quy định trước) : số hạng đầu tiên, công bội của một
cấp số nhân, giao diện tự thiết kế cho phù hợp. Cho phép người dùng tìm ra :
a. Số hạng bất kỳ của nó.
b. Tổng của n số hạng đầu tiên của nó.
Bài 7 : Viết chương trình cho phép nhập vào 2 số a và b, giao diện tự thiết kế cho phù hợp. Tìm a. USCLN
b. Tìm và in ra phân số tối giản của a/b (ví dụ a= 6, b = 12 thì in ra : a/b = ¾)
Bài 8 : Viết chương cho phép nhập vào một mảng A gồm 7 phần tử, thực hiện các yêu cầu sau (
Giao diện tự thiết kế cho phù hợp, có thể tham khảo giao diện bên dưới): a. Tính tổng mảng.
b. Tính giá trị lớn nhất.
c. Tính giá trị nhỏ nhất.
d. Đếm số lần xuất hiện của x (với x nhập từ bàn phím).
Bài tập Visual Basic - Phần thuật toán 177
Bài 9 : Viết chương trình cho phép nhập vào một mảng A có 7 phần tử và sắp xếp mảng A đó
theo thứ tự tăng dần, giảm dần. Giao diện tự thiết kế cho phù hợp.
Bài 10 : Viết chương trình nhập vào mảng A gồm n phần tử (n nhập từ bàn phím). Kiểm tra mảng
A có đối xứng hay không? Giao diện tự thiết kế cho phù hợp.
Bài 11 : Viết chương trình nhập vào mảng A gồm n phần tử (n nhập vào từ bàn phím). Kiểm tra
mảng là tăng hay giảm hay không tăng không gi ảm. Giao diện tự thiết kế cho phù hợp.
Bài 12 : Viết chương trình nhập vào một câu không quá 50 ký tự. Đếm xem trong câu có bao nhiêu
chữ “Pascal”. Giao diện tự thiết kế cho phù hợp.
Bài 13 : Viết chương trình nhập vào một câu có không quá 50 ký t ự. Giao diện tự thiết kế cho phù hợp.
a. Đếm xem trong câu có bao nhiêu ký t ự là số.
b. Tính tổng các chữ số trong câu.
Bài 14 : Viết chương trình nhập vào một câu, đếm xem trong câu có bao nhiêu ch ữ hoa, bao nhiêu
chữ thường. Giao diện tự thiết kế cho phù hợp.
Bài 15 : Viết chương trình nhập vào một câu, tìm xem trong câu vừa nhập có chứa chuỗi “em”
không, nếu có thì thay chuỗi “em” thành chuỗi “anh”. Nếu không có thì thông báo là không có.
Giao diện tự thiết kế cho phù hợp.
Bài 16 : viết chương trình nhập vào một câu bất kỳ, in lại câu đó với mỗi từ trên một dòng. Giao
diện tự thiết kế cho phù hợp.
Bài 17 : Viết chương trình nhập vào một chuỗi, đảo ngược chuỗi và xuất ra màn hình. Ví dụ nhập
vào câu : “Tin Hoc”, in ra là : Hoc Tin. Giao di ện tự thiết kế cho phù hợp.
Bài 18 : Viết chương trình nhập vào mảng A nguyên 10 phần tử. Việc nhập sẽ được kiểm tra với
điều kiện các phần tử của mảng phải lớn hơn 0. sau đó thực hiện các công việc sau (Giao diện tự thiết kế cho phù hợp) :
a. In mảng theo thứ tự ngược lại với thứ tự đã nhập.
b. In ra màn hình các giá trị nguyên dương chia hết cho 2.
c. Tìm và in ra các phần tử lớn nhất và nhỏ nhất của mảng.
d. Tìm các số nguyên tố trong khoảng từ min tới max. e. Tính max!.
f. Tìm ucln và bcnn của min và max.
Bài 19 : Viết chương trình giải phương trình bậc 2: ax2 + bx + c =0. Với yêu cầu giao diện như sau -
Cho phép nhập trực tiếp các giá trị a, b, c -
Cho phép thay đổi giá trị a, b, c (nguyên) bằng các thanh cuộn -
In kết quả giải tương ứng với tất cả các trường hợp.
Bài 21 : Viết chương trình nhập vào 2 số nguyên a, b, Giao diện tự thiết kế cho phù hợp :
Bài tập Visual Basic - Phần thuật toán 178
a. Tính tổng các số trong khoảng từ a tới b.
b. Tính tổng các số lẻ trong khoảng từ a tới b.
c. Tính tổng các số chẵn trong khoảng từ a tới b.
Bài 22 : Viết chương trình quản lý một công ty với yêu cầu:
Họ tên nhân viên được nhập vào textbox Ho ten.
Chức vụ nhân viên được chọn trong combox Chuc vu.
Mỗi khi chức vụ nhân viên được chọn mức lương tương ứng xuất hiện ở textbox Luong.
Khi nhấn nút Nhap, nhân viên mới được nhập vào ListBox Danh sach nhan vien.
Xoá một nhân viên được chọn trong danh sách bằng nút, Xoa. Chọn Multiselect= 0
Tong: tổng lương trong danh sách. Được cập nhật mỗi khi danh sách có thay đ ổi.
Bài 23 : Viết chương trình phân tích một số nguyên dương nhập vào ra các thừa số nguyên tố của
nó. Giao diện tự thiết kế cho phù hợp.
Bài 24 : Viết chương trình đổi một số nguyên dương nhập vào ở hệ thập phân sang nhị phân. Giao
diện tự thiết kế cho phù hợp.
Bài 25 : Viết chương trình đổi một số nguyên dương nhập vào ở hệ thập phân sang hệ bát phân.
Giao diện tự thiết kế cho phù hợp.
Bài 26 : Viết chương trình đổi một số nguyên dương nhập vào ở hệ thập phân sang hệ thập lục
phân. Giao diện tự thiết kế cho phù hợp.
Bài 27 : Viết chương trình đổi một số nhị phân cho trước (nhập vào) sang hệ thập phân. Giao diện
tự thiết kế cho phù hợp.
Bài 28 : Viết chương trình đổi một số bát phân cho trước (nhập vào) sang hệ thập phân. Giao diện
tự thiết kế cho phù hợp. 179
Bài tập visual basic phần data BÀI TẬP Ậ P T RU R Y U Y XU X Ấ U T
Ấ CƠ SỞ DỮ LIỆU BẰNG DATACONTROL
Để thực hiện các bài tập dưới đâ đ y,
y ,sử dụng các cơ sở dữ liệu - No N r o t r h t w h i w n i d n d (N ( W N I W N I D N . D MD M B D ) B - Biblio (BIBLIO.MDB) Th T ê h m m Ac A t c itve v X Co C n o t n r t o r l o lM S S Da D t a a t b a o b u o n u d n Grid Control vào Project Th T ê h m m Ac A t c itve v X Co C n o t n r t o r l o lM S S Da D t a a t b a o b u o n u d n d L i L s i t s tC o C n o t n r t o r l và v o à o Pr P o r jec e t c
Bài tập 1: Sử dụng Text box để ể du d y u ệ y t tv à v à c hỉ h n ỉ h n h sử s a ử a d ữ d liệ i u ệ Thiết ế tkế k ế fo f r o m r m d u d y u ệ y t ệ ttậ t p ậ p titn Em E p m l p o l y o e y e e chứ h a ứ a t r t o r n o g n g c ơ sở ở dữ d ữ l iệ i u ệ u A c A c c e c ss N W N I W N I D N . D m . d m b d Đối tượng Thuộc ộ tí t nh n Giá trị Form Name FrmData Caption Bound Browser Data Name DatEmployees Caption Employees Da D ta t b a as a e s N e a N me m <> NWIND.MDB Re R co c r o dS d o S u o r u ce c Employees TextBox Name TxtLastName DataField LastName DataSource DatEmployees TextBox Name TxtFirstName DataField FirstName DataSource DatEmployees TextBox Name TxtBirthDate DataField BirthDate DataSource DatEmployees TextBox Name TxtEmployeeId DataField EmployeeID DataSource DatEmployees Enabled False Label Name Label1 Caption Employee: Label Name Label2 Caption Birth Date: Label Name Label3 Caption Employee ID: 180
Bài tập visual basic phần data - Bấm F5 để ể ch c ạ h y ạ y ch c ương trình. Sử ử dụ d n ụ g n g các á c nú n t t Ne N x e t x ,t , Pr P e r v e io i us u s củ c a DataControl để ể du d y u ệ y t txe x m dữ d ữ l iệ i u ệ . u - Tr T o r n o g n g qu q á u á tr t ì r n ì h n h xe x m e ,
m ,thử điều chỉnh dữ liệu ệ , u di d ichu h y u ể y n ể n sa s n a g n g mẫ m u ẫ u tin i n mới,i rồi quay trỏ lại để ể xe x m e kế k t ế tqu q ả u .
ả Để ý là dữ liệu được c cậ c p p nhật tsa s u a u khi h idi chuyển ể n s a s n a g n g m ẫ m u ẫ u t itn i n m ớ m i.i - Điều ề u ch c ỉ h nh n h th t u h ộ u c ộ c títn í h n h Re R adOnly y th t à h nh True. Để ể ý ý là l dữ d ữ lilệ i u u kh k ô h n ô g g th t ể h thay đổi được. - Thay đổi ổ icá c c á c g i g á i á t r t ị r ịc ủa ủ a t h t u h ộ u c ộ c t ítn í h n h EO E F
O Action để xem tác dụng. - Tập ậ p titn i n Em E p m l p o l y o e y e e s e s có c ó Fi F e i l e d l d Ph P o h t o o t o chứa ứ a hì h n ì h n h ản ả h n h củ c a ủ a nhâ h n â n vi v ê i n, n thê h m đối tượng điều ề u kh k i h ể i n n lê l n n fo f r o m
r để có thể xem được hình ảnh này.
Bài tập 2: Sử dụng DBCombo Tạo ạ o fo f r o m r m d u d y u ệ y t ệ tb ả b n ả g n g Ti T tilte l e vớ v i P u P b u l b ils i h s e h r e s r ’ s ’ I D I D v à v à N a N m a e
m được lấy từ bảng Pu P b u l b ilshe h r e Đối tượng Thuộc tính Giá trị Data1 Connect Ac A c c e c s e s s DatabaseName Bi B bl b ilo. o m . d m b d Recordsettype 0-dbOpenTable RecordSource Ti T tltes e Data2 Connect Ac A c c e c s e s s DatabaseName Bi B bl b ilo. o m . d m b d Recordsettype 2-dbOpenSnapshot RecordSource SE S L E E L C E T C T Pu P b u I b D, D Na N m a e e FR F O R M O M Pu P b u l b ils i h s e h r e s s OR O DE D R E R BY B Pu P b u I b D I TextBox Name Tx T t x T t i T tile Datasource Da D t a a1 a DataField Ti T tlte 181
Bài tập visual basic phần data TextBox Name TxtYear Datasource Data1 DataField Year Published TextBox Name TxtISBN Datasource Data1 DBCombo Name DBCombo1 Datasource Data1 DataField PubID Rowsource Data2 BoundColumn PubID ListField Name
Điều chỉnh lại form để xem thêm thông tin về tên tác giả của mỗi quyển sách (lấy từ
tập tin Authors và Field AU_ID)
Bài tập 3: Sử dụng Listview để xem nội dung cơ sở dữ liệu -
Thiết kế form xem tập tin Employees gồm các vùng EmployeeID, FirstName,
LastName, BirthDate, HomePhone. -
Thêm chức năng sửa chữa , cho phép người dùng hiệu chỉnh các vùng trên trừ
EmployeeID. Cập nhật thay đổi trong cơ sở dữ liệu và listview -
Thêm chức năng xoá một mẫu tin. Cập nhật thay đổi trong cơ sở dữ liệu và listview
Hướng dẫn: Sử dụng lệnh để -
Mở cơ sở dữ liệu NWIND.MDB - Mở recordset -
Duyệt cơ sở dữ liệu để thêm (Add) các vùng cần xem của mỗi mẫu tin vào listview
Bài tập 4: Sử dụng DBGrid để xem nội dung cơ sở dữ liệu
Thiết kế form xem nội dung tập tin Titles (các tựa sách) từ c ơ sở dữ liệu BIBLIO.MDB
Thêm ComboBox chọn nhà xuất bản (Publisher) để người dùng có thể chọn chỉ xem
các tựa sách theo một nhà xuất bản
Thêm ComboBox chọn tác giả (Authors) để người dùng có thể chọn chỉ xem các tựa sách theo một tác giả.
Bài tập Visual Basic - Phần nâng cao 182 BÀI I TẬP PHẦN NÂNG CAO Bài tập 1
Viết chương trình vẽ đồ ồ thị h h à h m m số ố y= y s = in( n x ( ) x ) tro r ng n đoạn [-Pi, Pi]
Mã lệnh định nghĩa cho nút Draw Const pi = 3.141593 With Picture1 .ScaleLeft = -(.(Sc S al a e l Wi W dt d h t h / 2 ) 2 .ScaleTop = -(.(Sc S al a e l He H i e g i ht h / /2 ) 2 End With
kx = Picture1.ScaleWidth / (2 * pi p ) i ky = Picture1.ScaleHeight / 2 For i = -pi To pi Step 0.2 Picture1.Line -(kx * i, -ky k * * S i S n( n i) i ) Next i Làm thêm:
Thay đổi đoạn vẽ đồ thị
Thay đổi màu vẽ, kiểu nét vẽ, độ dà d y à y n é n t é vẽ Th T êm ê các á c Te T xt x Bo B x tr t ê r n ê n fo f r o m, m ,cho h o ngư
g ời dùng nhập phạm vi và số điểm cần ầ n vẽ. Chương trình tự độn ộ g n g v ẽ ẽ l ại ạ t h t eo o cá c c c gi g á i tr t ị n hậ h p v à v o à Thử vẽ đồ ồ t h t ị h c ủ c a ủ m ột ộ h à h m s ố ố kh k á h c á Bài tập 2 Viết chương trình vẽ ẽ t ự d o o bằ b ng n Mou o se s . - Bấm phím trái để ể v ẽ ẽ kh k u h n u g n g c h c ữ ữ nh n ậ h t ậ - Bấm phím phải để ể vẽ v ẽ hì h nh n h ch c ữ nh n ậ h t t(k ( h k u h n u g có tô nền) Màu vẽ được gán ngẫu ẫ u n hiên ê n c h c o h m ỗi ỗ l ầ l n ầ v ẽ v Bài tập 3 Viết chương trình vẽ ẽ hì h nh n h th t eo e o kiểu ể u bài tập p 2. 2 Chương trình sử ử d ụn ụ g g m e m nu n g ồm ồ c ác á c h c ứ h c c n ăng : - Chọn ọ ki k ểu ể u h ì h nh n h v ẽ v ( me m nu n u D r D aw a ) w - Các tuỳ ỳ c họ h n n v ề ề m àu à u né n t v ẽ, ẽ ki k ểu u né n t é v ẽ ẽ và à bề dà d y y né n t é vẽ v - Cá C c á c me m nu Dr D aw a w và à Op O titon
o s có thể chọn làm Popup menu khi bấm ấ m ph p í h m phả h i ả ichu h ột ộ tr t ên n Pi P ctu t r u e r Bo B x - Chương trình cho phép lưu ư
u hình đã vẽ lên tập tin và đọc tập tin ảnh vẽ vào để sửa chữa. Sử
dụng Common Dialog để t hực ự c hiệ i n n ch c ứ h c c năng này.
Bài tập Visual Basic - Phần nâng cao 183 - Sau khi làm xong thử ử t ha h y y lện ệ h n h chọ h n n mà m u u bằ b n ằ g g hộ h p p t hoạ o i chọn màu à u t r t ong g C om o mon o D ia i log o Bài tập 4
Viết chương trình nhập dữ liệu về đội tuyển bóng đá thế ế gi g ới.i . Thô h n ô g n g titn n về v ề mỗi ỗ cầ c u u thủ h gồm Mã số Họ tên Quốc tịch
Dữ liệu ghi lên tập tin v ăn bản ả n theo e o dạ d n ạ g g ch c o h ở hình dưới
Dử dụng NotePad hoặc Wordpad để ể x em e l ại inộ n i dung vừa tạo Bài tập 5
Viết chương trình đọc một tập văn bản ả và cho o hi h ện ệ kết tqu q ả
lên một TextBox nhiều dòng bằng 2 cách: - Sử dụng lệnh Line Input -
Sử dụng hàm Input và hàm Split
Tập tin được chọn bằng hộp thoại Open Bài tập 6 Tạo ạ o m ộ m t ộ tIm I a m ge g L e ist s tgồ g m m cờ c c ủa ủ a mộ m t ộ s ố s q u q ố u c ố c g i g a a nh n ư hình trên
Viết chương trình nhập dữ liệu đội ộ t uyể y n ể n bó b n ó g n đá thế ế giới ớ g iốn ố g bài t ập p 4. 4 Da D nh n s ác á h c ác á cầ c u thủ h n hập ậ trình bày trong Listview Yêu cầu:
Quốc tịch cầu thủ được ợ c h c ọ h n ọ n bằ b ng n g Imag a e g C e omb m o b o vớ v i ớ da d nh n h s ách c h ì h nh n t r t ên Có thể thay đổi ổ c ác á h h trì r nh h bà b y y listvi v ew e bằ b n ằ g g lện ệ h h Vi V ew w ( La L r a ge g e Ic I on o , ,Small lIc I o c n o , n ,Li L st, R ep e or o t r ) trên menu Danh sách được ợ c sắp ắ p x ếp ế t heo e o c ột ộ kh k i h b ấ b m ấ v à v o à t itêu ê đề cột Nút xoá dùng xoá một ộ ph p ầ h n n tử t t r t on o g Listview Chương trình n c h c o o gh g i h id a d nh h s ác á h c h n h
n ập lên tập tin văn bản ả n the h o dạ d ng n ở b ài à t ập p 4 ( Fi F le/ e Sav a e)
Bài tập Visual Basic - Phần nâng cao 184 Bài tập 7 Bổ sung thêm bài tập 6 Toolbar gồm các nút: New Xoá danh sách nhập Open
Đọc danh sách từ tập tin Save Ghi danh sách nhập ậ p l ên ê n t ậ t p ậ p t in Delete Xoá một ộ c ầ c u ầ u t h t ủ h ủ t r t o r n o g n g d an a h n h s ách c Large, Nhóm nút thay đổi ổ i cách c h tr t ìn ì h n h bà b y Small, Listview List, Detail Hộp DTPicker để ể nh n ập ậ th t ê h m ê thô h n ô g n g tin n về v ngày sinh Chức năng mở (F ( i F le/ e Op O e p n) )ch c o h o phé h p đọc dữ
liệu đã nhập trước đó từ tập tin Bài tập 8 Viết chương trình tạo ạ o mộ m t ộ cấ c u u trú r c ú Tre r e e V e ie i w e w vớ v i 1 nú n t tgố g c c có c nhã h n ã n = = Ro R o o t o vớ v i 10 1 nú n t tcon o có c ó nh n ã h n n là l các số từ 1 đến 10 Bài tập 9 Sử dụng đối tượng n g T re r ev e iew e w trì r nh n h bà b y
y sơ đồ tổ chức của công ty Kova nh ư hình Bài tập 10 Viết chương trinh quản ả n lý ý các á c ch c u h yế y n ế n ba b y y quố u c c tế có c ó g i g ao a o d i d ện ệ n n h n ư hình sau. Yêu cầu:
Dữ liệu chứa trên tập tin văn ă n bản (Tạo bằng NotePad) Dữ liệu được đọc ọ c vào o m ả m ng n g r eco c r o d r
Bài tập Visual Basic - Phần nâng cao 185
Chương trình sử dụng các
nút <-- và --> để duyệt qua các Record
Người sử dụng có thể sủa
chữa nội dung các mẫu tin và
ghi dữ liệu trở lại tập tin
Dung lượng mỗi chuyến bay tính theo phần trăm. Thanh
trượt có thể lấy giá trị trong phạm vi 1-100 % Chương trình sử dụng Toolbar cho các chức năng Open, Save, Next, Previous,
sử dụng StatusBar để thông
báo trạng thái phím , tổng số
mẫu tin, mẫu tin hiện hành Sử dụng ProgressBar để ể thôn ô g n g b á b o o t iế i n t rìn ì h
n đọc và ghi dữ liệu trên tập tin Bài tập 11
Viết chương trình soạn thảo văn bản ả n có
c đầy đủ tính chất của một trình soạn thảo v ăn ă b ản như: Định dạng kiểu ể u c h c ữ h (F ( o F nt n Na N m a e m ) e , cỡ c c h c ữ h ữ (Font n ts iz i e) e , ) ,dá d n á g g c h c ữ ữ ( B ( old, d ,It I alilc, ,U nde d r e lilne n ) e Định dạng đoạn văn: Canh lề trái, lề phải, canh giữa Mở , lưu trữ tập tin dạng txt, rtf Định nghĩa menu cho các chức năng trong chương trình Định nghĩa toolbar cho các chức năng thường sử dụng Định nghĩa Statusbar để thông báo: Giờ hệ thống, trạng thái các phím CAPS, NUM, INS 201 Mục lục Chương 1: GIỚI THIỆU
I. CÁC MÔI TRƯỜNG LẬP TRÌNH. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
II. CÁC ĐỐI TƯỢNG ĐIỀU KHIỂN CHUẨN TRÊN WINDOWS . . . . . . . . . . . .2
III. GIỚI THIỆU VISUAL BASIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1. Khởi động - cửa sổ khởi động. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Màn hình làm việc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
IV. CÁC THAO TÁC CƠ BẢN VỚI ĐỐI TƯỢNG TRÊN FORM. . . . . . . . . . . . . . 10
1. Đưa một đối tượng lên form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2. Chọn đối tượng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3. Di chuyển . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4. Hiệu chỉnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5. Xóa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
V. GHI NẠP MỘT VISUAL BASIC PROJECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1. Thêm form mới vào chương trình. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2. Xóa một form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3. Ghi Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13
4. Nạp Project. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5. Tạo Project mới. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
VI. MỘT CHƯƠNG TRÌNH VÍ DỤ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Chương 2: Đối tượng và cách sử dụng đối tượng
I. ĐỐI TƯỢNG. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1. Khái niệm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2. Các đặc điểm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3. Truy xuất . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4. Các thuộc tính chung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5. Các sự kiện chung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 20 2
II. ĐỐI TƯỢNG FORM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
1. Thuộc tính . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2. Phương thức . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
3. Xử lý sự kiện . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
III. ĐỐI TƯỢNG LABEL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1. Thuộc tính . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2. Xử lý sự kiện . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
IV. ĐỐI TƯỢNG TEXTBOX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1. Thuộc tính . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2. Xử lý sự kiện . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
V. ĐỐI TƯỢNG COMMAND BUTTON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
1. Thuộc tính . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2. Xử lý sự kiện . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
VI. FOCUS VÀ THỨ TỰ TAB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
1. Focus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2. Thứ tự TAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3. Phím nóng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4. Ví dụ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24
Chương 3: Kiểu dữ liệu – Hằng – Biến
I. BIÊN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27
1. Định nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2. Khai báo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27
3. Qui tắc đặt tên biến. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27
4. Truy xuất biến . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5. Phạm vi sử dụng biến. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28
6. Biến tĩnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
II. KIỂU DỮ LIỆU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30
III. HẰNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
IV. TOÁN TỬ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 203
V. MỘT SỐ HÀM CHUẨN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1. Hàm đại số . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2. Hàm thời gian. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3. Hàm chuyển đổi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4. Hàm kiểm tra kiểu dữ liệu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
VI. HỘP THÔNG BÁO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Chương 4: Các cấu trúc điều khiển
I. LỆNH ĐIỀU KIỆN IF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
II. LỆNH CHỌN LỰA CASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
III. LỆNH LẶP FOR… NEXT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
IV. LỆNH LẶP DO LOOP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
V. CHƯƠNG TRÌNH CON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1. Chương trình con Sub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2. Hàm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3. Khai báo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Chương 5: Mảng – Chuỗi – Collection
I. MẢNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1. Định nghĩa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2. Khai báo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3. Mảng đối tượng điều khiển. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4. Ví dụ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5. Mảng động và mảng tĩnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6. Một số vấn đề khác . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
II. CHUỖI KÝ TỰ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
1. Khai báo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2. Các hàm xử lý chuỗi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
III. COLLECTION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
1. Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2. Thao tác trên Collection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 20 4
3. Ví dụ khác . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Chương 6: TextBox – ListBox – ComboBox
I. TEXTBOX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
1. Các thuộc tính bổ sung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
2. Sự kiện. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3. Ví dụ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
II. LISTBOX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
1. Các thuộc tính. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
2. Các phương thức . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3. Sự kiện. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4. Một số ví dụ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
III. COMBOBOX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
IV. DRIVELISTBOX, DIRLISTBOX, FILELISTBOX
1. DriveListBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2. DirListBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3. FileListBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
Chương 7: Scrollbar – Image – Timer
I. SCROLLBAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
1. Các thuộc tính. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
2. Sự kiện. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3. Ví dụ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
II. IMAGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
III. TIMER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
1. Thuộc tính . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
2. Sự kiện. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3. Ví dụ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
Chương 8: Truy xuất dữ liệu 205
I. TRUY XUẤT DỮ LIỆU BẰNG ĐỐI TƯỢNG ĐK CÓ KẾT NỐI CSDL. . . . . . . 73
1. DataControl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
2. Các thuộc tính . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
3. Các đối tượng điều khiển có kết nối cơ sở dữ liệu. . . . . . . . . . . . . . . . . . . . . . . . . . 74
4. Sử dụng Databound Listbox và Combobox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5. Sử dụng Databound Grid Control (DBGrid) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
II. TRUY XUẤT DỮ LIỆU THÔNG QUA DATA ACCESS OBJECT . . . . . . . . . . 84
1. Các thao tác cơ bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
2. Các thuộc tính của Recordset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
3. Các thao tác trên Recordset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Chương 9: PictureBox –Xử lý mouse
I. PICTUREBOX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
1. Thuộc tính . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
2. Các phương thức đồ họa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
3. Các thuộc tính qui định đơn vị vẽ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
4. Các lệnh ghi nạp ảnh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
II. XỬ LÝ MOUSE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Chương 10: Menu – Common Dialog
I. Menu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
1. Định nghĩa menu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
2. Viết lệnh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
II. COMMON DIALOG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
1. Hộp thoại Open, Save . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
2. Hộp thoại chọn màu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Chương 11: Kiểu bản ghi – Tập tin
I. KIỂU BẢN GHI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
1. Định nghĩa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
2. Khai báo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
II. TẬP TIN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 20 6
1. Định nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
2. Phân loại. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109
3. Thủ tục truy xuất dữ liệu trên tập tin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
4. Các lệnh trên tập tin truy xuất ngẫu nhiên . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110
III. CÁC LỆNH TRÊN TẬP TIN VĂN BẢN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113
Chương 12: Microsoft Windows Common Controls:
ImageList – Listview – ImageCombo
I. IMAGELIST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117
II. LISTVIEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
1. Các thuộc tính. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118
2. Các thuộc tính của đối tượng ListItem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .120
3. Phương thức . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .120
4. Sự kiện. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
III. IMAGECOMBO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
1. Các thuộc tính. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .123
2. Các thuộc tính của đối tượng ComboItem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124
3. Các phương thức . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Chương 13: Microsoft Windows Common Controls:
Toolbar - Statusbar - Dtpicker
I. TOOLBAR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
1. Sử dụng Toolbar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127
2. Định nghĩa Toolbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
3. Định nghĩa nút Toolbar lúc chạy chương trình. . . . . . . . . . . . . . . . . . . . . . . . . . . 130
II. STATUSBAR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
1. Sử dụng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131
2. Viết lệnh cho StatusBar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
III. DTPICKER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
1. Thuộc tính . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
2. Sự kiện. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 207
Chương 14: Microsoft Windows Common Controls:
Treeview - Updown – Slider – Progressbar
I. TREE VIEW. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
1. Các thuộc tính . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
2. Các thuộc tính của đối tượng Node. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
3. Phương thức . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .141
4. Sự kiện . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
II. UPDOWN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
1. Các thuộc tính . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
2. Sự kiện . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
III. SLIDER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
1. Thuộc tính . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
2. Phương thức . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146
3. Sự kiện . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
IV. PROGRESSBAR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Chương 15: RichTextBox – Form MDI
I. RICHTEXTBOX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
1. Các thuộc tính . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
2. Các phương thức . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
II. SỬ DỤNG RICHTEXTBOX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
1. Chọn dáng vẻ Font chữ bằng nút lệnh trên Toolbar . . . . . . . . . . . . . . . . . . . . . . . 151
2. Chọn Font chữ bằng lệnh trên menu và hộp thoại Font. . . . . . . . . . . . . . . . . . . . . 152
3. Sự kiện SelChange. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
III. SỬ DỤNG CLIPBOARD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
1. Sao chép vào Clipboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
2. Chép dữ liệu từ Clipboard vào văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
3. Cắt dữ liệu vào Clipboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
IV. SỬ DỤNG COMBOBOX CHỌN FONT VÀ CỠ CHỮ TRÊN TOOLBAR . . .154
V. MDI FORM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 20 8
1. Đặc điểm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154
2. Form con MDI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
3. Các thuộc tính và phương thức bổ sung so với form thường. . . . . . . . . . . . . . . . .155
4. Nạp cửa sổ con trong form MDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
5. Tạo ứng dụng MDI bằng Form Wizard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156
Chương 16: Lập trình Drag-and-Drop
I. TỔNG QUAN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159
1. Kéo nhả tự động . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159
2. Kéo nhả điều khiển bằng chương trình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
II. MỘT CHƯƠNG TRÌNH VÍ DỤ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161
1. Khởi tạo hoạt động kéo-nhả . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161
2. Chuẩn bi cho thao tác nhả trên đối tượng nguồn . . . . . . . . . . . . . . . . . . . . . . . . . .162
3. Nhả trên đối tượng đích. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
4. Nạp dữ liệu theo yêu cầu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
5. Kéo nhả File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165