VB的“问”与“答”

2008-02-23 06:50:40来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

作为一个VB爱好者,一个人在黑暗中摸索真是太累了。现将我摸索的一些心得贡献给大家,希望起抛砖引玉的作用(我用的是VISUAL BASIC 5?0中文版)。
   1.问题:有一程序含有两个Form,其中Form2的Picture属性为一张BMP位图,而以下是Form1显示Form2的程序:
   Form2?Show
   '延迟2秒
   Time1=Timer
   While Timer-Time1<2
   Wend
   以上程序的目的是希望显示Form2的图片两秒之后,Form1才继续执行,结果竟然是2秒之后,Form2的图片才显示出来。为什么图片会延迟显示呢?
   回答:一般而言,绘图会比一般的指令费时,因此,绘图指令的优先级较低,也就是说,直到其他指令都执行完毕之后,才会轮到绘图指令的执行,在以上的Form1程序中,由于Form2?Show之后,又执行了一个费时2秒的While循环,因此,Form2的图片必须等待2秒钟,才会被描绘出来。
   可按如下方法解决:
   在While循环中增加DoEvents,如下:
   Form2?Show
   '延迟2秒
   Time1=Timer
   While Timer-Time1<2
   DoEvents
   Wend
   DoEvents的作用是短暂地停止执行,使得优先级较低的绘图指令被执行,于是Form2的图片便可以在While循环执行的阶段就被显示出来。
   2.问题:在编数据库程序时,根据帮助来声明变量,如下:
   Dim db As Database
   Dim rs As Recordset
   结果程序编译时VB竟然说“用户定义类型未定义”,是何原因呢?
   回答:Database及Recordset属于DAO(Data Access Object)模块里的,不是VB内定的,因此必须将DAO的定义包含在“引用中”,VB才会认得Database及Recordset,操作方法是选取功能表的“工程(P)”,待出现“引用(N)”窗时,再选取Microsoft DAO 3?0 Object Library或Microsoft DAO 2?5/3?0 Compatibility Library(兼容Access 2?0以前的版本)。(如果使用的是16位版本的VB,则选取Microsoft DAO 2?5 Object Library)
   3.问题:我想控制I/O,VB是否有类似Quick BASIC的INP、OUT指令可使用?
   回答:VB并无INP及OUT的指令可用,即使是Windows的API函数也没有类似的函数,原因是Windows不希望应用程序直接控制硬件。如果想控制RS232的通讯口,则VB专业版(或企业版)有现成的“MSComm”控件可用。
   4.问题:如何创建椭圆形的窗体?
   回答:当然是用Win32 API函数了,用VB5?0中文版的API文本查看器将下列API函数加入窗体的通用代码中,就可以做一个椭圆窗口。
   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
   上述代码可以创建一个椭圆形状的窗口。

上一篇: VB编程俱乐部问答
下一篇: 如何实现VB程序登录密码加密

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:用VB实现任意修改Win桌面背景

下一篇:VB入门教程之四