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