VB編程的必備技巧
發(fā)表時間:2024-02-22 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]網(wǎng)絡(luò)幻想狂[OICQ:8762220] 對編程者來說,VB很容易上手,但要深入、靈活地駕馭它還要下一番功夫。筆者在這里介紹幾個較為典型的編程技巧,希望能對廣大VB愛好者有所幫助。 一.怎樣創(chuàng)建自定義的光標(biāo) 當(dāng)在設(shè)計一個應(yīng)用程序時,Visual Basic允許程序員將許多控件的MousePoin...
網(wǎng)絡(luò)幻想狂[OICQ:8762220]
對編程者來說,VB很容易上手,但要深入、靈活地駕馭它還要下一番功夫。筆者在這里介紹幾個較為典型的編程技巧,希望能對廣大VB愛好者有所幫助。
一.怎樣創(chuàng)建自定義的光標(biāo)
當(dāng)在設(shè)計一個應(yīng)用程序時,Visual Basic允許程序員將許多控件的MousePointer屬性設(shè)計成12個預(yù)先定義好的鼠標(biāo)光標(biāo)之一。然而,有些程序員或許會希望顯示一個預(yù)定義形狀之外的光標(biāo)。本文說明如何創(chuàng)建一個不同的鼠標(biāo)指針(光標(biāo)),包括為一個沒有MousePointer屬性的控件創(chuàng)建光標(biāo)。
要在Visual Basic應(yīng)用程序中將光標(biāo)(鼠標(biāo)指針)改變成個不同的形狀,可以添加代碼來改變希望監(jiān)視的控件的MouseMove和DragOver事件。
MouseMove事件所包含的代碼用于觸發(fā)該控件的Drag方法。當(dāng)鼠標(biāo)在被選中的控件上移動的時候,輪流顯示新的鼠標(biāo)指針。
當(dāng)鼠標(biāo)指針離開該控件時,則DragOver事件被觸發(fā)。在Visual Basic程序中,可以重新復(fù)位此Drag屬性,以便以前的鼠標(biāo)指針能夠被再次顯示出來。
下面的樣例程序?qū)崿F(xiàn)當(dāng)鼠標(biāo)指針移動到一個文件列表框控件上時,將其改變成不同的形狀。
首先采用缺省的方法建立Form1。在Form1上添加一個文件列表框控件,采用缺省的方法建立File1。將File1控件的DragIcon屬性設(shè)置為所選擇的.ICO文件。
將如下代碼添加到File1的MouseMove事件中:
Private Sub File1—MouseMove(ButtonAs Integer, Shift As Integer, X As Single, Y As Single)
File1.Drag 1 'icon on
End Sub
將如下代碼添加到Form1的DragOver事件中:
Private Sub Form—DragOver(Source As Control, X As Single, Y As Single, State As Integer)
File1.Drag 0 ′icon off
End Sub
按下F5功能鍵執(zhí)行此程序。得到的運行結(jié)果是:將鼠標(biāo)指針移動到該文件列表框控件上時,程序?qū)阉x中的.ICO文件作為缺省的鼠標(biāo)光標(biāo);將鼠標(biāo)指針離開該控件時,光標(biāo)則會自動恢復(fù)為缺省的形狀。
二.怎樣在窗體上點鼠標(biāo)右鍵產(chǎn)生一個彈出式選單(PopUp Menu)?
大家都知道,在Windows95/98/2000的桌面和許多流行軟件的視窗中,當(dāng)我們點鼠標(biāo)右鍵時,會在鼠標(biāo)的當(dāng)前位置彈出一個快捷選單。許多愛好編程的朋友是不是也希望能在自己的程序里有類似的功能呢?其實,這并不困難。筆者經(jīng)過一番努力,在VB下找出一個通用的方法,供大家分享。
要實現(xiàn)上述功能,需分兩個步驟:
1. 利用VB的選單編輯器(Menu Editor)編輯你希望彈出的選單及子選單,注意,要將選單的Visible屬性設(shè)置為:False。
2. 在窗體(Form1)的MouseDown事件中編寫程序,來激發(fā)編輯好的選單,假設(shè)選單名為PopMenu,程序源碼如下:
Private Sub Form—MouseDown(Button As Integer, Shift As Integer,
X As Single, Y As Single)
If Button = vbRightButton Then
PopMenu.Visible = True
PopupMenu PopMenu
End If
End Sub
上述方法是針對窗體的,我們也可以針對任意控件,用鼠標(biāo)右鍵點擊控件時,也彈出一個快捷選單。方法也很簡單,只要把上述代碼放到相應(yīng)控件的MouseDown事件中,就可以了。
三.怎樣動態(tài)地在窗體上判斷某區(qū)域內(nèi)是否有控件存在?
在筆者的一個小程序中,想在窗體的某個區(qū)域輸出數(shù)據(jù),這就要求在這個區(qū)域內(nèi)不能有其他控件存在,那么,怎么才能知道在窗體的某個區(qū)域內(nèi),是否有控件存在呢?
為了判斷在窗體的某個區(qū)域中,是否含有控件,我們可以利用以下VB程序來實現(xiàn):
Function GetControl(x1 As Single, y1 As Single, x2 as Single, y2 as Single) As Control
Dim Control as Control
For Each Control In Form1
With Control
If (x1 〈= .Left) And (x2 〉= .Left) And _
(y1 〈= .Top) And (y2 〉= .Top) Or _
(x1 〈=.Left + Width) And (x2 〉= .Left + Width) And _
(y1 〈= .Top) And (y2 〉= .Top) Or _
(x1 〈= .Left) And (x2 〉= Left) And _
(y1 〈= .Top + Height) And (y2 〉= .Top + Height) Or _
(x1 〈= . Left + Width) And (x2 〉= .Left + Width) And _
(y1 〈= .Top + Height) And (y2 〉= .Top + Height) Then
Set GetControl = Control
Exit Function
End If End With
Next
Set GetControl = Nothing
End Function
注:(x1, y1)和(x2, y2)分別為選定矩形區(qū)域的左上角和右下角點的坐標(biāo)值。
該程序通過計算窗體上所有控件的四個角的位置來判斷控件是否與選定區(qū)域相交,并返回相交的控件。
四.獲取和修改計算機(jī)名字的方法
在Win 95/98/2000中,計算機(jī)有一個名字。運行regedit,在“HKEY-LOCAL-MACHINE\System\CurrentControlSet\control\ComputerName\ComputerName”中將發(fā)現(xiàn)“ComputerName”=“Default”( 或其它字符串),在regedit下可以查看和修改這個名字。我們還可在程序中通過Win32API提供的GetComputerName、SetComputerName這兩個函數(shù)來查看和修改計算機(jī)的名字。下面以VB為例來探討如何編寫一個可查看和修改計算機(jī)名字的程序。
1.插入一個新模塊,在其中添加如下代碼:
′聲明 GetComputerName
Declare Function GetComputerName Lib″kernel 32″Alias″GetComputerNameA″(Byval lpBuffer As String,nSize As Long)As Long
′聲明 SetComputerName
Declare Function SetComputerName Lib″kernel 32″Alias ″SetComputerNameA″(Byval lp ComputerName As String)As Long
′定義一個獲取計算機(jī)名字的函數(shù)
Public Function GetCName (CName) As Boolean
Dim sComputerName As String '計算機(jī)的名字
Dim lComputerName As Long
'計算機(jī)名字的長度
Dim lResult As Long
'GetComputerName的返回值
Dim RV As Boolean
′GetCName返回值,若為TRUE則表示操作成功
lComputerNameLen=256
sComputerName=Space (lComputerNameLen)
lResult=GetComputerName (sComputerName,lCompputerNameLen)
If lResult 〈〉0 Then Cname=Left$ (sComputerName,lComputerNameLen)
RV=True
Else RV=False
End If
GetCName=RV
End Function
′定義一個修改計算機(jī)名字的函數(shù)
Public Function SetCName (CName ) As Boolean
Dim lResult As Long
Dim RV As Boolean
lResult=SetComputerName (CName)
If lResult 〈〉0 Then
RV=True′修改成功
Else RV=False
End If
SetCName=RV
End Function
2.在窗體中添加一命令按鈕Command1,雙擊該按鈕并在其中添加如下代碼:
Sub Command1-Click ()
DIM CN AS String
x=GetCName (CN)
Print ″This Computer Name is :″,CN
CN=″MYCOMPUTER″
x=SetCName (CN )
Print ″Now the Computer name is :″,CN
End Sub
OK, 保存上述設(shè)置和代碼,然后按F5運行該程序。
五.給VB控件PictureBox加滾動條的方法
用過PictureBox控件的朋友都知道,在其中我們可以加載圖片。當(dāng)圖片不是很大時,可能還不會有什么問題,但是,如果所加載的圖片比PictureBox大時,我們只能看到圖片的一部分,那么,怎么才能看到其他的部分呢?
為了解決上述問題,我們可以在圖片框(PictureBox)內(nèi)部加上水平和垂直滾動條,利用滾動條來顯示看不到的圖片。具體方法如下:
首先給工程(Project)添加一個OCX控件,單擊選單上的工程(Project)選單項,在彈出的下拉選單中點擊組件(Components),選中其中的“Microsoft Common Dialog Control 5.0”,確定完成加載工作;然后畫一個PictureBox,采用VB提供的默認(rèn)名字Picture1, 再在Picture1上面畫一個PictureBox,默認(rèn)名字為Picture2,注意別忘了設(shè)置:Picture2.AutoSize=TRUE;接著,加上水平和垂直滾動條,默認(rèn)名字分別為:HScroll1,VScroll1;以后加載圖形到Picture2上,就可以了;最后,在窗體中引入其它控件:一個按鈕(Command),默認(rèn)名為Command1和一個“Microsoft Common Dialog Control”,默認(rèn)名為CommonDialog1。具體VB代碼如下:
Private Sub Form—Load()
Picture2.Left = 0
Picture2.Top = 0
Picture2.Width = Picture1.Width
Picture2.Height = Picture1.Height
VScroll1.Min = 0
HScroll1.Min = 0
HScroll1.Min = 0
VScroll1.Max = Picture2.Height - Picture1.Height
HScroll1.Max = Picture2.Width - Picture1.Width
If HScroll1.Max 〈 0 Then HScroll1.Enabled = False
If VScroll1.Max 〈 0 Then VScroll1.Enabled = False
End Sub
Private Sub Command—Click()
On Error GoTo ErrExit
CommonDialog1.Filter = "Bitmap file(*.bmp) *.bmp All File(*.*) *.*"
CommonDialog1.FilterIndex = 1
CommonDialog1.ShowOpen
Picture2.Picture = LoadPicture(CommonDialog1.filename)
VScroll1.Min = 0
HScroll1.Min = 0
VScroll1.Max = Picture2.Height - Picture1.Height
HScroll1.Max = Picture2.Width - Picture1.Width
If HScroll1.Max 〈 0 Then HScroll1.Enabled = False
If VScroll1.Max 〈 0 Then VScroll1.Enabled = False
ErrExit:
End Sub
Private Sub HScroll1—Change()
Picture2.Left = -HScroll1.Value
End Sub
Private Sub VScroll1—Change()
Picture2.Top = -VScroll1.Value
End Sub
該程序通過點擊Command1按鈕,在彈出的對話框中選擇一個圖形文件加載到Picture2中,利用水平和垂直滾動條就可以實現(xiàn)圖片的滾動。
六.用VB做聊天程序的方法
所謂“聊天”是指兩個程序能夠發(fā)送數(shù)據(jù)給對方。這個程序涉及到數(shù)據(jù)通訊的知識,仿佛很復(fù)雜,不過,由于VB給我們提供了一個Winsock控件,問題就變得很簡單了。
首先編寫“聊天(主機(jī))”程序。在窗體里添加Winsock控件,并設(shè)置其Protocol屬性為1-SckUDPProtocol,其他屬性為缺省值。接著添加兩個標(biāo)簽和兩個文本框,設(shè)置兩個標(biāo)簽的標(biāo)題屬性分別為“接收窗”和“發(fā)送窗”;兩個文本框的標(biāo)題屬性為空。最后編寫代碼:
1.“聊天(主機(jī))”
Private Sub Form—Load()
′設(shè)置網(wǎng)絡(luò)地址
Winsock1.LocalPort=1024
Winsock1.RemoteHost="202.96.6.1"
Winsock1.RemotePort=1999
End Sub
Private Sub Text1—Change()
′發(fā)送用戶輸入的內(nèi)容
Winsock1.SendData Text1.Text
End Sub
Private Sub Winsock1—DataArrival(Byval bytesTotal As Long)
Dim rec As String
′接收對方數(shù)據(jù)并在文本框內(nèi)顯示
Winsock1.GetData rec, vb String
Text2.Text=rec
End Sub
2.“聊天(副機(jī))”
Private Sub Form_Load()
′設(shè)置網(wǎng)絡(luò)地址
Winsock1.LocalPort=1999
Winsock1.RemoteHost="202.96.6.1"
Winsock1.RemotePort=1024
其他部分程序與(主機(jī))相同。最后將兩個程序存盤,并編譯成執(zhí)行(.Exe)文件。現(xiàn)在就可以使用這個程序進(jìn)行對話了。
七.文本框中文本的某一特定字符或字符串同時高亮顯示的方法
由于普通TextBox控件不支持不連續(xù)字符串的同時高亮顯示,所以我們選擇RichTextBox控件。單擊工程(Project)選單項,在彈出的下拉選單中單擊組件(Components)選單項,從彈出的對話框中選擇Microsoft Rich Textbox Control 5.0復(fù)選框,確定加載RichTextBox控件。
新建(New)一個工程,在窗體(Form)上添加一個RichTextBox控件和兩個Command(按鈕)控件,都采用系統(tǒng)默認(rèn)的Name屬性值;設(shè)置RichTextBox的Text屬性值為空,Command1和Command2的Caption屬性值分別設(shè)為“輸入文本”和“選擇字符串”。最后,添加如下VB代碼:
Private Sub Command1—Click()
Dim str As String
Dim Text As String
str=″輸入文本″
Text=InputBox(str)
RichTextBox1.Text=Text
End Sub
Private Sub Command2—Click()
Dim str As String
Dim Text As String
Dim Position As Integer
Dim Lenth As Integer
str=″輸入要高亮顯示的字符串″
Text=InputBox(str)
If Text 〈〉 ″″ Then
Position=InStr(RichTextBox1.Text, Text)-1
Lenth=Len(Text)
RichTextBox1.SelStart=Position
RichTextBox1.SelLength=Lenth
RichTextBox1.SelColor=RGB(255,0,0)
Do While InStr(Position+Lenth+1, RichTextBox1.Text, Text) 〈〉 0
Position=InStr(Position+Lenth+1, RichTextBox1.Text, Text)-1
RichTextBox1.SelStart=Position
RichTextBox1.SelLength=Lenth
RichTextBox1.SelColor=RGB(255,0,0)
Loop
End If
End Sub
按F5執(zhí)行程序,單擊“輸入文本”按鈕,在彈出的對話框中輸入一些文本,確定后,剛剛輸入的文本將顯示在RichTextBox中;再單擊“選擇字符串”按鈕,在彈出的對話框中輸入你希望高亮顯示的字符串,確定。