![]()
![]()
Nh÷ng
c©u hái vÒ Visual Basic
(Ky 8)
Xem bai viet bang font Unicode
1. Ghi c¸c thiÕt ®Æt vµo Registry
Chóng ta sÏ dïng hµm GetSetting & lÖnh SaveSetting ®Ó thùc hiÖn nhiÖm vô nµy. VÞ trÝ ghi ®äc gi¸ trÞ cña chóng trong Registry n»m ë: HKEY_CURRENT_USER\Software\VB and VBA Program Settings
* Hµm GetSetting: Dïng ®Ó ®äc mét trÞ tõ Registry. Cã có ph¸p nh sau:
GetSetting(appname, section, key[, default])
Trong ®ã:
AppName: N¬i mµ hµm nµy sÏ t×m ®Õn ®Ó ®äc, thêng nªn ®Æt lµ tªn cña øng dông. B¾t buéc cã.
Section: Trong mét AppName b¹n cã thÓ t¹o nhiÒu Section kh¸c nhau, mçi Section lu tr÷ mét nhãm th«ng tin cã liªn quan víi nhau ®Ó dÔ qu¶n lý (gièng nh t¹o th môc con vËy). B¾t buéc cã.
Key: Trong mçi Section b¹n cã thÓ t¹o nhiÒu key, mçi key lu 1 trÞ. B¾t buéc cã.
Default: TrÞ mÆc nhiªn mçi khi kh«ng t×m thÊy Key cÇn ®äc trong Registry. Tham sè nµy cã thÓ cã hay kh«ng còng ®îc. NÕu kh«ng cã trÞ mÆc nhiªn sÏ lµ mét chuçi ræng ("").
* LÖnh SaveSetting: Ghi th«ng tin vµo Registry.
SaveSetting appname, section, key, setting
C¸c th«ng sè t¬ng tù nh hµm GetSetting nhng kh«ng cã ®èi sè Default. Nhng l¹i cã ®èi sè Setting lµ trÞ sÏ ®îc ghi vµo Registry cho mçi Key.
B¹n h·y xem h×nh ®Ó biÕt râ h¬n c¸ch tæ chøc c¸c th«ng tin cña Registry & c¸ch ghi c¸c thiÕt ®Æt cña lÖnh SaveSetting.

C¸c trÞ ®îc lu trong Registry
ThÝ dô minh häa: Lu tr¹ng th¸i cña form tríc khi tho¸t
Tr¹ng th¸i hiÓn thÞ cña form bao gåm: Maximize, Minimize, Normal, Top, Left, Width, Height. Mét vÞ trÝ thuËn tiÖn nhÊt ®Ó lu c¸c th«ng sè trªn lµ Registry cña Windows.
VËy ®Ó gi÷ l¹i tr¹ng th¸i cña form th× khi form ph¸t sinh sù kiÖn Unload b¹n h·y ghi l¹i c¸c th«ng sè vÒ tr¹ng th¸i. Khi më form b¹n chØ cÇn ®äc l¹i c¸c th«ng sè ®· lu tr÷. VËy lµ ta cã thÓ gi÷ l¹i ®îc tr¹ng th¸i form tríc ®ã.
§Ó thÝ dô t«i sÏ minh häa c¸ch lu l¹i vi trÝ cña Form. H·y khëi ®éng VB & t¹o 1 project míi, cã 1 form tªn lµ Form1, gâ vµo code sau ®©y:
Option Explicit
Private Sub Form_Load()
On Error Resume Next 'Dßng
nµy h·y gâ sau.
Me.Left = GetSetting("ChuongTrinh_ViDu", "ViTriForm", "X")
Me.Top = GetSetting("ChuongTrinh_ViDu", "ViTriForm", "Y")
End Sub
Private Sub Form_Unload(Cancel As Integer)
SaveSetting "ChuongTrinh_ViDu", "ViTriForm", "X", Me.Left
SaveSetting "ChuongTrinh_ViDu", "ViTriForm", "Y", Me.Top
End Sub
B©y giê b¹n cho ch¹y thö ch¬ng tr×nh, khi ch¬ng tr×nh ch¹y b¹n h·y thö di chuyÓn form ®i n¬i kh¸c, dõng ch¬ng tr×nh, sau ®ã cho ch¹y l¹i, b¹n sÏ thÊy form xuÊt hiÖn ngay ®óng vÞ trÝ mµ nã ®· n»m tríc khi tho¸t.
Vµo Registry ®Ó kiÓm nghiÖm

