翰文个人计算机学习网
  • 翰文快讯
  • 翰文PC快讯
  • 综合软件区
  • 操作系统
  • 注册表解析
  • Windows系列
  • Unix/Linux
  • 其他系统
  • 应用软件
  • 微软MS Office
  • WPS Office
  • 多媒体软件
  • 图像处理
  • Photoshop
  • Painter
  • Illustrator
  • CorelDRAW
  • 三维空间
  • AutoCAD
  • 3DMAX
  • 3DMAYA
  • 硬件资源
  • 攒机指南
  • 硬件超频
  • 维修指南
  • 网络资源
  • 在线通讯
  • 网上冲浪
  • 浏览器中心
  • 网络故障解析
  • 病毒资料
  • 病毒通报
  • 病毒防治
  • 病毒常识
  • 黑客技巧
  • SQL/MySQL
  • Oracle
  • Delphi
  • 编程资源
  •  C/C#/C++/VC++/VC.NET
  •  Basic/VB/VB.NET/VBScript
  •  FoxBasic/FoxPro/VF/VF.NET
  •  Java/JavaScript
  • PowerBuilder
  • 热门词:
  • 翰文计算机学习网首页
  • >
  • PowerBuilder
  • >
  • GRAPH在PowerBuilder中的应用
  • GRAPH在PowerBuilder中的应用

  • 资源来源:
  • HW-PCS.ORG
  • 资源作者:
  • 翰文计算机学习网
  • 人气指数:
  • [4512]
  •   在使用PowerBuilder时,有时会用到GRAPH。它作为一种输出工具 ,直观地显示用户想要看到的数据及数据间的关系(我们一般不通过它进行数据输入)。可以有两种方法将GR APH放入用户界面。其一是通过数据窗,使GRAPH成为数据窗口的一部分,或本身即为数据窗。这种方法常常是从数据库获取数据,具有易于操作、易于实现等优点。其二是把GRA PH作为控件放进某一窗口或用户对象中,这种方法一般是从内存或外部文件中获取数据。实际应用中常使用第一种方法。但是 ,对于第一种方法,在创建GRAPH数据窗时,若选择的GRAPH TYPE是LINE 类型时,则可能会出现一些问题。LINE类型的GRAPH是用来表示离散数据的,它可以将相邻的离散值用直线连接起来。但是,当一个GRAPH包含两个或两个以上的序列(SERIES)时,可能会在运行结果图上看到一些序列断点。

      图中,序列A在横坐标为2时是一个断点,序列B在横坐标为5时是一个断点。同时,我们注意到,横坐标的间隔点值分别为1、2、4、5、 7、8、9、10。数值相差并不均匀,但在坐标轴上却均匀间隔,这使得我们看到的图形并不能反映真实情况。为什么出现这种情况呢?这是因为:PowerBuilder按CA值从小到大顺序自动从数据库中取点连线。它并不考虑这些点横坐标的意义,所以只按所取点的不同横坐标数均匀分割横坐标轴。在这种情况下,GRAPH只能取确实存在于数据库中的数据。对于序列A,数据库中不存在CA为4的记录;对于序列B,数据库中不存在CA为7的记录。PowerBuilder取点连线时,以一个指针(假定为P )记录当前CA值,以另一个指针(假定为Q)记录其前一个CA值。当P值为 4时,只取到B序列的一个点(B,4,13),因此时Q值为2,故与B序列中CA为 2的点(B,2,10)相连,A序列中CA为2的点(A,2,5)此时没有与之相连的点。然后P指针前移,指向A值为5,Q指针前移,指向CA值为4。此时取到两点(A,5,14)、(B,5,11)。但因Q值为4,所以(B,5,11)与B序列CA值为 4折点 (B ,4,13)相连,而(A,5,14)却无A序列CA值为4的点相连,故不 连。然后P、Q指针再次后移。这样就造成点(A,2,5)被跳过,成为A序列的断点。同理,B序列在(B,5,11)处也是断点。如何解决这些呢 ?我们不能离开原始数据本身去修改运算结果,即不能在GRAPH上直接修改,而应考虑数据源。因为在只做查询时,数据库中数据一般不能修改,一种办法是将欲显示的数据从数据库中读出,经过处理后放入某一外部文件,然后令GRAPH从该文件读取数据,形成显示结果图。这就要结合上面所述的使用GRAPH的第二种方法:将GRAPH作为控件放入某一窗口中。下面举例说明其实现方法:在某一窗口如W—GRAPH中放入一 个GRAPH控件(GR—1),在该控件的CONSTRUCTOR脚本中加入以下SCRIPT 语句:

      li—FileNum
      long ff
      string str
      li—FileNum= fileopen ("c: ry.txt", LineMode!,WRITE!,Lo ckWrite!,REPLACE !)
      fileseek(li—FileNum,0,FromBeginning!)
      for i=1 to seriescount
      //seriescount为图中序列个数,各序列名称在series[ ]中
      for j=1 to categorycount

      /*categorycount为横坐标的坐标点数。由要显示的数据CA值范围及相邻CA值的最小间隔长度决定。例如:要显示的数据CA值在1到10 的范围内,若不同CA值最小相隔为0.5,则此时categorycount值为20, 横坐标值为0.5,1,1.5,2……;若不同CA值最小相隔为1,则此时catego rycount值为10,横坐标值为1,2,3……。各横坐标值在category[]中 */

      VARCA=0
      SELECT CA
      INTO:VARCA
      FROM QUERYDB
      WHERE ABS(QUERYDB.CA-:CATEGORY[J])=1E-6:
      if VARCA=0 and j1 then

      /*插补的CA值原数据库中不存在,对应VA值要进行修正。方法是找出当前CA值(CATE GORY[J])其前最临近的一个(第M个)、数据库中 存在的CA值对应的VA值(PVA)、其后最临近的一个(第N个)、数据库中存在的CA值对应的VA值(SVA),取(SVA-PVA)*(J-M)/(N-M)作为当前VA 值。赋予VALUE[1,J]*/

      修正
       //程序略
      end if
      ** str=series[i]+" "+category[j]+" "+value[i,j]
      filewrite(li—FileNum,str)
      next
      next
      ff=FileLength("c:TRY.txt")
      gr_1.importfile("c:TRY.txt",1,ff)
      //程序结束

      在**行,series[i]中存放当前序列名称,如"A"、"B"、"C"等(i=1 ,2……);category [j]中存放当前横坐标分隔点 名称,如"1"、"2"、 "3"、"4"等(j=1,2……)。value[i,j] 中存放对应于当前序列及横坐标的相应纵坐标值。双引号中不是空格,而是TAB键,如果键入的是空 格,则代表换行,TAB键则表示在本行中空一个字符。

      这样在W_GRAPH窗口打开后,该图形将有如下显示形式,而不存在断点。

    感谢您对翰文计算机学习网的支持

  • 上一条PB6.5中TreeView 控件的使用
  • 下一条:暂无资讯
  • 关于我们
  • 联系方式
  • 成功案例
  • 技术报价
  • RSS索引
  • 网站地图
  • 翰文电脑学习网
  • MSN:LNDDYGYC9@HOTMAIL.COM Powered by 翰文个人计算机学习网 版权所有,未经允许不得转载
    ICP备案号码:[沪ICP备12020678号] Copyright 2008-2020 HW-PCS.ORG, All Rights Reserved.