Trong kú nµy:
1. KiÓm tra sù tån t¹i cña file ë bÊt kú ®©u
2. KiÓm tra ®é ph©n gi¶i mµn h×nh
3. Import file reg vµo registry
4. Sù kh¸c nhau khi load form ë chÕ ®é MODAL & MODELESS
5. Khi nµo, t¹i sao ph¶i dïng Option Explicit
6. T¹o menu PopUp
1. KiÓm tra sù tån t¹i cña file ë bÊt kú ®©u
2. KiÓm tra
®é ph©n gi¶i mµn h×nh |
§Ó gi÷ cho øng dông cña b¹n su«n sÎ khi ch¹y tr¸nh trêng hîp bÞ lçi ch¬ng tr×nh vµ ngõng mét c¸ch "bÊt hîp ph¸p", nÕu ngêi gÆp lçi lµ chÝnh b¹n th× kh«ng cã g×, nhng nÕu ngêi gÆp lçi kh«ng ph¶i lµ b¹n, b¹n sÏ bÞ "mÊt mÆt" v× ch¬ng tr×nh cña m×nh. Cô thÓ h¬n, trong qu¸ tr×nh lµm viÖc víi file, b¹n cÇn ph¶i lu«n kiÓm tra file cã tån t¹i hay kh«ng tríc khi thùc hiÖn mét t¸c vô ghi ®äc nµo ®ã. Díi ®©y lµ mét ch¬ng tr×nh con dïng ®Ó kiÓm tra, ®èi sè duy nhÊt lµ ®êng dÉn file cÇn më.
Public Sub VerifyFile(FileName As String)
'
On Error Resume Next
'Më file thö ®Ó kiÓm tra
Open FileName For I`165432nput As #1
If Err Then
MsgBox ("The file " & FileName & " cannot be found.")
Exit Sub
End If
Close #1
'
End Sub
B¹n h·y ®Æt nã vµo mét module ®Ó sö dông cho toµn ch¬ng tr×nh.NÕu qu¸ tr×nh kiÓm tra diÔn ra tèt ®Ñp th× kh«ng cã g×, nÕu cã trôc trÆc b¹n sÏ thÊy mét MsgBox xuÊt hiÖn, nhê bÉy lçi, ch¬ng tr×nh cña chóng ta vÉn ho¹t ®éng tiÕp tôc. B©y giê b¹n h·y t¹o mét form míi, thªm vµo mét CommandButton (Name: cmdVerify), gâ vµo ®o¹n Code cho t×nh huèng Click(), nhÊn F5 ch¹y thö. Víi ch¬ng tr×nh con nh vËy b¹n cã thÓ gäi nã ®Ó kiÓm tra sù tån t¹i cña file trong ch¬ng tr×nh.
Private Sub cmdVerify_Click()
'
Call VerifyFile("MyFile.txt")
'
End Sub
2. KiÓm tra ®é ph©n gi¶i mµn h×nh
|
1. KiÓm tra sù tån
t¹i cña file ë bÊt kú ®©u |
NÕu ch¬ng tr×nh cña b¹n cã ®ßi hái ph¶i ch¹y trong mét ®é ph©n gi¶i mµn h×nh nhÊt ®Þnh nµo ®ã, b¹n cã thÓ dïng c¸ch sau ®©y ®Ó kiÓm tra ®é ph©n gi¶i cña mµn h×nh cã thÝch hîp víi ch¬ng tr×nh cña m×nh kh«ng, råi sau ®ã míi ch¹y.
Hµm CheckRez(réng, cao) nhËn vµo 2 tham sè lµ chiÒu réng vµ cao cña mµn h×nh (tÝnh b»ng Pixel) tr¶ vÒ mét gi¸ trÞ kiÓu Boolean (True/False). NÕu tr¶ vÒ True cã nghÜa lµ ®é ph©n gi¶i mµn h×nh ®ang sö dông thÝch hîp víi ®é ph©n gi¶i b¹n cÇn kiÓm tra.
Vd: CheckRez(800,600) = True
Do Visual Basic sö dông ®¬n vÞ lµ Twip mµ b¹n l¹i sö dông lµ Pixel cho nªn ph¶i cã sù chuyÓn ®æi ®¬n vÞ.
Public Function CheckRez(pixelWidth As Long, _
pixelHeight As Long) As Boolean
'
Dim lngTwipsX As Long
Dim lngTwipsY As Long
'
' chuyÓn ®æi tõ pixels sang twips
lngTwipsX = pixelWidth * 15
lngTwipsY = pixelHeight * 15
'
' kiÓm tra l¹i ®é réng vµ cao cña mµn h×nh
If lngTwipsX <> Screen.Width Then
CheckRez = False
Else
If lngTwipsY <> Screen.Height Then
CheckRez = False
Else
CheckRez = True
End If
End If
'
End Function
KÕ ®Õn, b¹n h·y dïng c©u lÖnh if cïng víi ®iÒu kiÖn kiÓm tra lµ hµm CheckRez ë ®o¹n m· b¾t ®Çu cña ch¬ng tr×nh.
If CheckRez(640, 480) = False Then
MsgBox "Incorrect screen size!"
Else
MsgBox "Screen Resolution Matches!"
End If
3. Inport mét file Registry (*.reg)
1. KiÓm tra
sù tån t¹i cña file ë bÊt kú ®©u |
NÕu b¹n cÇn Import mét file reg vµo Registry mµ kh«ng muèn lµm bËn t©m ®Õn ngêi dïng. B¹n h·y ch¹y Regedit víi th«ng sè /s kÌm theo sau lµ tªn file vµ ®êng dÉn file reg cÇn Import vµo Registry. Cô thÓ nh sau:
Dim strFile As String
Dim lngRet
strFile = App.Path & "\myreg.reg"
If Len(Dir$(strFile)) > 1 Then
lngRet = Shell("Regedit.exe /s " & strFile, vbNormalFocus)
End If
Víi c¸ch nµy file reg cña b¹n sÏ ®îc Merge vµo Registry mét c¸ch ©m thÇm, kh«ng ai hay biÕt.
Vµ ®¬ng nhiªn b¹n còng cã thÓ gâ trùc tiÕp nh vËy vµo hép tho¹i run cña Windows.

1. KiÓm tra
sù tån t¹i cña file ë bÊt kú ®©u |
Nh÷ng Form ®îc load ë chÕ ®é MODAL thêng cã yªu cÇu b¾t buéc vµ chê ngêi dïng nhËp d÷ liÖu tríc khi thi hµnh c¸c lÖnh kh¸c trong cïng mét thñ tôc (Sub / Function). Form lo¹i nµy thêng gi÷ focus cña ch¬ng tr×nh cho ®Õn khi nã ®îc ngêi dïng "gi¶i t¸n". Khi hiÓn thÞ form ë chÕ ®é nµy, c¸c lÖnh kh«ng thuéc form ®ang hiÓn thÞ sÏ kh«ng ®îc thùc hiÖn, mµ ph¶i chê cho ®Õn khi form nµy ®îc ®ãng l¹i. C¸c MsgBox, InputBox chÝnh lµ mét d¹ng cña Modal form. §Ó hiÓn thÞ form ë chÕ ®é nµy b¹n dïng có ph¸p lÖnh sau:
MyForm.SHOW vbModal
Khi load form ë chÕ ®é MODELESS c¸c lÖnh sÏ ®îc lÇn lît thùc hiÖn mét c¸ch b×nh thêng tõ trªn xuèng díi trong mét thñ tôc (kh«ng cÇn ngêi dïng ph¶i quan t©m, ®Ó tõ tõ råi xem còng ®îc). c¸c MDI child lu«n ë d¹ng modeless. §Ó hiÓn thÞ form ë chÕ ®é modeless b¹n dïng lÖnh:
MyForm.SHOW
1. KiÓm tra
sù tån t¹i cña file ë bÊt kú ®©u |
NÕu dßng Option Explicit xuÊt hiÖn trong cöa sæ code cña ch¬ng tr×nh còng cã nghÜa lµ Vb b¾c buéc b¹n ph¶i khai b¸o biÕn mét c¸ch têng minh tríc khi sö dông chóng. MÖnh ®Ò Option Explicit ®îc ®Æt ë dßng ®Çu tiªn trong cöa sæ Code (General Declaration). Qu¶ thËt viÖc b¾t buéc ph¶i khai b¸o biÕn sÏ lµm cho ch¬ng tr×nh râ rµng, gi¶m thiÓu tèi ®a c¸c sai sãt ngoµi ý muèn (bugs) do kh¶ n¨ng tù ph¸t sinh biÕn míi mµ kh«ng cÇn khai b¸o cña Visual Basic . §©y còng lµ con dao 2 lìi, theo t«i tÝnh n¨ng nµy h¹i nhiÒu h¬n lµ lîi.

B¹n cã thÓ gâ trùc tiÕp mÖnh ®Ò Option Explicit hay nhê VB tù ®éng thªm gióp b»ng c¸ch vµo Tools / Options. Check vµo Require Variable Declaration trong thÎ (tab) Editor.

Option Explicit sÏ v« hiÖu kh¶ n¨ng tù ph¸t sinh biÕn cña Vb. Nh vËy, tÊt c¶ c¸c biÕn muèn sö dông ®Òu ph¶i khai b¸o b»ng tõ khãa DIM hay REDIM, biÕn nµo cha ®îc khai b¸o VB sÏ th«ng b¸o lçi vµ b¾t b¹n ph¶i khai b¸o míi ch¹y ®îc ch¬ng tr×nh. KiÓu d÷ liÖu mÆc nhiªn mµ mçi lÇn Visual Basic (Basic) t¹o biÕn míi lµ Variant.
Trong øng dông ngoµi lo¹i menu kÐo xuèng (PullDown) cßn mét lo¹i menu n÷a kh¸ linh ®éng gäi lµ menu PopUp. Lo¹i menu nµy b¹n rÊt thêng sö dông trong Windows 9.x, ®îc kÝch ho¹t b»ng phÝm ph¶i chuét. Mét øng dông Windows hoµn chØnh ch¹y trong Windows 9.x kh«ng thÓ kh«ng cã lo¹i menu cÊp tèc nµy.
Trong Visual Basic lo¹i menu nµy thËt ra còng lµ mét menu PullDown b×nh thêng mµ th«i. Khi nµo cÇn hiÖn thµnh menu PopUp b¹n chØ viÖc gäi tªn menu t¬ng øng (Name cña Menu). §Ó cho thµnh menu PopUp thø thiÖt b¹n h·y cho menu nµy Èn ®i (Visible = False), khi nµo ngêi dïng nhÊn phÝm ph¶i chuét b¹n sÏ cho nã hiÖn ra b»ng method Popupmenu
Trong ch¬ng tr×nh ta cã thÓ dïng hµnh vi (method) popupmenu ®Ó gäi mét menu hiÓn thÞ, menu nµy ph¶i ®îc t¹o tríc (menu editor) vµ cã Ýt nhÊt 1 môc chän con tøc lµ menu thø cÊp.
Có ph¸p: object.PopupMenu menuname, flags, x, y
Trong ®ã:
object: tªn form mµ tr×nh ®¬n sÏ xuÊt hiÖn. NÕu kh«ng ghi cã nghÜa lµ dïng form hiÖn hµnh.
menuname: tªn menu cÇn hiÓn thÞ.
flags: gi¸ trÞ nguyªn qui ®Þnh vÞ trÝ xuÊt hiÖn cña menupopup.
|
Tªn H»ng |
Gi¸ TrÞ |
ý nghÜa |
| vbPopupMenuLeftAlign | 0 | TrÞ mÆc ®Þnh, c¹nh tr¸i cña tr×nh ®¬n sÏ ë vÞ trÝ x. |
| vbPopupMenuCenterAlign | 4 | Tr×nh ®¬n sÏ canh gi÷a so víi vÞ trÝ x. |
| vbPopupMenuRightAlign | 8 | C¹nh ph¶i cña tr×nh ®¬n sÏ ë vÞ trÝ x. |
| ... | ... | ... |
| x,y | Täa ®é tr×nh ®¬n sÏ xuÊt hiÖn. NÕu kh«ng ghi mÆc nhiªn tr×nh ®¬n sÏ xuÊt hiÖn ë vÞ trÝ mouse |
Sau ®©y lµ mét thÝ dô vÒ PopUp menu:
Më mét form trèng vµ t¹o 1 hÖ thèng menu nh h×nh sau. Trong h×nh menu chÝnh lµ Record (Name: mnuRec) vµo cã mét sè menu con nh: Insert, Append, Edit, Delete.

§Ó "chép" ®îc sù kiÖn nhÊn Mouse b¹n h·y kh¶o s¸t t×nh huèng MouseDown cña form nµy. Gâ vµo ®o¹n Code sau:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
' KiÓm tra xem nót ph¶i chuét cã bÞ nhÊn kh«ngPopupMenu mnuRec, 0
' Cho hiÓn thÞ menu mnuRecEnd If
End Sub
NhÊn F5 ch¹y thö b¹n sÏ ®îc nh h×nh bªn. Nhng chóng ta l¹i kh«ng muèn c¸i menu nµy lu«n xuÊt hiÖn sê sê trªn form, h·y cho nã biÕn mÊt.

B¹n chØ cÇn cho c¸i menu "®Çu ®µn" mnuRec biÕn mÊt lµ c¸c menu con bªn trong còng mÊt tÝch theo. H·y më hép tho¹i Menu Editor ra, click chän menu Record, bá dÊu check ë CheckBox Visible, click OK. Hµ hµ b©y giê nã biÕn mÊt tiªu råi.

NhÊn F5, ch¹y thö ch¬ng tr×nh, nhÊn nót ph¶i chuét... B©y giê th× thµnh c«ng råi hÐn. H·y ¸p dông c¸ch nµy vµo øng dông Visual Basic cña b¹n ®Ó tiÖn cho ngêi dïng.

HÑn gÆp l¹i ë bµi viÕt kú sau.
chuÒ nhâòt, thaìng hai 03, 2002 06:33:57 CH
NGUYEN THI THANH PHUONG
thphuong@saigon.vnn.vn
PcLeHoan
1996 - 2002
Mirror :
http://www.pclehoan.com
Mirror :
http://www.lehoanpc.net
Mirror :
http://www.ktlehoan.com