电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> VB编程>>VB基本语法讲座及相关函数介绍之六:

VB基本语法讲座及相关函数介绍之六

来源:网络 | 2007-1-26 | (有6426人读过)

如何让画线的程序具有预览的功能?(ch03\练习7.vbp)
 所谓“预览”意思是移动鼠标时,可以看到要画的线,而当放开鼠标时,决定最终直线。
 分析:
 定义  全程变量   (x0,y0)   表示画直线起始点
                                   (x1,y1)  表示上一次画直线的终点坐标。
 1)利用mousedown获得画直线起始点
  x0=x,  y0=y
  并将画图方式选择为:
  me.drawmode=vbnotxorpen      (原值:vbcopypen)
  含义:同一图形(在同一位置上)画两次等于没有画。
 2)利用mousemove(鼠标移动时发生事件)
 首先注意画直线起始点确定没有?(有起始点才能画直线  isempty(x0)=false)
  第一次(从起始点)移鼠标时画直线(isempty(x1)=true)
  line(x0,y0)-(x,y)   
  x1=x,   y1=y

  第二次(及以上)移动鼠标时:  首先将上一次画直线擦去
               (isempty(x1)=false   )                         line (x0,y0)-(x1,y1)
                                                                          然后再画新的直线
                                                                      line(x0,y0)-(x,y)
                                                                           x1=x,    y1=y
 3)利用mouseup事件捕获画直线最后一点。
  如果有直线起始点(x0,y0)且有(x1,y1) 
  首先擦去已画过直线   line(x0,y0)-(x1,y1)
                                                 x1=empty
  将画笔改回初始值:me.drawmode=vbcopypen
  画直线:line(x0,y0)-(x,y)
     x0=empty
 4)利用isempty(变量名)判断是否有直线的起始点及上一次画直线的终止点。(ch03\练习7.vbp)
对话框的设计
 对话框是VB应用程序与用户进行信息交换的窗口,可以使用VB提供函数,msgbox函数或inputbox函数作为对话框,亦可以使用commondialog控件设计对话框,甚至用户自已设计对话框。
 

 Inputbox函数
  inputbox(prompt [,title])
 prompt:用于设定显示在对话框中的信息内容。
 Title:是一个可选参数,用于设定显示在对话框中标题的信息内容。
 函数返回值:返回用户输入字符串,如果用户单击cancel则返回空字符串。
 注意:使用inputbox函数作对话框,一般只用于简单数据输入到窗口。
 例:编写一个具有预览功能画弧程序。(ch03\练习10.vbp)
 在对象上画弧的方法:
 对象名.circle  (x,y),r,c,sang,eang
 1)在通用中定义全局变量
 Dim ang1, ang2 As Single
 Dim r1 As Single
 Dim x0, y0 As Single
 2)在窗体上放置一个命令按钮,单击命令按钮开始画弧,输入画弧起始角及终止角。

 

 Private Sub Command1_Click()
 pi = 3.14
 ang1 = pi * (Val(InputBox("输入起始角:"))) / 180
 ang2 = pi * (Val(InputBox("输入终止角:"))) / 180
 End Sub
 3)在mousedown事件中获得画弧的园心。
 Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
 x0 = X
 y0 = Y
 Me.DrawMode = vbNotXorPen
 End Sub
 4)在mousemove事件中,将上一次弧擦掉,画新的弧。


 Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
 If Not IsEmpty(x0) Then
     If Not IsEmpty(r1) Then
            Circle (x0, y0), r1, , ang1, ang2
              End If
       r1 = ((X - x0) ^ 2 + (Y - y0) ^ 2) ^ 0.5
        Circle (x0, y0), r1, , ang1, ang2
     End If
End Sub

 5)在mouseup  事件中画出最后图形
 Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
 If Not IsEmpty(x0) Then
    If Not IsEmpty(r1) Then
         Circle (x0, y0), r1, , ang1, ang2
    End If
    Me.DrawMode = vbCopyPen
    r1 = ((x0 - X) ^ 2 + (y0 - Y) ^ 2) ^ 0.5
   Circle (x0, y0), r1, , ang1, ang2
   x0 = Empty
       r1=empty
   End If
   End Sub

 3.7 主动模式的程序设计
 除了“事件驱动”程序设计模式之外,VB也允许我们将程序设置成“主动模式”。主动模式的程序与以前我们所讲DOS程序很相似。
 
如何将程序设置为主动模式
 1)启动VB,建立一个“标准EXE”工程,选取“工程/工程名称属性”菜单命令,在“工程属性”对话框中,将“启动对象”设置为“sub  main()”
 2)利用菜单的“工程/添加模块”命令新增一个模块,在标准模块的代码窗口中输入sub  main子程序。
 3)执行这个程序。
 例:建立一个工程名为:主动 .vbp 工程,并且在该工程中建立一个submain()子程序,读取用户数据,且设置为启动对象。
 1)启动VB,在“工程/工程属性”中将“启动对象设置为:submain
 2)在“工程/添加模块”中添加一个标准模块。在标准模块代码窗口中输入submain子程序。
 


 sub  main()
 dim  s   as  string
 s=inputbox(“ 请输入数据“)
 msgbox  “您输入了”  +  s
 end  sub

doevents与主动模式程序
 对VB程序而言,主动模式与事件驱动模式是可以并存的,如果我们所编写的程序只含有主动模式程序代码,将语句一行一行地编写成主程序和相关子程序即可。
 但是如果所编写的程序同时有主动模式和事件驱动模式的程序代码,那么就不应该让主动模式的程序执行费时很多工作,因为主动模式的程序执行时,其他事件驱动模式的程序代码将被锁住,而无法执行。
 当然有时候还是很难避免让主动模式的程序执行费时很久的工作,就必须在主程序中插入doevents语句使主程序做间歇性的休息,允许其他的事件驱动模式的程序代码有机会被执行。

 例:打开ch03\doevets.vbp工程


 

VB编程热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2024 电脑爱好者 版权所有 备案号:鲁ICP备09059398号