Visual Graph图形平台的使用

Visual Graph图形平台的使用
本人所在单位于2005年购买了北京图王的Visual Graph图形引擎平台企业版,此期间使用Visual Graph图形引擎平台开发了不少图形应用项目:电力设备管理系统、电力一次接线图管理系统,二次接线图管理系统,图形配调系统,操作票、任务票的两票系统,现在我将自己使用的一些Visual Graph在开发的时候遇到的一些问题与感受及经验整理成一篇文章,抛砖引玉,期待得到大家指点来指点一下。
 由于我们单位的系统都是老系统,delphi开发出来的,所以为了和老系统方便交互,我们几个人也学了半个月的delphi来开发电力的图形系统,一开始,我们只是想用Visual Graph来开发一个电力线路管理系统。后来领导看到了,觉得系统不错,一发不可收拾,陆续得开发了许多图形相关的电力系统。现在用delphi调用Visual Graph来进行说明:
第一步:安装Visual Graph
首先点击Visual Graph目录上的注册COM.bat,最后显示注册成功,其实这一步就是注册Visual Graph的ActiveX组件,他的组件名为vg.dll.用命令行批处理写上 regsvr32 vg.dll。
  那么就要在Delphi里面调出ActiveX了。
Visual Graph的VG组件是遵循ActiveX标准的控件,很容易安装到自己的开发环境中。

  1、注册北京图王的Visual Graph的VG组件。
  2、打开DELPHI,选择Component;Import ActiveX Control…菜单。
  3、在Import ActiveX窗体中选择Visual Graph ActiveX Control Module选项,点击最下面的【Install…】按钮。
  4、在Package窗体中点击【Compile】、【Install】按钮,退出时选择不保存。
  5、在控件区的ActiveX页中出现一个Visual Graph的VG组件图标,表示安装成功。
  6、直接将Cell图标拖到Form中即可使用。
7、Visual Graph的VG组件提供了几种开发环境中的Demo,可以直接照办使用,那基本就是一个样的Demo。


第二步:在Delphi窗体里面加入并调用 Visual Graph
最开始使用Visual Graph的时候是进行图形管理与控制,也就是说,画出几个库图元之后,用户可以自己加载图库,从图库里面加入图形,并对图形进行一些属性设置。
我觉得它的技术特点如下:
1)非常人性化设计,提供最为完善的绘制、修改方法,各种显示模式,随意切换。
2)与常见的绘图、文档编辑软件的操作方式相似,使用户可以在短时间内掌握绘图的使用方法。
3)丰富的一致的图元库让用户绘制图形无需从头开始,只要轻轻的拖曳即可做出漂亮的图形。
4)VG里面全部是矢量绘图,缩放自如。
5)绘图过程比用纸笔画图更简单方便和精准,图层控制等格式设置.
6)基本绘图库让用户可以通过直线、曲线、弧线、矩形和椭圆工具等元素绘制出新的图形。
7)矢量图形抗锯齿。让您绘制的图形在任何角度都保持美观。
8)无限撤销和重做功能,使用更加方便灵活。
9)可以输出为VG专用的绘图格式TBL与Bin,其他图形格式.
10)所见即所得的操作方式。



第三步:图形控制
首先拖入一个VG控件,在窗口的OnShow代码里面写上:
procedure TForm1.FormShow(Sender: TObject);
begin
  vgctrl1.Run( ExtractFilePath( Application.ExeName ) + 'hmi.tbl' );
end;
运行一张图,如下所示:



 procedure TForm1.Button1Click(Sender: TObject);
var
  uu : IUnit;
  ret : Integer;
begin
  uu := vgctrl1.vg.ActiveSheet.UnitByName( TButton( Sender ).Caption );
  ret := uu.GetPropertyValue( 'Value' );
//或者也可以用
//ret := vgctrl1.vg.Execute('return '+TButton(sender).Caption+'.Value');
  ShowMessage( IntToStr( ret ) );
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  uu : IUnit;
  ret : Boolean;
