作为一个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
上述代码可以创建一个椭圆形状的窗口。->