Tải bản đầy đủ (.pdf) (22 trang)

Tài liệu Mẹo vặt Visual basic 6. ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (103.79 KB, 22 trang )

MC LC

Lâm cho Form ln ln hiïån ra mưåt chưỵ vâ cng mưåt cúä 2

Dng Event nâo àïí update Form? 3
Lâm sao ta biïët mưåt Form àậ àûúåc Loaded? 3
Lâm mưåt Form giưëng mưåt Form cố sùén 4
Lâm cho Controls biïën mêët 5
Chổn nhiïìu Controls nhû mưåt nhốm 5
Chổn nhiïìu hâng trong ListBox 5
'Sort' cấc hâng trong mưåt Listbox 6
Sùỉp ngay cưåt nhûäng chûä trong cấc hâng khấc nhau ca Listbox. 6
Drag mưåt hâng tûâ Listbox nêìy bỗ vâo Listbox khấc 6
Lâm sao biïët Drag Source lâ control nâo 7
In nhûäng hâng àûúåc chổn ca mưåt ListBox 8
Bùỉt båc user phẫi click ComboBox àïí chổn mưåt hâng 8
Lâm mưåt Control hiïån ra trïn mổi trang ca Tab Control 8
Sùỉp xïëp thûá tûå cấc TextBox cho Data Entry 9
Lâm sao cho data vâo trong ListBox hay ComboBox 9
Sao khưng thêëy hònh trong CommandButton? 10
Lâm sao àùåt icon lïn Toolbar lâm shortcut cho mưåt menu command ca
VBIDE? 10

Cấc dẩng ca Ngây vâ Thò giúâ 10
Lâm sao àổc tûâ mưåt Text file 14
Lâm sao chûáa vâo mưåt Text file 14
Cấch thûác Log mưåt dûä kiïån vâo mưåt Text file ? 15
Cấch thûác àổc/viïët value ca mưåt Variable tûâ mưåt "ini" file ? 17
Àưíi Enter key ra Tab key 18
Àưíi dẩng MousePointer ra àưìng hưì cất 19


Kiïëm Help cho cấc Functions 19
Dng Docket Dot Matrix Printer 20
Cho Application mưåt Icon 21
VB shorcut Keys 21
Lâm hiïån ra mưåt Form khấc
Giẫ sûã bẩn àang úã trong Form1 vâ mën lâm cho Form2 hiïån ra, hậy sûã dng:
Form2.Show
Khi mën dêëu Form2, dng:
Form2.Hide
Khi mưåt Form àûúåc 'Show' lêìn àêìu tiïn, nố àûúåc 'Load' (cho thânh hònh) vâ
'Show' ngay sau àố. Khi mưåt Form àậ cố rưìi, tûác lâ àậ àûúåc 'Load' rưìi, lc bẩn
'Hide' nố cq•ng giưëng nhû kếo mưåt têëm mân che nố lẩi. Kïë àố, khi bẩn 'Show'
nố cq•ng giưëng nhû múã mân ra, khưng cố gò ẫnh hûúãng Form.
Bẩn cố thïí cho Form biïën mêët bùçng cấch 'Unload' nố, nhû:
Unload Form2
Lêìn túái khi bẩn 'Show' nố, Form sệ àûúåc 'Load' trúã lẩi. Mưỵi khi Form àûúåc
'Load', nố 'execute' sub Form_Load. Form_Load lâ núi bẩn viïët cấc 'statements'
àïí 'initialise' Form, tûác lâ nhûäng gò cêìn phẫi àûúåc sùỉp xïëp cho sùén sâng trûúác
khi Form thânh hònh.
Do àố bẩn phẫi quët àõnh khi nâo dng Unload hay Hide àï? Lâm cho Form
biïën mêët. Nhúá rùçng mưỵi khi Form àûúåc 'Load' thò nố 'initialise' vâ mêët mưåt đt
thò giúâ.
Nïëu bẩn mën lâm cho mưåt Form hiïån ra vâ khiïën nố dânh nhêån têët cẫ
'keystrokes' vâ 'mouse clicks' thò dng:
Form2.Show vbModal
Ngay sau khi Form2 àûúåc 'Show' dûúái dẩng vbModal, nố dânh ngay CPU
process, àïën àưíi statement nùçm ngay dûúái àố trong Form1 cq•ng àúåi cho àïën
khi Form2 biïën mêët bùçng Unload hay Hide múái chẩy tiïëp àûúåc.
Nïëu bẩn mën Form2 hiïån ra trong Modeless (khưng phẫi Modal) nhûng ln
ln nùçm trïn Form1, ngay cẫ khi Form1 trúã thânh active, dng:

Form2.Show ,Me ' Me lâ Form1
Lâm cho Form ln ln hiïån ra mưåt chưỵ vâ cng mưåt cúä