begin
  uu := vgctrl1.vg.ActiveSheet.UnitByName( TButton( Sender ).Caption );
  ret := uu.GetPropertyValue( 'OnOff' );
//或者也可以用
//ret := vgctrl1.vg.Execute( 'return开关指示A1.OnOff' );
  if ret then
  ShowMessage( 'true' )
  else
  ShowMessage( 'false' );
end;

procedure TForm1.Button4Click(Sender: TObject);
var
  uu : IUnit;
  ret : String;
begin
//首先从图形里面取得这个Iunit对象的指针,通过Isheet类里面的UnitByName函数,通过图元名字得到对象指针
uu := vgctrl1.vg.ActiveSheet.UnitByName( TButton( Sender ).Caption );
//再从对象指针里面获取其属性,由于text是Itext类的属性,而Iunit是Itext类的父类,如果想直接用COM接口得到Text属性,那就要Itext(uu).text,才行。同样GetPropertyValue是万能的取得属性值的函数。SetPropertyValue是万能的设置属性值的函数,这两个函数是Iunit的接口函数.
  ret := uu.GetPropertyValue( 'text' );
//或者也可以用
//ret := vgctrl1.vg.Execute( 'return文字A.text' );
  ShowMessage( ret );
end;

procedure TForm1.Button5Click(Sender: TObject);
var
  uu : IUnit;
begin
  uu := vgctrl1.vg.ActiveSheet.UnitByName( TButton(sender).Caption );
  uu.SetPropertyValue( 'value', 6 );
end;

procedure TForm1.Button7Click(Sender: TObject);
var
  uu : IUnit;
begin
  uu := vgctrl1.vg.ActiveSheet.UnitByName( TButton( Sender ).Caption );
  uu.SetPropertyValue( 'OnOff', True );
end;

procedure TForm1.Button8Click(Sender: TObject);
var
  uu : IUnit;
begin
  uu := vgctrl1.vg.ActiveSheet.UnitByName( TButton( Sender ).Caption );
  uu.SetPropertyValue( 'text', 'Visual Graph' );
end;

 

第四步:在Delphi与Visual Graph脚本混合编程交互




这两个事例,都是运用了AddFunction函数。

 

AddFunction
 void=AddFunction(string, string, int, long)
 该函数属于高级应用,给Visual Graph脚本体系添加一个内部函数。利用此函数可以扩充脚本语言的能力。
第一个参数是函数的名字(32个字符以内);
第二个参数是参数类型,串中每一个字符代表一个参数类型
1-整数(Int)
2-小数(Double)
3-逻辑型(bool)
4-字符串(string)
比如有( Int,double )做为函数参数时,就用"12"表示。
第三个参数是返回值类型
如49('1'的ASC码)表示返回一个整数。
此外,如果没有返回值,用48('0'的ASC码)表示。
第四个参数是函数地址。
在C语言中,函数名就是函数地址。
在Pascal语言中,函数名前加“@”表示地址。
在Visual Basic语言中,AddressOf运算符能返回函数或者过程的地址。
 

 

比如:

procedure TForm1.FormShow(Sender: TObject);
begin
  vgctrl1.AddFunction( 'CallDelphiEditChange', '44', 48, Longint( @CallDelphiEditChange ) );
  vgctrl1.AddFunction( 'CallDelphiRadioButtonClick', '41', 48, Longint( @CallDelphiRadioButtonClick ) );
  vgctrl1.AddFunction( 'CallDelphiCheckBoxClick', '43', 48, Longint( @CallDelphiCheckBoxClick ) );
  vgctrl1.Run( ExtractFilePath( Application.ExeName ) + 'demo.tbl' );
  UseDelphiControl := true;
end;

在Visual Graph脚本里面是这样写的:
CallDelphiCheckBoxClick(Sender.Name, Sender.Checked)
CallDelphiEditChange( Sender.Name, Sender.Value )
CallDelphiRadioButtonClick(Name, 0)
那么VG脚本就能调用delphi内部的函数,
那么现在Delphi如何调用VG的函数呢?,那么要运用VG的Execute万能函数了。