Tuy nhiªn khi thö ch¬ng tr×nh b¹n sÏ thÊy b¸o lçi, lý do lµ cha cã th«ng tin trong Registry ®Ó ®äc vµo 2 properties Left & Top khi ch¹y lÇn ®Çu.
§Ó kh¾c phôc lçi nµy b¹n cã thÓ dïng ®Õn trÞ Default cña hµm GetSetting. Riªng t«i, t«i chän c¸ch ®Æt thªm dßng On Error Resume Next vµo dßng ®Çu tiªn cña sù kiÖn Form_Load.
2. Lµm cho ch¬ng tr×nh gièng trang Web
NÕu b¹n c¶m thÊy qu¸ ch¸n chêng víi mÊy c¸i nót lÖnh Command Button, xin h·y t¹o cho ch¬ng tr×nh cña m×nh nh÷ng siªu liªn kÕt (Hyper Links) gièng nh trang Web. C¸ch lµm cùc kú dÔ:
H·y dïng mét Label Box, ®Æt mét Caption thÝch hîp, råi sau ®ã mµ tïy ý xö lý dùa trªn c¸i sù kiÖn Mouse_Move cña nã.
VÝ du nh khi rª mouse ®Õn th× dßng Text trong Labelbox ®îc g¹ch ch©n b¹n lµm nh sau:
T¹o project míi, cã Form tªn lµ Form1, trªn ®ã ®Æt mét Labelbox tªn lµ Label1. Më cöa sæ code gâ vµo ®o¹n code sau:
Option Explicit
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Label1.FontUnderline = False
End Sub
Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label1.FontUnderline = True
End Sub
Qua ®o¹n code trªn ta cã nhËn xÐt sau:
- Khi mouse ®îc rª ®Õn Label1 th× ph¸t sinh sù kiÖn mouse_move trªn Label nµy lµm cho dßng Text cña nã bÞ g¹ch ch©n (nh lµ Hyper link thø thiÖt).
- Khi mouse cßn trªn form, lu«n lu«n x¶y ra sù kiÖn mouse trªn form vµ Label1 bÞ g¸n thuéc tÝnh FontUnderline=False. Do ®ã ta sÏ thÊy khi mouse rêi khái Labelbox tøc th× Text cña nã hÕt bÞ g¹ch ch©n ngay.
Khi
mouse cßn trªn Form
Khi
mouse ®îc rª trªn Labelbox
Tuy nhiªn 1 Hyper link nh vËy cßn h¬i nh¹t nhÏo thiÕu rÊt nhiÒu "h¬ng s¾c Web". B¹n cã thÓ cho nã thªm vµi thay ®æi n÷a nh:
Cßn rÊt nhiÒu thø xin mêi b¹n.

3. Lµm sao ®Ó më tr×nh Browser & Mail mÆc ®Þnh cña Windows ?
B¹n khai b¸o hµm API sau:
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As _
String, ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Khi nµo cÇn dïng chØ viÖc gäi hµm
Dim ret&
ret& = ShellExecute(Me.hwnd, "Open", "http://ilpweb.itgo.com", "", App.Path, 1)
NÕu muèn gäi Mail b¹n chØ cÇn thay ®Þa chØ Web thµnh "mailto:email@site.com" lµ ®îc råi
Chóc b¹n thµnh c«ng
4. §êng dÉn cña ®èi tîng DirListbox vµ App
H·y h·y lu ý thuéc tÝnh Path cña 2 ®èi tîng nµy. ThÝ dô nh b¹n cÇn tham chiÕu ®Õn mét tËp tin tªn lµ Test.txt n»m trong th môc cña ch¬ng tr×nh (gi¶ sö App.path == c:\myapp).
app.path & "\Test.txt" ==> c:\myapp\Test.txt
Nhng nÕu App.path cña b¹n lµ mét th môc gèc cña bÊt kú æ ®Üa nµo, vÝ dô nh c:\ th× nã l¹i thµnh.
app.path & "\Test.txt" ==> c:\\Test.txt
Ch¬ng tr×nh sÏ b¸o lçi ngay lËp tøc. T¬ng tù nh vËy ®èi tîng DirListBox còng bÞ trêng hîp nµy.
Lý do lµ 2 ®èi tîng nµy tr¶ vÒ cho thuéc tÝnh Path c¸c trêng hîp sau:
Khi lËp tr×nh tæng qu¸t ta hay viÕt lµ
App.path & "\Test.txt"
Dir1.path & "\" & File1.Filename
Nh vËy ta thÊy d 1 dÊu \ khi lµ th môc gèc. §Ó gi¶i quyÕt lçi nµy b¹n cã thÓ dïng hµm IIF() hoÆc c©u lÖnh IF
Cô thÓ t«i cã thÓ viÕt nh sau:
Dim F as String
F = Dir1.path & IIF(Len(Dir1.path)=3,""," ") & File1.FileName
Hay
If Len(Dir1=3) then
F = Dir1.path & File1.FileName
else
F = Dir1.path & "\" & File1.FileName
End If
Chóc b¹n thµnh c«ng. T«i lu«n mong nhËn ®îc thËt nhiÒu ý kiÕn ®ãng gãp ®Ó hoµn thiÖn c¸c bµi viÕt sau.
NguyÔn ThÞ Thanh Ph¬ng ilphuong@vol.vnn.vn
PcLeHoan
1996 - 2002
Mirror :
http://www.pclehoan.com
Mirror :
http://www.lehoanpc.net
Mirror :
http://www.ktlehoan.com