trong Sub Form_Load, dng
Move fLeft, fTop, fWidth, fHeight
Àïí nhúá thûá tûå cấc parameters trong Sub Move hậy nhúá tổa àưå cố X,Y . trong
Sub Move ta nối àïën võ trđ X,Y ( fLeft, fTop) rưìi cúã X,Y (fWidth, fHeight).
Move lâ mưåt method cố thïí àûúåc dng cho Form hay Control vâ rêët hiïåu quẫ.
Nïëu mën Frame1 ln ln nùçm úã àónh trấi, dng:
Frame1.move 0,0
Nïëu mën chưỵ vâ cúã ca Form 'configurable' (user cố thïí thay àưíi) thò chûáa cấc
dûâ kiïån àố trong Registry rưìi àổc fLeft, fTop, fWidth, fHeight tûâ Registry trong
Sub Form_Load. ( xem Function GetSetting )
Àïí cho Form2 hiïån ra bïn phẫi vâ ngang hâng vúái Form1, trom Sub
Form_Load ca Form2 dng:
Sub Form_Load()
Move Form1.Width, Form1.Top
End Sub
Dng Event nâo àïí update Form?
Mưỵi khi trúã lẩi mưåt Form sau khi lâm viïåc úã mưåt Form khấc, ta mën 'update'
mưåt sưë dûä kiïån àang àûúåc 'display' àïí phẫn ẫnh nhûâng thay àưíi vûâa múái xậy
ra.
Àïí code trong Sub Form_Activate.
Lâm sao ta biïët mưåt Form àậ àûúåc Loaded?
Dng Function sau àêy ca Microsoft:
Function FormIsLoaded(MyFormName
As String) As Boolean
' Determines if a form is loaded.
Dim i As Integer


FormIsLoaded =
False

For i = 0 To Forms.Count - 1

If Forms(i).FormName = MyFormName Then
FormIsLoaded = True

Exit Function ' Quit function once form has been found.

End If

Next i
End Function
Ài qua hïët collection ca Forms àïí xem cố Form nâo trng tïn.
Cấch dng:
If FormIsLoaded("Form2") then
MsgBox "Form2 is already loaded"
End If
Khưng cho User Unload Form bùçng cấch click dêëu X
Nhiïìu khi bẩn mën thu xïëp mổi chuån àâng hoâng trûúác khi Unload mưåt Form
nïn bẩn lâm mưåt Exit hay Close button cho user dng. Àïí lâm mêët dêëu X phđa
àónh phẫi, 'set' Property ControlBox ca Form ra False. Nïëu lâm thïë nêìy cố àiïím
bêët lúåi lâ khi 'minimize' Form, ta khưng thêëy icon ca Form. Cố mưåt cấch vêỵn àïí
ngun dêëu X, nhûng khi user click nố thò ta check 'unloadMode' trong Sub
Form_QueryUnload àïí biïët l do tẩi sao Form phẫi unload. Trong Sub
Form_Unload cố thïí 'assign' Cancel ra True àïí 'abort' Unload.
Nïëu bẩn mën khưng cho user minimise Form thò set Property MinButton ra
False.
Lâm mưåt Form giưëng mưåt Form cố sùén

Nhiïìu khi bẩn mën lâm mưåt Form giưëng giưëng mưåt Form àậ cố sùén trong
Project. Thđ d bẩn mën 'duplicate' Form2 àïí lâm nïn mưåt Form3 àïí sau àố
sûäa chûäa nố cht àónh. Bẩn lâm nhû sau:
1.
Múã Form2 ra
2.
Dng Properties àïí àưíi tïn Form2 ra Form3
3.
Dng File | Save As menu command àïí chûáa Form nêìy dûúái tïn
Form3.frm
Bêy giúâ bẩn cố thïm Form3 trong Project, trong khi Form2.frm vêỵn côn àố
nhûng khưng côn thåc vïì Project nûäa. Nïëu bẩn mën cho nố vâo Project trúã
lẩi thò dng Project | Ad File menu command àïí chổn Form2.frm bỗ vâo
Project.
Lâm cho Controls biïën mêët
Bẩn lâm cho mưåt Control nhû Label, Textbox, ListBox .v v biïën mêët bùçng cấch
cho Property 'visible' trúã nïn False, nhû:
TxtName.visible = False
Dng
TxtName.visible = True
àïí lâm Textbox txtName hiïån ra trúã lẩi. Khi mën cho mưåt nhốm Controls
biïën mêët hay hiïån ra cng mưåt lc, chûáa têët cẫ cấc Controls êëy trong mưåt
container nhû Frame hay PctureBox, rưìi chó cêìn lâm cho container êëy visible
hay khưng.
Invisible Control rêët tiïån dng khi ta dng nố àïí chûáa dûä kiïån. Mưåt TextBox tân
hònh cố thïí Databound àïí lùång lệ chûáa data lêëy tûâ mưåt recordField ca current
Record cho bẩn dng. Bẩn cq•ng cố thïí 'assign' (cho nố bùçng) mưåt value vâo mưåt
Control tân hònh. Nïëu Control êëy Databound, value sệ àûúåc viïët vâo database khi
àng lc.
Chổn nhiïìu Controls nhû mưåt nhốm

Chổn nhiïìu Controls rêët tiïån cho viïåc assign mưåt property cho cẫ nhốm qua
Properties Window. Àïí chổn nhiïìu Controls nhû mưåt nhốm bẩn cố thïí 'rubber
band' (qën dêy thun) cẫ nhốm bùçng cấch 'drag' con trỗ thânh mưåt hònh chûâ
nhêåt bao cẫ nhốm lẩi. Nïëu cấc Controls êëy nùçm trong mưåt container nhû
Frame hay Picture box, trûúác hïët bẩn phẫi 'click' Form rưìi kïë àố àê nt 'Ctrl'
xëng trong khi 'rubber band' nhû nối trïn. Mưåt khi cấc Controls trong mưåt
nhốm àậ àûúåc chổn rưìi ta cố thïí dng menu Format command àïí Align (ngang
hâng) chng hay lâm cho chng cng cúã.
Chổn nhiïìu hâng trong ListBox