Execute
 variant=Execute(string)
 执行脚本语句,并返回一个值(如果脚本最后有return语句的话),脚本语句可以是多行的长串。
示例:
Execute( "Print()" )打印视图当前页。
Execute( "ActiveSheetIndex=2" )页面翻到第三页(0是第一页)。
Execute( "Text1.Text='Hello'" )设置某文字单元的文字内容。
Execute( "Sheet2.Text1.Text='Hello'" )设置Sheet2页上某文字单元的内容。
Execute( "x=2;y=3;return x+y" )返回5。
Execute( "s='ABC';return s" )返回"ABC"。
 

 

在Delphi里面就这样使用:
Vgctrl1.Execute(“ActiveSheet. AddUnit(‘text’,1,1,0,0)”)就可以增加一个图元了。
如查在设计图形时,给页面增加了一个自定义函数。
那么用
Vgctrl1.Execute(“ActiveSheet. SelfInvoke()”),就能调用它了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、Visual Graph重要文件 1.bin\ide.exe是绘图软件,您在此可以设计图库、绘制图形文件,这个软件的所有界面都是可以修改的。 2.bin\vg.dll是ActiveX控件,在许多编程语言中使用使用步骤如下: a)运行bin\registeractivex.bat注册控件到您的计算机,如果失败,以管理员身份运行cmd.exe,然后再运行regsvr32.exe bin\vg.dll注册(请不要把v.dll拷贝到windows\system32目录下)。 b)进入编程语言,在工具栏上安装COM组件Visual Graph ActiveX control(Visual Graph不能运行在WEB服务端,如果开发ASP.net,工具栏看不到这个) c)把控件拖动到画面中 d)在窗口的Load事件(或Show)事件中编写如下代码: vgctrl1.Design( "" )设计一个新图形文件 vgctrl1.Run( "" )运行一个新图形文件 vgctrl1.Design( vgctrl1.DefaultPath + "..\demo\电力\秦山核电站.tbl" )设计秦山核电站这张电力接线图 vgctrl1.Run( vgctrl1.DefaultPath + "..\demo\电力\秦山核电站.tbl" )是秦山核电站这张电力接线图的运行状态 接下来就可以通过程序对画面上的各种图形对象进行编程了,具体请参考入门手册 http://www.visual-graph.com/rumen.htm 3.bin\vg.chm是帮助系统 4.source目录下是csharp2010、delphi7.0、vb6.0、vc6.0使用Visual Graph ActiveX的示例 5.web目录下是互联网应用中使用的cab文件打包批处理程序 6.lib目录下是若干例子图库 7.demo目录下是若干图形文件的示例 二、发布Visual Graph ActiveX时必需要包含的文件 1 : bin\vg.dll ActiveX控件 2 : bin\funcs.dll 外部函数库 3 : bin\kernel.dll 技术核心库 4 : bin\units.dll 基础图形库 5 : bin\consts.bas 启动脚本,在此可以定义一些非常重要的全局常量 6 : bin\arrows.tbl 自定义线条箭头库 7 : bin\cursors.tbl 光标库,没有这个,鼠标移动时将看不见 8 : bin\hintwindow.tbl 提示窗口,当鼠标移动到某对象时显示的那种提示窗口 9 : bin\library.tbl 基础图形的画法,包含线条的各种画法 10: bin\page.tbl 打印设置对话盒 11: bin\controls.tbl 打印设置窗口使用的控件库,包括按钮、下拉列表框、选择框等等 12: bin\patterns.tbl 图案文件 三、如果在互联网(IE)使用,需要把用到的文件打包成CAB文件,可参考web\makecab.bat里面的内容,自行增加要打包的文件,然后运行这个批处理程序,打包后的CAB文件的使用方法参见web\design.htm,自行打包的CAB文件在IE里会被拦截,请调低IE的安全等级,允许ActiveX在IE中使用和运行脚本。如果想不被IE拦截,请使用我公司网站上提供的http://www.visual-graph.com/activex/vg.cab,或者自行向数字签名公司购买签名服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值