展开全部

第一步:安装Visual Graph

首先点击Visual Graph目录上的注册e69da5e6ba903231313335323631343130323136353331333363396334COM.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()”),就能调用它了。

本回答由提问者推荐

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

java怎么引入矢量图标库_java web开发怎样调用visual graph的图库相关推荐

  1. java怎么引入矢量图标库,阿里图标库怎么使用?阿里图标库iconfont如何使用

    阿里图标库怎么使用?阿里图标库iconfont如何使用 网际网络测评    网络评测    2020-3-17    2581    0评论 阿里图标库Iconfont-国内功能很强大且图标内容很丰富 ...

  2. java 反正多次重复提交_java web开发时防止刷新后的重复提交

    在java web开发过程中大家经常都会遇到页面刷新后重复提交导致数据库数据重复的情况出现. 那么,如何避免重复提交数据的情况出现呢?如下代码,是在jsp中解决重复提交的一种方式. //此段代码用于防 ...

  3. java 新窗口跳转页面_Java web开发中页面跳转小技巧——跳转后新页面在新窗口打开...

    最近学习Java web,在学习过程中想实现一个需求,就是在jsp页面跳转的时候,希望跳转后的新页面在新窗口中打开, 而不是覆盖原来的页面,这个需求使我困惑了好长时间,后来通过大海捞针似的在网上寻找方 ...

  4. 如何把Iconfont阿里巴巴矢量图标库引入web项目和微信小程序中,拿走不谢

    登录Iconfont-阿里巴巴矢量图标库 官文地址:https://www.iconfont.cn/ ①必须登录才行,我这边是用新浪微博登录的 ②然后可以搜索自己需要的图标,比如搜索homt,然后鼠标 ...

  5. uniapp 引入阿里矢量图标库的详细步骤及踩坑经历

    uniapp 引入阿里矢量图标库的详细步骤及踩坑经历 首先在阿里矢量图标库选择自己喜欢的图标 加购物车如下图 点击右上角的购物车 添加到项目 这里有坑 首先你不选中在线链接 你是看不到 @font-f ...

  6. Element引入Iconfont(阿里巴巴矢量图标库)第三方图标库

    最近在使用vue-element-admin开源项目进行系统开发,但是在引入第三方图标库的时候,出现了一些问题,百度找了找,也没有找到自己想要的答案,最后经过多次尝试,将问题解决.所以特此记录一下,以 ...

  7. vue项目引入阿里巴巴矢量图标库 ——字体图标

    1. 打开阿里巴巴矢量图标库官网 iconfont-阿里巴巴矢量图标库 2. 下载图标步骤 (1) (2)  (3) (4) (5) (6)main.js 配置 引入assets中的图标路径 (7)页 ...

  8. 如何在vue中引入阿里巴巴矢量图标库里面的图标

    阿里巴巴矢量图标库https://www.iconfont.cn/ 首先进行登录,然后才能下载里面的图标 搜索里面的图标并添加到购物车 点击右上角购物车 将购物车里面的图标添加至项目 书写项目名称可随 ...

  9. Vue项目引入阿里巴巴矢量图标库

    添加图标并下载 一.点击图标管理–>我的项目,创建项目 简单点~填个项目名即可 二.选择一个图标,加入购物车 点击右上角购物车的图标,添加至项目(可以直接点击下载代码,不需要创建项目,但是如果是 ...

最新文章

  1. Android预安装可卸载程序
  2. 别再说程序员不懂时尚
  3. Golang的基本类型、引用类型、复合类型
  4. 递归1:二叉搜索树的范围和
  5. Linux xshell窗口批量命令编辑功能(发送键输入到所有窗口)
  6. 单继承-继承的传递性
  7. ubuntu查看版本
  8. java insert_java获取新insert数据自增id的实现方法
  9. bootstrap分割式下拉菜单显示不全
  10. sklearn 中的 Pipeline 机制
  11. vue 根据接口数据筛选_如何根据行值变化筛选数据
  12. GitKraken -- 超好用的 Git 可视化工具
  13. 最好的Javaweb教程JavaWeb架构演变-动力节点
  14. bom成本分析模型_材料成本控制,从BOM表开始。
  15. steam服务器连接不稳定WIN10,小编操作win10系统steam连接不稳的解决步骤
  16. 利用模式进行构建第九讲——树形模式
  17. 【Windows】谷歌浏览器独立多开
  18. [exgcd] Jzoj P5855 吃蛋糕
  19. ARCGIS SERVER 授权
  20. 操作系统:文件系统——空闲块成组链接法的模拟

热门文章

  1. native2ascii的作用
  2. (20、21)性能测试环境搭建
  3. 资源管理:caching模式
  4. nodejs之arguments
  5. DBeaver配置ODBC
  6. 20190928多益网络前端笔试总结
  7. git命令行推送本地分支到远程仓库
  8. 谈一个普通211计算机研究生学渣的Java后端开发的面试之路
  9. linux genymotion黑屏,ubuntu16.04 无法启动genymotion
  10. 用某宝上的板子制作可调的正负电源