Mën cho user chổn nhiïìu hâng trong Listbox ta phẫi set Property Multiselct
ca Listbox ra Extended. Sau àố user cố thïí chổn nhiïìu hâng bùçng cấch bêëm
nt Shift hay Ctrl trong khi Click nhûäng hâng. Nhúá lâ nïëu bêëm nt Shift thò
chổn nhûäng hâng liïn tc giûäa hai cấi click, côn bêëm nt Ctrl thò chổn hay
khưng chổn thïm tûâng hâng mưåt.

Mưỵi hâng trong Listbox List1 àûúåc cho thûá tûå tûâ 0 àïën List1.ListCount-1.
Khi hâng i àûúåc selected thò List1.Selected(i) = True.
Mën 'deselect' (khưng chổn) hâng àố thò dng List1.Selected(i) = False.

'Sort' cấc hâng trong mưåt Listbox
Nïëu ta mën nhûäng hâng trong mưåt Listbox àûúåc sorted theo mêỵu tûå
(alphabetical order) thò khi thiïët kïë (at design time) set Property Sorted ca
Listbox ra True. Trong khi xûã l ta khưng thay àưíi value ca Property Sorted
àûúåc. Nïëu mưåt Listbox àậ lúä cố Property Sorted = False mâ ta mën Sort nố
trong khi xûã l thò lâm sao? Bẩn àùåt thïm lïn Form mưåt Listbox khấc. Listbox
nêìy cố Property Sorted = True. Khi nâo mën Sort cấc hâng trong Listbox thûá
nhêët ta lâm nhû sao:
1.
Chếp têët cẫ mổi hâng tûâ Listbox thûá nhêët qua Listbox thûá nhò, cấc

hâng sệ àûúåc sorted tûå àưng trong Listbox thûá nhò.
2.
Clear Listbox thûá nhêët
3.
Chếp mổi hâng tûâ Listbox thûá nhò qua Listbox thûá nhêët.
Nhúá àûâng cho user thêëy Listbox thûá nhò bùçng cấch set Property Visible
ca nố ra False (tân hònh).
Lûu Clear mưåt Listbox trûúác khi cho mưåt sưë hâng múái vâo vâ khưng mën giûä
nhûäng hâng cq• bùçng cấch dng method Clear nhû List1.Clear.

Sùỉp ngay cưåt nhûäng chûä trong cấc hâng khấc nhau ca Listbox
Nïëu mën têët cẫ cấc chûä cưåt thûá 8 ca cấc hâng trong mưåt Listbox àûáng thùèng
hâng chiïìu cao (vertically) bẩn cố thïí set Font ca Listbox ra Courier, mưåt lổai
Fixed Font. Têët cẫ cấc chûä ca Fixed Font nhû Courier àïìu cố cq•ng chiïìu rưång
(character width). Ngûúåc lẩi trong mưåt Proportional spacing Font nhû "MS
Sans Serif" chiïìu rưång ca chûâ 'đ nhỗ hún ca chûâ 'm'. Nïëu bẩn mën dng Tab
trong Listbox thò phẫi gổi mưåt API Function àïí lâm cho Listbox chõu nhêån Tab
(support Tab feature).
Sùỉp ngay cưåt nhûäng chûä trong cấc hâng khấc nhau
ca Listbox.
Nïëu mën têët cẫ cấc chûä cưåt thûá 8 ca cấc hâng trong mưåt Listbox àûáng thùèng
hâng chiïìu cao (vertically) bẩn cố thïí set Font ca Listbox ra Courier, mưåt lổai
Fixed Font. Têët cẫ cấc chûä ca Fixed Font nhû Courier àïìu cố cq•ng chiïìu rưång
(character width). Ngûúåc lẩi trong mưåt Proportional spacing Font nhû "MS
Sans Serif" chiïìu rưång ca chûâ 'đ nhỗ hún ca chûâ 'm'. Nïëu bẩn mën dng Tab
trong Listbox thò phẫi gổi mưåt API Function àïí lâm cho Listbox chõu nhêån Tab
(support Tab feature).
Drag mưåt hâng tûâ Listbox nêìy bỗ vâo Listbox khấc
Giẫ sûã bẩn mën Drag mưåt hâng tûâ List1 bỗ vâo List2 vâ display nố úã cëi
List2.

Ta sệ dng Mousedown Event ca List1 mâ Drag. Khi bùỉt àêìu Drag ta mën
MousePointer àưíi ra hònh mưåt trang giêëy. Do àố ta phẫi Browse directory àïí
cho vâo Property DragIcon ca List1 tïn mưåt Icon File. Bẩn cố thïí vâo Folder
C:Program File\Microsoft Visual Studio\Common\Graphics\IconsDragDrop
lïí chổn mưåt Icon File.

Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
List1.Drag ' Bùỉt àêìu drag
End Sub
Private Sub List2_DragDrop(Source As Control, X As Single, Y As Single)
' Source úã àêy lâ List1
List2.AddItem Source.Text ' Bỗ hâng tûâ List1 vư cëi List2
Source.RemoveItem Source.ListIndex ' Lêëy hâng ra khỗi List1
List2.Listindex = List2.Listcount-1 ' Hilight hâng cëi vâ lâm cho nố àûúåc
display
End Sub
Lâm sao biïët Drag Source lâ control nâo
Ta cố thïí dng Function Typename nhû:
TypeName(Source) àïí xem nố lâ "ListBox" hay "TextBox" etc hay dng
TypeOf nhû:
If TypeOf Source Is ListBox Then
Msgbox " Drag source is a ListBox"
End If
Ta cq•ng cố thïí dng Name ca Source nhû:
If Source.Name = "List1" thenMsgBox "Drag source is List1"
End If
Ngoâi ra ta cq•ng cố thïí dng Property Tag ca Source Control àïí chûáa mưåt
biïåt danh vâ dng giưëng nhû tïn ca Drag Source nhû:
If Source.Tag = "MYLIST1" then

