作為一個VB愛好者,一個人在黑暗中摸索真是太累了。現將我摸索的一些心得貢獻給大家,希望起拋磚引玉的作用(我用的是VISUALBASIC50中文版)。
1.問題:有一程序含有兩個Form,其中Form2的Picture屬性為一張BMP位圖,而以下是Form1顯示Form2的程序:
Form2Show
'延遲2秒
Time1=Timer
WhileTimer-Time1<2
Wend
以上程序的目的是希望顯示Form2的圖片兩秒之後,Form1才繼續執行,結果竟然是2秒之後,Form2的圖片才顯示出來。為什麼圖片會延遲顯示呢?
回答:一般而言,繪圖會比一般的指令費時,因此,繪圖指令的優先級較低,也就是說,直到其他指令都執行完畢之後,才會輪到繪圖指令的執行,在以上的Form1程序中,由於Form2Show之後,又執行了一個費時2秒的While循環,因此,Form2的圖片必須等待2秒鐘,才會被描繪出來。
可按如下方法解決:
在While循環中增加DoEvents,如下:
Form2Show
'延遲2秒
Time1=Timer
WhileTimer-Time1<2
DoEvents
Wend
DoEvents的作用是短暫地停止執行,使得優先級較低的繪圖指令被執行,於是Form2的圖片便可以在While循環執行的階段就被顯示出來。
2.問題:在編數據庫程序時,根據幫助來聲明變量,如下:
DimdbAsDatabase
DimrsAsRecordset
結果程序編譯時VB竟然說“用戶定義類型未定義”,是何原因呢?
回答:Database及Recordset屬於DAO(DataAccessObject)模塊裡的,不是VB內定的,因此必須將DAO的定義包含在“引用中”,VB才會認得Database及Recordset,操作方法是選取功能表的“工程(P)”,待出現“引用(N)”窗時,再選取MicrosoftDAO30ObjectLibrary或MicrosoftDAO25/30CompatibilityLibrary(兼容Access20以前的版本)。(如果使用的是16位版本的VB,則選取MicrosoftDAO25ObjectLibrary)
3.問題:我想控制I/O,VB是否有類似QuickBASIC的INP、OUT指令可使用?
回答:VB並無INP及OUT的指令可用,即使是Windows的API函數也沒有類似的函數,原因是Windows不希望應用程序直接控制硬件。如果想控制RS232的通訊口,則VB專業版(或企業版)有現成的“MSComm”控件可用。
4.問題:如何創建橢圓形的窗體?
回答:當然是用Win32API函數了,用VB50中文版的API文本查看器將下列API函數加入窗體的通用代碼中,就可以做一個橢圓窗口。
PrivateDeclareFunctionCreateEllipticRgnLib″gdi32″(ByValX1AsLong,ByValY1AsLong,ByValX2AsLong,ByValY2AsLong)AsLong
PrivateDeclareFunctionSetWindowRgnLib″user32″(ByValhWndAsLong,ByValhRgnAsLong,ByValbRedrawAsBoolean)AsLong
在Form_Load()窗體中加入如下代碼:
PrivateSubForm_Load()
Show
SetWindowRgnhWnd,CreateEllipticRgn(0,0,300,200),True
EndSub
上述代碼可以創建一個橢圓形狀的窗口。->