WEB开发网
开发学院WEB开发综合 VB的“问”与“答” 阅读

VB的“问”与“答”

 2006-02-27 11:53:34 来源:WEB开发网   
核心提示:作为一个VB爱好者,一个人在黑暗中摸索真是太累了,VB的“问”与“答”,现将我摸索的一些心得贡献给大家,希望起抛砖引玉的作用(我用的是VISUALBASIC50中文版),用VB50中文版的API文本查看器将下列API函数加入窗体的通用代码中,就可以做一个椭圆窗口,1.问题:有一程序含有两个Form,其中Form2的
作为一个VB爱好者,一个人在黑暗中摸索真是太累了。现将我摸索的一些心得贡献给大家,希望起抛砖引玉的作用(我用的是VISUALBASIC50中文版)。
  1.问题:有一程序含有两个Form,其中Form2的Picture属性为一张BMP位图,而以下是Form1显示Form2的程序:
  Form2Show
  '延迟2秒
  Time1=Timer
  WhileTimer-Time1<2
  Wend
  以上程序的目的是希望显示Form2的图片两秒之后,Form1才继续执行,结果竟然是2秒之后,Form2的图片才显示出来。为什么图片会延迟显示呢?
  回答:一般而言,绘图会比一般的指令费时,因此,绘图指令的优先级较低,也就是说,直到其他指令都执行完毕之后,才会轮到绘图指令的执行,在以上的Form1程序中,由于Form2Show之后,又执行了一个费时2秒的While循环,因此,Form2的图片必须等待2秒钟,才会被描绘出来。
  可按如下方法解决:
  在While循环中增加DoEvents,如下:
  Form2Show
  '延迟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)”窗时,再选取MicrosoftDAO30ObjectLibrary或MicrosoftDAO25/30CompatibilityLibrary(兼容Access20以前的版本)。(如果使用的是16位版本的VB,则选取MicrosoftDAO25ObjectLibrary)
  3.问题:我想控制I/O,VB是否有类似QuickBASIC的INP、OUT指令可使用?
  回答:VB并无INP及OUT的指令可用,即使是Windows的API函数也没有类似的函数,原因是Windows不希望应用程序直接控制硬件。如果想控制RS232的通讯口,则VB专业版(或企业版)有现成的“MSComm”控件可用。
  4.问题:如何创建椭圆形的窗体?
  回答:当然是用Win32API函数了,用VB50中文版的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
  上述代码可以创建一个椭圆形状的窗口。->

Tags:VB

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接