MsgBox "Tag of Drag Source is: " & Source.Tag
End If

In nhûäng hâng àûúåc chổn ca mưåt ListBox
Ta dng Printer Object. Rấp têët cẫ nhûäng hâng àûúåc chổn lẩi thânh mưåt text
string dâi, thïm vâo cëi mưỵi hâng lâ Carriage Return / LineFeed ( vbCrLf ) .
Dim i
strOut = "" ' Initialise Output string khưng cố gò cẫ
For i=0 to List1.Listcount-1
If List1.Selected(i) then
strOut = strOut & List1.List(i) & vbCrLf
End if
Next
Printer.Print strOut ' Gúãi text String ra Printer
Printer.EndDoc ' Bùỉt àêìu in ra
Nïëu bẩn mën in tûâng hâng thò dng:
Printer.Print List1.List(i) ' Khưng cêìn phẫi dng vbVrLf
Mën in chûä àêåm thò múã BOLD lïn bùçng:
Printer.FontBold = True
vâ khi nâo mën tùỉt chûä àêåm thò dng:
Printer.FontBold = False
Bùỉt båc user phẫi click ComboBox àïí chổn mưåt hâng
Khi Form múái hiïån ra, nïëu àậ cố sùén mưåt hâng chûä nùçm trong ComboBox, mâ
àố àng lâ hâng user mën dng, ta khưng cố dõp àïí dng Event Click ca
ComboBox àïí lâm chuån gò ty thåc vâo hâng mâ user àậ chổn.
Mưåt mấnh lúái lâ trûúác khi cho cấc hâng vâo ComboBox ta àïí mưåt hâng trưëng,
thđ d nhû:
Combo1.AddItem " "
ComboBox sệ nhû trưëng khưng khi Form múái hiïån ra, bùỉt båc user phẫi chổn
mưåt hâng chúá khưng dng hâng àêìu 'by default' (tûå àưång cố nïëu khưng lâm gò).


Lâm mưåt Control hiïån ra trïn mổi trang ca Tab Control
Mưỵi trang ca Tab Control chûáa riïng nhûäng Control ca nố. Nïëu bẩn mën
mưåt Textbox, Listbox hay CommandButton hiïån ra trïn mổi trang ca Tab,
bẩn tẩo control àố bïn ngoâi Tab vâ kếo nố vâo àùåt lïn trïn Tab. Nïëy Control
nùçm phđa dûúái Tab, dng VBIDE menu Comand "Format | Order | Bring to
Front" àïí mang Control ra phđa trûúác.
Sùỉp xïëp thûá tûå cấc TextBox cho Data Entry
Khi user àiïìn cấc dûä kiïån vâo mưåt Form (Data Entry), user rúâi mưỵi TextBox
bùçng cấch bêëm nt Tab. Kïë àố MouseCursor nhẫy àïën TextBox cố Property
TabIndex value theo thûá tûå sau TabIndex value ca TextBox vûâa rúâi khỗi.
Thûúâng thûúâng ta cho TabIndex value theo thûá tûå tûâng cùåp LblName, txtName
rưìi lblAddress, txtAddress, v.v. cố TabIndex values thđ d nhû 1,2,3,4. Khi
txtName (TabIndex=2) mêët Focus, mouseCursor dúâi àïën lblAddress
(TabIndex=3) , nhûng vò lblAddress lâ mưåt Label nïn khưng chûáa
mouseCursor àûúåc, do àố mouseCursor nhẫy àïën txtAddress (TabIndex=4).
Nïëu Caption ca lblAddress cố mưåt character underlined, nhû
lblAddress.Caption = "Add&ess" ' character "e" underlined
khi user bêëm Alt+e bêët cûá lc nâo mousePointer sệ nhẫy àïën lblAddress nhûng
rưët cåc rúát vâo TextBox kïë àố, tûác lâ txtAddress trong trûúâng húåp nêìy.
Nïëu bẩn khưng mën mousePointer àấp vâo mưåt TextBox nâo set Property
TabStop ca nố ra False. Bẩn cq•ng cố thïí khưng cho user thay àưíi dûä kiïån úã
mưåt TextBox bùçng cấch set Property Enabled ra False hay Locked ra True.
Lâm sao cho data vâo trong ListBox hay ComboBox
Khi Design ta cố thïí dng Property List ca ListBox hay ComboBox àïí àấnh
vâo cấc dông data. Mưỵi khi xëng hâng phẫi nhúá dng Ctrl+Enter chúá khưng
phẫi Enter, nïëu khưng VBIDE tûúãng lâ bẩn àậ chêëm dûát data entry.
Mưåt cấch khấc àïí cho data vâo ListBox hay ComboBox lâ dng Method
AddItem trong Sub Form_Load, nhû:
Sub Form_Load()

