您的位置:首页 > 编程语言 > Delphi

深度解析工业图形专家(VG)在delphi中的使用

2012-01-16 05:44 435 查看
======================================================

注:本文源代码点此下载

======================================================

第一步:安装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()”),就能调用它了。
北京图王软件 :http://www.visual-graph.com
visual graph专业图形平台,适合开发各行业涉及图形的应用系统,例如电力、煤炭、化工、自动化监控、仿真、图形建模、图形拓扑分析、矢量绘图、 中国式表格、gis地理信息系统、工作流等。详情请访问:http://www.visual-graph.com
标签:
电力, 图形,
接线图, 配图,
电力信息, 电网,
线损, 仿真
绿色通道:好文要顶关注我收藏该文与我联系



======================================================

在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定
这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: