作為一個(gè)VB愛(ài)好者,一個(gè)人在黑暗中摸索真是太累了?,F(xiàn)將我摸索的一些心得貢獻(xiàn)給大家,希望起拋磚引玉的作用(我用的是VISUAL BASIC 50中文版)。
1.問(wèn)題:有一程序含有兩個(gè)Form,其中Form2的Picture屬性為一張BMP位圖,而以下是Form1顯示Form2的程序:
Form2Show
'延遲2秒
Time1=Timer
While Timer-Time1<2
Wend
以上程序的目的是希望顯示Form2的圖片兩秒之后,F(xiàn)orm1才繼續(xù)執(zhí)行,結(jié)果竟然是2秒之后,F(xiàn)orm2的圖片才顯示出來(lái)。為什么圖片會(huì)延遲顯示呢?
回答:一般而言,繪圖會(huì)比一般的指令費(fèi)時(shí),因此,繪圖指令的優(yōu)先級(jí)較低,也就是說(shuō),直到其他指令都執(zhí)行完畢之后,才會(huì)輪到繪圖指令的執(zhí)行,在以上的Form1程序中,由于Form2Show之后,又執(zhí)行了一個(gè)費(fèi)時(shí)2秒的While循環(huán),因此,F(xiàn)orm2的圖片必須等待2秒鐘,才會(huì)被描繪出來(lái)。
可按如下方法解決:
在While循環(huán)中增加DoEvents,如下:
Form2Show
'延遲2秒
Time1=Timer
While Timer-Time1<2
DoEvents
Wend
DoEvents的作用是短暫地停止執(zhí)行,使得優(yōu)先級(jí)較低的繪圖指令被執(zhí)行,于是Form2的圖片便可以在While循環(huán)執(zhí)行的階段就被顯示出來(lái)。
2.問(wèn)題:在編數(shù)據(jù)庫(kù)程序時(shí),根據(jù)幫助來(lái)聲明變量,如下:
Dim db As Database
Dim rs As Recordset
結(jié)果程序編譯時(shí)VB竟然說(shuō)“用戶定義類(lèi)型未定義”,是何原因呢?
回答:Database及Recordset屬于DAO(Data Access Object)模塊里的,不是VB內(nèi)定的,因此必須將DAO的定義包含在“引用中”,VB才會(huì)認(rèn)得Database及Recordset,操作方法是選取功能表的“工程(P)”,待出現(xiàn)“引用(N)”窗時(shí),再選取Microsoft DAO 30 Object Library或Microsoft DAO 25/30 Compatibility Library(兼容Access 20以前的版本)。(如果使用的是16位版本的VB,則選取Microsoft DAO 25 Object Library)
3.問(wèn)題:我想控制I/O,VB是否有類(lèi)似Quick BASIC的INP、OUT指令可使用?
回答:VB并無(wú)INP及OUT的指令可用,即使是Windows的API函數(shù)也沒(méi)有類(lèi)似的函數(shù),原因是Windows不希望應(yīng)用程序直接控制硬件。如果想控制RS232的通訊口,則VB專(zhuān)業(yè)版(或企業(yè)版)有現(xiàn)成的“MSComm”控件可用。
4.問(wèn)題:如何創(chuàng)建橢圓形的窗體?
回答:當(dāng)然是用Win32 API函數(shù)了,用VB50中文版的API文本查看器將下列API函數(shù)加入窗體的通用代碼中,就可以做一個(gè)橢圓窗口。
Private Declare Function CreateEllipticRgn Lib ″gdi32″(ByVal X1 As Long,ByVal Y1 As Long,ByVal X2 As Long,ByVal Y2 As Long)As Long
Private Declare Function SetWindowRgn Lib ″user32″(ByVal hWnd As Long,ByVal hRgn As Long,ByVal bRedraw As Boolean)As Long
在Form_Load()窗體中加入如下代碼:
Private Sub Form_Load()
Show
SetWindowRgn hWnd,CreateEllipticRgn(0,0,300,200),True
End Sub
上述代碼可以創(chuàng)建一個(gè)橢圓形狀的窗口。
更多輔導(dǎo)資料請(qǐng)關(guān)注考試大計(jì)算機(jī)等級(jí)站。
1.問(wèn)題:有一程序含有兩個(gè)Form,其中Form2的Picture屬性為一張BMP位圖,而以下是Form1顯示Form2的程序:
Form2Show
'延遲2秒
Time1=Timer
While Timer-Time1<2
Wend
以上程序的目的是希望顯示Form2的圖片兩秒之后,F(xiàn)orm1才繼續(xù)執(zhí)行,結(jié)果竟然是2秒之后,F(xiàn)orm2的圖片才顯示出來(lái)。為什么圖片會(huì)延遲顯示呢?
回答:一般而言,繪圖會(huì)比一般的指令費(fèi)時(shí),因此,繪圖指令的優(yōu)先級(jí)較低,也就是說(shuō),直到其他指令都執(zhí)行完畢之后,才會(huì)輪到繪圖指令的執(zhí)行,在以上的Form1程序中,由于Form2Show之后,又執(zhí)行了一個(gè)費(fèi)時(shí)2秒的While循環(huán),因此,F(xiàn)orm2的圖片必須等待2秒鐘,才會(huì)被描繪出來(lái)。
可按如下方法解決:
在While循環(huán)中增加DoEvents,如下:
Form2Show
'延遲2秒
Time1=Timer
While Timer-Time1<2
DoEvents
Wend
DoEvents的作用是短暫地停止執(zhí)行,使得優(yōu)先級(jí)較低的繪圖指令被執(zhí)行,于是Form2的圖片便可以在While循環(huán)執(zhí)行的階段就被顯示出來(lái)。
2.問(wèn)題:在編數(shù)據(jù)庫(kù)程序時(shí),根據(jù)幫助來(lái)聲明變量,如下:
Dim db As Database
Dim rs As Recordset
結(jié)果程序編譯時(shí)VB竟然說(shuō)“用戶定義類(lèi)型未定義”,是何原因呢?
回答:Database及Recordset屬于DAO(Data Access Object)模塊里的,不是VB內(nèi)定的,因此必須將DAO的定義包含在“引用中”,VB才會(huì)認(rèn)得Database及Recordset,操作方法是選取功能表的“工程(P)”,待出現(xiàn)“引用(N)”窗時(shí),再選取Microsoft DAO 30 Object Library或Microsoft DAO 25/30 Compatibility Library(兼容Access 20以前的版本)。(如果使用的是16位版本的VB,則選取Microsoft DAO 25 Object Library)
3.問(wèn)題:我想控制I/O,VB是否有類(lèi)似Quick BASIC的INP、OUT指令可使用?
回答:VB并無(wú)INP及OUT的指令可用,即使是Windows的API函數(shù)也沒(méi)有類(lèi)似的函數(shù),原因是Windows不希望應(yīng)用程序直接控制硬件。如果想控制RS232的通訊口,則VB專(zhuān)業(yè)版(或企業(yè)版)有現(xiàn)成的“MSComm”控件可用。
4.問(wèn)題:如何創(chuàng)建橢圓形的窗體?
回答:當(dāng)然是用Win32 API函數(shù)了,用VB50中文版的API文本查看器將下列API函數(shù)加入窗體的通用代碼中,就可以做一個(gè)橢圓窗口。
Private Declare Function CreateEllipticRgn Lib ″gdi32″(ByVal X1 As Long,ByVal Y1 As Long,ByVal X2 As Long,ByVal Y2 As Long)As Long
Private Declare Function SetWindowRgn Lib ″user32″(ByVal hWnd As Long,ByVal hRgn As Long,ByVal bRedraw As Boolean)As Long
在Form_Load()窗體中加入如下代碼:
Private Sub Form_Load()
Show
SetWindowRgn hWnd,CreateEllipticRgn(0,0,300,200),True
End Sub
上述代碼可以創(chuàng)建一個(gè)橢圓形狀的窗口。
更多輔導(dǎo)資料請(qǐng)關(guān)注考試大計(jì)算機(jī)等級(jí)站。