Dim i
For i=1 to 10
List1.AddItem "Line " & CStr(i)
Next
lstState.AddItem "NSW"
lstState.AddItem "VIC"
lstState.AddItem "QLD"
lstState.AddItem "SA"
lstState.AddItem "WA"
lstState.AddItem "TAS"
End Sub
Sao khưng thêëy hònh trong CommandButton?
Bẩn dng Properties Window àïí àùåt mưåt Picture vâo mưåt CommandButton
bùçng cấch Browse vâ chổn mưåt Image File. Nhûng bẩn khưng thêëy Picture àêu
cẫ. Bẩn côn cêìn phẫi set Propety Style ca CommandButton ra "Graphical",
thay vò "Standard".
Lâm sao àùåt icon lïn Toolbar lâm shortcut cho mưåt menu command
ca VBIDE?
Dng Menu command View | Toolbars | Customize àïí display Dialog
Customize. Kïë àố chổn Tag Commands, bïn trấi sệ lâ mưåt Listbox chûáa danh
sấch cấc Categories vâ bïn phẫi lâ nhûäng Commands thåc vïì Category àang
àûúåc highlighted. Thûã select tûâng Category àïí tòm trong Listbox bïn phẫi cấi
Command cố icon mâ bẩn mën. Drag icon àố lïn Toolbar. Nhên dõp nêìy bẩn
cố thïí bỗ mưåt icon cố sùén trïn Toolbar bùçng cấch Drag nố ra chưỵ khấc.
Cấc dẩng ca Ngây vâ Thò giúâ
Dng Function Format àïí lêëy ngây giúâ theo dẩng bẩn mën. Thđ d:
strToday = Format (Now(), "ddd dd-mmm-yyyy hh:nn:ss")
• Now() cho ta hiïån giúâ (realtime lêëy tûâ àưìng hưì ca CPU)
• ddd cho Mon, Tue .vv
• mmm cho Jul, Feb .vv

Nhúá dng "nn" cho pht.
Hai cấch dng Timer
1. Timer cố Interval tđnh bùçng milliseconds. Khi Timer1 àûúåc Enabled (tûác lâ
Timer1.Enabled=True) nố sệ chẩy Sub Timer1_Timer mưỵi Interval msecs.
Thủ duồ ta muửởn Label1 chỳỏp tựổt (blink):
Timer1.Interval = 500 ' Nỷọa giờy
Timer1.Enabled = True ' Bựổt ờỡu chaồy Timer1 cho hùởt interval
Sub Timer1_Timer()
Label1.Visible = NOT Label1.Visible
End Sub
Cỷỏ mửợi nỷọa giờy hùớ Label1 ang hiùồn ra thũ cho noỏ taõn hũnh vaõ ngỷỳồc laồi.
Khi naõo muửởn ngỷng chỳỏp tựổt thũ duõng:
Timer1.Enabled = False
Label1.Visible = True
2. ùớlaõm mửồt viùồc trong tỷỳng lai, ta cqng duõng Timer nhỷng ngay trong
Sub Timer1_Timer ta ùớ cờu Timer1.Enabled = False
ùớ tựổt Timer1 sau khi laõm xong cửng chuyùồn. Thủ duồ:
Sub Timer1_Timer()
Timer1.Enabled = False ' Ngỷng Timer1
' ùớ code laõm cửng chuyùồn taồi ờy
End Sub
ỳồi mửồt chuỏt
Coỏ khi ngay ỳó giỷõa code baồn muửởn ỳồi (wait) mửồt chuỏt. Baồn coỏ thùớ laõm theo baõi
mờợu cuóa Microsoft nhỷ sau:
Dim PauseTime, Start, Finish, TotalTime
' Code ang laõm viùồc nỷọa chỷõng
PauseTime = 5 ' Set duration in seconds.
Start = Timer 'Set start time as now
Finish = Start + PauseTime ' set finish time
Do While timer < Finish

DoEvents ' Yield to other processes.
Loop
' Code tiïëp tc cưng viïåc
Timer dng úã àêy lâ mưåt Function cố sùén (in-built) ca VB chúá khưng phẫi
Control Timer. Timer cho ta sưë giêy kïí tûâ nûâa àïm.
Ta dng DoEvents àïí khỗi dânh hïët CPU time trong mưåt closed Do While
Loop. Nố nhûúâng cho cấc process khấc chẩy trong khi chúâ àúåi Finish.
Khi bẩn chẩy mưåt Closed Loop giưëng nhû trïn vâ assign cho Label1 mưåt
Caption vúái value biïën àưíi àïí Feedback cho user biïët tònh hònh diïỵn tiïën àïën
àêu, nïëu bẩn khưng dng DoEvents giưëng nhû nối trïn, Label1 sệ khưng cố dõp
'refresh' àïí 'display' value múái ca Label1.Caption.
Khưng biïët bẩn cố àïí thêëy cấch chúâ àúåi nhû trïn cố thïí gùåp trúã ngẩi nïëu lc
bêëy giúâ lâ gêìn àïën nûâa àïm đt hún 5 giêy. Khi àố Finish sệ lúán hún 3600*24
giêy vâ Timer sệ khưng bao giúâ àẩt àïën con sưë êëy àïí nhẫy ra khỗi Loop. Giưëng
nhû mònh lêåp gia àònh vêåy, sệ lâm mổi sët àúâi, khưng cố lưëi thoất.
Mưåt cấch khấc àïí giẫi quët lâ ta nhúâ mưåt Timer1 chẩy àưåc lêåp àïí cho biïët khi
nâo thúâi gian àậ trẫi qua (elapsed) bùçng cấch set mưåt 'variable' tïn blnElapsed
ra True. blnElapsed phẫi àûúåc àïí trong phêìn General Declaration àïí cẫ code
chđnh vâ Sub Timer1_Timer àïìu thêëy nố.
Dim blnElapsed as Boolean ' Declare in General section
Sub Timer1_Timer()
Timer1.Enabled = False
blnElapse = True
End Sub
' Code àang lâm viïåc nûäa chûâng

