荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Peter (小飞侠), 信区: Program
标  题: 用Visual Basic处理大幅面工程图
发信站: BBS 荔园晨风站 (Wed Jan 27 17:45:36 1999), 转信


图形和图像以其直观性更容易让人理解和接受,但是,由于受到物理
输出设备(如显示器的分辨率)的限制,因而在基于DOS的PC机上处理大
幅面的工程图形还很不容易。近年来随着Windows的流行,图形图像的
处理可以借助Windows下的GDI技术加以实现。但是,由于涉及到图元
文件、图形设备的无关性以及映射等概念,理解和运用起来有些困难
。而Visual Basic (以下简称VB)语言的出现,使得这个问题迎刃而解

    VB是一种可视化的编程语言,其面向对象和面向事件的编程方法,
使从事Windows编程的程序员从复杂的工作中解脱出来。VB中提供的
丰富的控件,使得编程尤其是对图形图像的处理变得更加简单。
    在VB的基本控件中,与图形图像有关的控件有两个,一个是图片框
(Picture);一个是图像控件(Image)。图片框和图像控件均用于将其
他程序设计好的图像或图标文件装入到VB应用程序界面上显示。一般
图片框比图像框更加灵活,使用时需占用较多的内存,并作较多的处理
。图片框适用于动态环境,图像控件更适合显示静态的图像。
    图片框可以理解为窗体中的窗体,它不仅可以接收其它控件,用以
制作工具条、状态条、工具箱,还可以完成类似框架的功能,为不同的
控件进行分组。框架上不能显示正文和画图, 也不能与图形、图像相
连,而图片框上可以打印并显示正文信息,也可以装入图像,并在其上
绘制各种图形。这些文本、图像以及其他控件可以随图片框一起移动
、删除、拷贝,响应各种操作。
    图像控件一般以静态装入图像,显示在窗体上,图像控件上不能装
其他控件,也不能打印文本及绘制图形。但图像控件占用资源少,且重
画速度比图片框快,同时它还具有放大、缩小图像,以便观察图像细节
的功能。
    充分运用图片框和图像控件的特性,这可以使得大幅面工程图的
处理变得简单易行。下面就结合笔者参与开发的《雷达装备电子维修
手册》(以下简称手册),具体阐述如何来处理大幅面的工程图形。

    图形滚动输出
    在手册中,要求显示雷达系统及各个分系统的原理方框图和原理
图,在原理图上还要求在鼠标移动的过程中实时显示鼠标当前位置上
器件的参数、电路详解图等。由于原理图一般都比较大,所以要求能
够滚动输出。在VB的基本控件中已经提供了两种形式的滚动条:水平
滚动条和垂直滚动条。利用这两种滚动条,再加以简单的程序,就可以
实现图形的滚动输出。
    具体实现如下:新建一个窗体Form1,在工具箱中双击图像控件图
标,就可在窗体上建立起一个图像框Image1;在Properties中设置此图
像框的属性:
    Image1.AutoSize=true
    Image1.Stretch=False
    Image1.Left=0
    Image1.Top=0
    Image1.Picture中放入一幅要显示的位图(bmp文件,也可以在程
序执行的过程中用Load Picture()函数调入),则图像框与窗体的左上
角相吻合且自动按图形的大小而改变自身的大小,但是最大不能超出
窗体的范围。如果图形的大小超出了窗体的范围,那么窗体上能显示
出来的只是图形的左上部分,其余部分不能显示,但是仍然存在。如果
要想看到图形的其他部分,则可选取工具箱中垂直滚动条和水平滚动
条并分别加在窗体的右侧和下侧。在Properties 中设置滚动条的属
性:
    Hscroll1.largeChange=1000(像素点)
    Hscroll1.SmallChange=400
    Vscroll1.LargeChange=1000
    Vscroll1.SmallChange=400
    根据图形的宽和高分别设置Hscroll1.Max和Vscroll1.Max。然后
分别对水平和垂直滚动条编程如下:
    Private Sub HScroll1_Change()
    Image1.Left=-HScroll1.Value
    End Sub
    Private Sub VScroll1_Change()
    Image1.Top=-VScroll1.Value
    End Sub
    这样,在程序执行的过程中,用鼠标单击水平或垂直滚动条,就可
以实现大幅面图形的水平或垂直滚动。当然,用图片框也可以实现同
样的功能,做法相似。
    图形的缩放
    在VB中,图像控件有一个特殊的属性Stretch,利用图像控件的这
个属性就可以轻易地实现图像的缩放。
    具体实现如下:在窗体上创建一个图像框Image1,在Properties中
设置图像框的属性:Im age1.AutoSize=False,Image1.Stretch=True,
在Image1.Picture中放入所要显示的图像名称(bmp文件)。这样,位图
文件就会按照图像框的大小进行缩放,以适应图像的大小。在程序执
行的过程中,当操作者改变了图像框的大小,那么图像框内的图像就会
随着图像框的大小进行缩放。

    有关图形资料的实时显示
    由于在VB的基本控件中,图片框也有类似于窗体的功能,也就是说
可以在图片框上再放置其他的控件,而且这些控件可以随图片框一起
移动、拷贝、删除、响应各种操作,这就使得一些资料的实时显示成
为可能。
    在手册中,要求在原理图上实时地显示出来一些重要元器件的参
数、详细电路图、主要作用、可替换的备件等。由于所要求显示的图
形幅面都比较大,所以首先要利用前面所讲的图形滚动输出的方法装
入原理图。只是在窗体上建立的不能是图像控件,而应该是图片框Pi
cture1,这样才能在其上附加一些其它的控件。
    在Picture1.Picture中放入所要显示的图像名称(bmp文件)。当
原理图装入之后,在一
    些重要的元器件上放上一系列透明的标签Labeln(n代表标签的序
号),属性设置如下:La beln.BackStyle=0(透明显示),Labeln.Border
Style=0(表示标签没有边框);另外,在适当的位置放上一系列不透明
标签Labelm(m<>n),这些标签的作用是显示一些简单的信息。标签的
属性设置如下:Labelm.BackStyle=1(不透明显示),Labelm.BorderSty
le=1(表示标签有边框),Labelm.BackColor=&H00FFFF(表示标签的背
景色为黄色),Labelm.Visible=0(标签在开始时不可见)。
    在Labelm.Caption属性中写入要显示的简要文字说明,例如"F159
6模拟乘法器"等,
    然后对这些标签编写如下程序:
    Private Sub Labeln_MouseMove(Button As Integer,Shift As
Integer,X As Single ,Y AsSingle)
      If(X>0 And X<Width)And(Y>0 And Y<Heigh)
      Then
    Labelm.Visible=True
      Else
    Labelm.Visible=False
      End If
    End Sub
    'X、Y分别为鼠标当前位置的横、纵坐标值
    'Width、Heigh分别为标签Labeln的宽度和高度
        Private Sub labeln_Click()
    Form1.Image1.Picture=LoadPicture "c:\vb\dy\bmps\bl.bmp"
     Form1.Show
    End Sub
    'b1.bmp为主要元器件的一些说明和电路图
    这样,当鼠标在原理图中的主要元器件上滑动时,一些简单的文字
说明和提示就会显示出来;当鼠标移走时,说明和提示就会消失。当在
原理图中的主要元器件上单击鼠标左键时,就会调出相应元器件的详
细电路图和详细说明;当在原理图上任意一点单击鼠标左键,详细电路
图就会消失。通过以上方法,就可以实现在图片框上附加一些详细的
说明和资料。
    (待续)

--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店