blnElapsed = False
Timer1.Interval = 5000 ' Set duration in msecs.
Timer1.Enabled = True 'Start Timer1
Do

DoEvents ' Yield to other processes.
Loop Until blnElapsed
' Code tiïëp tc cưng viïåc

Cấch nêìy cq•ng àûúåc nhûng nố vêỵn bùỉt chểt (hold up) CPU vâ lâm cẫn trúã cấc
processes khấc(àêy lâ giúái hẩn ca VB).
Cấch hoân hẫo nhêët lâ ta àúåi bùçng cấch dng Timer1, nhûng àùåt phêìn code côn
lẩi àïí tiïëp tc cưng viïåc ngay trong Sub Timer1_Timer.
' Code àang lâm viïåc nûäa chûâng
Timer1.Interval = 5000 ' Set duration in milliseconds.
Timer1.Enabled = True 'Start Timer1

Sub Timer1_Timer()
Timer1.Enabled = False
' Code tiïëp tc cưng viïåc

End Sub
Lâm thng rấc chấy lûãa nûäa giêy
Trong khi xûã l, ta cố thïí biïën hònh ca mưåt Image bùçng cấch cho nố mưåt
Picture múái nhû:
Image1.Picture = LoadPicture("PictureName.bmp")
rưìi bùỉt àêìu mưåt Timer vúái Interval bùçng 500 milliseconds.
Àêìu tiïn àùåt mưåt Timer tïn Timer1 lïn Form. Vò lc àêìu Timer1.Interval bùçng
0 nïn Timer1 chûa chẩy àûúåc (giưëng nhû Enabled = False)
' Cho hònh thng rấc chấy lûãa
Image1.Picture = LoadPicture("TrashBinOnFire.bmp")
Timer1.Interval = 500
Timer1.Enabled = True ' Nûäa giêy sau sệ chẩy Timer1_Timer

Sub Timer1_Timer()

Timer1.Enabled =False ' Ngûng Timer1
' Cho hònh thng rấc thûúâng
Image1.Picture = LoadPicture("TrashBin.bmp")

End Sub
Laõm sao oồc tỷõ mửồt Text file
Sau ờy laõ mửồt thủ duồ oồc data tỷõ mửồt Textfile tùn "Friends.txt" nựỗm trong
cuõng folder vỳỏi chỷỳng trũnh ang xỷó lyỏ.
Sub Form_Load()
Dim strALine as string
Dim strLocalFolder as string
Dim strFullPathFileName as string
strLocalFolder = App.path
If Right(strLocalFolder,1) <> "\" then
strLocalFolder = strLocalFolder & "\"
End If
strFullPathFileName = strLocalFolder & "Friends.txt"
Open strFullPathFileName for input as #1
lstFriend.Clear ' Clear ListBox lstFriend
Do While Not EOF(1) ' Read till End-Of-File
Line Input #1, strALine ' Read a line
lstFriend.AddItem strALine 'Add that line to ListBox
Loop
Close #1 ' Close the file
End Sub
Laõm sao chỷỏa vaõo mửồt Text file
Sau ờy laõ mửồt thủ duồ oồc data tỷõ mửồt Textfile tùn "Friends.txt" nựỗm trong
cuõng folder vỳỏi chỷỳng trũnh ang xỷó lyỏ.
Sub Form_Load()
Dim i

Dim strLocalFolder as string
Dim strFullPathFileName as string
strLocalFolder = App.path
If Right(strLocalFolder,1) <> "\" then
strLocalFolder = strLocalFolder & "\"
End If
strFullPathFileName = strLocalFolder & "Friends.txt"
Open strFullPathFileName for output as #2
For i=0 to lstFriend.Listcount-1
Print #2, lstFriend.List(i)
Next
Close #2 ' Close the file
End Sub
Caỏch thỷỏc Log mửồt dỷọ kiùồn vaõo mửồt Text file ?
Nhiùỡu luỏc ta cờỡn Log vaõo trong mửồt LogFile caỏc biùởn cửở xaọy ra trong khi nhu
liùồu ang chaồy ùớ sau nờỡy kiùớm laồi tũnh hũnh.
Sub LogEvent(ByVal GivenFileName, ByVal msg As String, HasFolder As
Boolean, IncludeTimeDate As Integer)
' Append event message Msg to a text Logfile GivenFileName
' If GivenFileName is fullPathName then HasFolder is true
' IncludeTimeDate = 0 : No Time or Date
' = 1 : Prefix with Time
' = 2 : Prefix with Time and Date
Dim FileNo, LogFileName, theFolder
If HasFolder Then
LogFileName = GivenFileName
Else
If Right(App.Path, 1) <> "\" Then
theFolder = App.Path & "\"
Else

theFolder = App.Path
End If
LogFileName = theFolder & GivenFileName
End If
FileNo = FreeFile
If Dir(LogFileName) <> "" Then
Open LogFileName For Append As FileNo
Else
Open LogFileName For Output As FileNo
End If
Select Case IncludeTimeDate
Case 0 ' No Time or Date
Print #FileNo, Msg
Case 1 ' Time only
Print #FileNo, Format(Now, "hh:nn:ss ") & Msg
Case 2 ' Date & Time
Print #FileNo, Format(Now, "dd/mm/yyyy hh:nn:ss ") & Msg
End Select
Close FileNo
End Sub
Coi chûâng trûúâng húåp LogEvent àûúåc gổi búãi hai Sub khấc nhau cng mưåt lc.
Khi Sub thûá nhò mën múã LogFileName thò bõ error vò LogFileName àậ bõ Sub
thûá nhêët múã rưìi. Trong trûúâng húåp àố ta cố thïí sûäa LogEvent lẩi cho nố
AddItem Msg vâo mưåt Listbox rưìi giao nhiïåm v viïët xëng File cho mưåt
Process chun viïn thûá ba.
Cấch thûác àổc/viïët value ca mưåt Variable tûâ mưåt "ini" file ?
Cố khi ta mën àổc value ca mưåt variable chûáa trong mưåt file cố extension lâ
"ini" (côn gổi lâ configuration file) nùçm trong folder C:Windows hay c:WinNT.
Trong file nêìy nhûäng cùåp variable=value nùçm trong cấc sections, mưỵi Section
header cố dẩng nhû [System Var]. Thđ d "protocol.ini" chûáa nhûäng dông sau:

[ndishlp$] <= section header
DriverName=ndishlp$ <= cùåp variable=value
[protman$] <= section header
DriverName=protman$ <= cùåp variable=value
priority=ndishlp$ <= cùåp variable=value
[data] <= section header
version=v4.10.1998 <= cùåp variable=value
Dng Function ReadPrivateProfileString sau àêy àïí àổc value ca VarName$
dûúái section header SectionHeader$ tûâ file Filename$:
Function ReadPrivateProfileString( SectionHeader$, VarName$, Filename$)
As String
' Read data from an Ini file in default Windows directory
' Filename$ : The Ini file name eg: myProg.ini
' SectionHeader$ : The Section name in Ini file eg: [System Var]
' VarName$ : Variable name whose data value we want to get
Dim RetStr As String
RetStr = String(255, Chr(0)) ' Prepare a string of 255 zeros (number).
'Get Requested Information
ReadPrivateProfileString = Left(RetStr,
GetPrivateProfileString(SectionHeader$, ByVal
VarName$, "", RetStr, Len(RetStr), Filename$))
End Function
Tỷỳng tỳồ nhỷ vờồy, ta coỏ thùớ viùởt value mỳỏi cuóa mửồt variable vaõo trong mửồt "ini"
file nhỷ sau:
Dim ErrCode
ErrCode = WritePrivateProfileString(SectionHeader$, VarName$,newValue,
Filename$)
Nhỳỏ ùớ hai cờu tuyùn bửở cho caỏc API Function ta cờỡn vaõo mửồt Basic Module:
Public Declare Function GetPrivateProfileString Lib "kernel32" Alias
"GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal

lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As
String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Public Declare Function WritePrivateProfileString& Lib "kernel32" Alias
"WritePrivateProfileStringA" (ByVal AppName$, ByVal KeyName$, ByVal
keydefault$, ByVal Filename$)
ửớ i Enter key ra Tab key
Khi user iùỡn caỏc dỷọ kiùồn vaõo mửồt Form (Data Entry), thỷỳõng thỷỳõng user rỳõi
mửợi TextBox bựỗng caỏch bờởm nuỏt Tab. Coỏ khi user 'prefer' (chuửồng hỳn) duõng
Enter key thay vũ Tab key. Baồn coỏ thùớ duõng Event Keypress cuóa TextBox ùớ
ửới Enter ra Tab. Thủ duồ:
Private Sub TxtName_KeyPress(KeyAscii As Integer)
If KeyAscii = vbCr then
KeyAscii = 0 ' Nuửởt troồn Enter key ùớ khửng bừ side effect
' Emulate (lâm giưëng nhû) bêëm nt Tab bùçng cấch dng
SendKeys
Sendkeys "{TAB}"
End if
End Sub
Event Keypress ca TextBox àûúåc dng nhû trïn rêët tưët. Nhûng nïëu Form
cố rêët nhiïìu TextBox ta cố thïí trấnh lêåp lẩi viïåc dng KeyPress Event ca
tûâng TextBox bùçng cấch dng Sub Form_Keypress, nhû:
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = vbCr then
KeyAscii = 0 ' Nët trổn Enter key àïí khưng bõ side effect
Sendkeys "{TAB}"
End if
End Sub
Àïí nhùỉc Form chp lêëy Keystroke trûúác TextBoxes, ta phẫi set Form Property
'KeyPreview' ra True, nïëu khưng Sub Form_Keypress khưng bao giúâ àûúåc gổi.
Àưí i dẩng MousePointer ra àưìng hưì cất

Khi program sùỉp lâm chuån gò húi lêu, bẩn mën cho user biïët lâ program
àang lâm viïåc chúá khưng phẫi chïët àûáng (hang) nhû khi mònh gùåp ngûúâi àểp
lêìn àêìu, dng:
Screen.MousePointer = vbHourglass ' Biïën MousePointer ra hònh àưìng hưì cất
' Bỗ Codes vư àêy . . .
Screen.MousePointer = vbDefault ' Biïën MousePointer trúã lẩi dẩng bònh
thûúâng
Kiïëm Help cho cấc Functions
Trong khi àang viïët program, thđ d bẩn mën àổc vïì cấch dng 'Select'. Àấnh
chûä 'Select' àoẩn 'highlight' nố rưìi bêëm nt F1. Nhúá lâ bẩn cố thïí 'highlight'
mưåt chûä bùçng cấch àïí con trỗ (mousepointer) lïn trïn chûä àố àoẩn
'doubleClick'.
Nïëu bẩn khưng biïët chùỉc mưåt tïn Function àấnh vêìn nhû thïë nâo, thđ d bẩn
khưng nhúá rùçng Function 'Sendkeys' cố chûä 's' úã cëi khưng. Thûã àấnh 'Sendk'
rưìi bêëm 'Ctrl+Space' (nhêën nt 'Ctrl' trong khi bêëm Space bar), VBIDE (Visual
Basic Integrated Development Environment) sệ àấnh nhûâng chûâ côn lẩi ca
chûâ 'SendKeys'. Nïëu bẩn chûa àấnh gò hïët mâ bêëm 'Ctrl+Space', VBIDE sệ
'pop-up' danh sấch ca têët cẫ Functions cố thïí dng àûúåc lc nêìy, ca VB vâ
ca chđnh bẩn àang viïët. Do àố bẩn cố thïí àùåt tïn Constant hay Function, Sub
ca mònh bùỉt àêìu bùçng nhûâng 'characters' dïỵ nhúá, vâ dng tïn dâi cho dïỵ àổc.
Thđ d bẩn dng 'my' lâm hai characters bùỉt àêìu:
Const myTableSize = 20
Sub mySortRoutineForHTML
Sau àố chó cêìn àấnh 'mySo' Ctrl+Space sệ ra trổn chûä
mySortRoutineForHTML.
Dng Docket Dot Matrix Printer
Nïëu bẩn dng Docket Dot Matrix Printer thò khưng thïí xâi mưåt Windows
Printer Driver bònh thûúâng àûúåc, vò nố in hònh ẫnh ca cẫ mưåt trang trong khi
ta mën in tûâ dông.
Ta phẫi vư Start | Settings | Printers àïí Add mưåt Generic / Text Only printer

driver.
Kïë àố nïëu cêìn bẩn cho vâo nhûäng Control Command Strings àïí in BOLD,
ITALIC, v.v. lêëy tûâ Cêím nang ca printer.
Thđ d sưë 28 àïí múã BOLD, 29 àïí tùỉt BOLD. Nïëu Docket Printer cố thïí in mâu
àỗ vâ bẩn khưng cêìn dng ITALIC, bẩn cố thïí cho Control Command Strings
ca múã tùỉt mâu àỗ vâo chưỵ múã tùỉt ITALIC. Sau àố khi trong code bẩn múã
ITALIC thò thêåt ra driver gúãi Control Command String cho múã mâu àỗ.
Thđ du:
Printer.FontItalic = True ' múã mâu àỗ
Printer.Print " ** SUPER DISCOUNT STORE **"
Printer.FontItalic = False ' tùỉt mâu àỗ
Printer.Print "1 T Shirt $24.50"
Printer.FontIBold = True ' múã chûä àêåm
Printer.Print " Total: $24.50"
Printer.FontIBold = True ' tùỉt chûä àêåm
Printer.Print "Thank you"
Printer.EndDoc
Nïëu Docket Printer khưng xëng hâng àâng hoâng, bẩn gúãi trổn 40 characters
ra cho mưỵi hâng, (40 characters lâ chiïìu rưång ca Docket) Mën gúãi trổn 40
characters bẩn phẫi ghếp thïm blank spaces cho mưỵi dông dâi à 40
characters. Thđ d:
strLine = Space(40) ' Initialise 40 blank spaces
Mid(strLine,15,9) = "Thank you" ' Nhết hai chûä Thank you vâo, bùỉt àêìu tûâ cưåt
15
Printer.Print strLine
Cho Application mưåt Icon
Bẩn cố thïí cho mưỵi Form mưåt icon bùçng cấch dng Property Icon trong
Properties Window ca Form àïí chổn mưåt icon file. Mưỵi khi mưåt Form àûúåc
Minimised ta sệ thêëy Icon ca nố trïn Desktop. Bêy giúâ mën dng icon ca
mưåt Form lâm icon ca Application (nhu liïåu), bẩn dng menu command

Project | Project? Properties. Khi Dialog hiïån ra chổn Tab 'Make' vâ click Icon
combo box àïí chổn Form bẩn mën chó àõnh.
VB shorcut Keys
Find Ctrl+F
Replace Ctrl+H
Find Next F3
Copy Ctrl+C
Cut Ctrl+X
Paste Ctrl+V
Undo Ctrl+Z
Delete Current Line Ctrl+Y
Delete to End of Word Ctrl+Delete
View Code Window F7
View Definition of Sub/Function Shift+F2
Go to last position Ctrl+Shift+F2
Debug Step Into F8
Debug Step Over Sub/Function Shift+F8
View Object Browser F2
View Prperties Window F4

Comment (biïën cêu code thânh cêu ch thđch) / Indent (cho xđt vư) mưåt sưë dông
code
Nïëu khưng thêëy Edit Toolbar thò dng menu command View | Toolbars | Edit
àïí lâm Edit Toolbar hiïån ra. Chổn mưåt sưë dông code bẩn mën lâm viïåc àoẩn
dng Comment/Uncomment, Indent/Unindent buttons àïí xûã l.

×