Visual Graph是什么?

Visual Graph文件格式

50个技术特点

丰富的图库(监控)

丰富的图库(绘图)

丰富的图库(界面)

图形拓扑

高度灵活

常见问题

应用于工业监控系统

首页

 这是可以直接使用的应用软件么?

  Visual Graph系统是ActiveX开发组件,供程序员在其他语言中使用图形功能。

 企业版和工业版的差别是什么?什么叫设计态,什么叫运行态?

  Visual Graph ActiveX插件包含两大功能,设计态(Design)和运行态(Run),工业版不包括设计态,只包括运行态。企业版是全功能版,而工业版比较常用,且价格较低。

  那么,什么是设计态呢?

我们常用的工具像 C#、Delphi、VB、PB等都存在设计态,也就是可视化编程。还有AutoCAD、PowerPoint等绘图软件都属于设计态。设计态的特点是,用户可以用鼠标画图、用鼠标拖拽、改变图形的位置、大小等等。

  什么是运行态呢?

我们常用的工具像 C#、Delphi、VB、PB等编程语言都存在运行态,也就是这些语言开发出来的程序。PowerPoint、Flash等绘图软件也都有运行态,也就是播放的部分。而像AutoCAD、PhotoShop这样的专门绘图工具是没有运行态的。运行态的特点是,用户不能任意编辑图形,但图形可以响应各种交互事件、图形可以改变属性、做出各种动作。

  既然工业版没有设计态,那如果购买了工业版,图形如何绘制呢?

  在下载软件包中,ide.exe是永久免费使用的开发平台,您可以用这个软件绘图,或者把这个软件交付用户自行绘图。但是,工业版的图形系统ActiveX组件则不包括绘图功能,这样您无法自行开发绘图软件了,所以,购买前请了解清楚您的需求,到底是否需要绘图部分。

 在浏览器中能用么?

在浏览器中使用和其他语言没什么差别,作为插件在客户端运行,当然,在IE中开发需要用JavaScript或者VBScript语言。下图是在运行时候的画面(插件经过安全认证,下载不超过1兆):

 支持数据库么?

  Visual Graph并不直接支持数据库,如果需要把数据库中的数据关联到图形属性上,需要首先从数据库中取出数据,然后再调用Visual Graph的COM接口,把数据传给图形。这种做法和任何编程语言的控件思路一样。例如,画面上有一个按钮Button1,我们要把数据库中的数据关联到这个按钮,需要首先从数据库中取出数据,然后给Button1.Caption赋值。比如:Button1.Caption = "Hello"。具体语法是:

  vgctrl1.vg.ActiveSheet.Execute( "Button1.Caption='Hello'" );

  或:

  vgctrl1.vg.ActiveSheet.UnitByName( "Button1" ).SetPropertyValue( "Caption", "Hello" );

  如果需要把图形上的数据传给数据库,首先用Visual Graph的COM接口把图形属性返回,然后再存储到数据库。

  下面的语法可以把按钮的Caption属性返回来:

  s = vgctrl1.vg.ActiveSheet.Execute( "return Button1.Caption" );

  或:

  s = vgctrl1.vg.ActiveSheet.UnitByName( "Button1" ).GetPropertyValue( "Caption" );

 Visual Graph ActiveX(vg.dll)安装问题

  无需也不要把vg.dll拷贝到windows\system32目录下,Visual Graph系统需要的文件远不止这一个文件,而是包括bin目录下很多文件。

 为什么某些元件不能改变大小?

  当元件中含有旋转过的图形,就不能自动改变大小了。如果在元件的OnResize事件中编写代码,倒是可以实现任何变化。

 VS.NET 2008中遇到LoaderLock错误,无法编译通过

  请选择菜单debug\exception,关闭其中的LoaderLock选项即可

 Delphi中在FormCreate中无法打开图形文件

  对,请在FormShow中执行Run或Design打开图形文件

 在web开发时,工具栏上加不了Visual Graph ActiveX的图标

  Visual Graph ActiveX是在客户端运行的,不是在服务器端运行的,所以不可能放在服务器端运行。

 如何绘制化工行业常用的透明罐体?

  首先用多边形工具绘制一个四边形(五个顶点),如下图:

  然后选择菜单“线条/转换直线曲线”,在这个多边形的上下两边分别点击一次,这两条边被转换为Bezier曲线。依次用鼠标点击每个顶点,这个顶点旁会出现两个能够控制曲线方向的点,按住Shift键,移动控制点,改变曲线方向。最后这条线被画成:

  用同样的方法绘制另外一条小一点的曲线,并把它和上面这条线居中对齐,然后选中这两条线,选择菜单“线条/合并线条”,这两条线变成了一条线,给这条线设置背景色为白色,前景色为黑色,填充图案为243,结果如下:

  再画一个矩形,蓝色背景,把它放到这条线的下方遮起来:

  这只是制作罐体的第一步,至于如何编写代码,添加属性,使得蓝色液位可以上下移动,请参考lib目录下的monitor.tbl文件中的罐体,或者查看“demo\monitor\chemical industry.tbl”文件中的罐体。

 在元件制作时,无需把页面上的图形再组合起来

  由于图库和图形文件是同一个文件,图形文件的页面相当于图库中的元件,所以在绘制图库的时候,切勿把画面上的图形再次组合起来,如果那样,在未来的元件中将包含一个元件,另外一定要把页面名设置成不含数字的纯字符。

 颜色问题

  Visual Graph采用的颜色是Windows RGB颜色,不是网页的html颜色,请注意。

 哪些是可用的图库?

  在bin目录下只有controls.tbl、menu.tbl两个图库,该目录下其他文件均不是图库。

 无法打开WEB服务器端的tbl图形文件

  可以把文件后缀名改为xml或者txt。可能是这种tbl文件格式被服务器禁止了。

 在VC和Delphi中文字单元无法输入文字?

  请参考下载区vc6的源码例子,在这里,需要自己处理一下PreTranslateMessage这个过程,类似地,在Delphi中需要处理一下CMDialogKey事件,关于Delphi中处理键盘移动的例子在下载区也有源码例子。其他各种语言或环境均不存在这些问题。

 VC6无法设置断点调试程序,Visual Graph使用中也常出现莫名其妙的错误

  请关闭360安全卫士。

 如何把图形保存成jpg格式?

  用视图类的Export函数(新版),例如在IDE.exe命令行可以执行export("e:\sss.jpg","jpeg",0,0)。

 设置颜色时颜色出现随机值

  请区别下面两句:
  Rect1.SetPropertyValue( "BackColor", 255 )
  Rect1.SetPropertyValue( "BackColor", "255" )
  上面第一句是对的,第二句是错的,注意颜色值是整数,不是字符串。
  同样,下面这句也是不对的:
  Rect1.Text = 100
  因为Text是字符串类型。

 如何用鼠标滚轮来实现放大缩小?

  处理OnMouseWheel滚轮事件,当Forward参数为true时,增大Zoom属性的值,否则减少Zoom属性的值即可。在“demo\power”目录下有一个power system.tbl文件,

 如何区别在不同图形上的点击,使程序执行不同的操作?

  在OnClick事件中调用视图类的UnitAtCursor函数,根据返回来的不同图形对象执行不同的操作。以下是各种编程语言中的例子:

  Visual Basic:

dim aunit as IUnit
set aunit = vgctrl1.vg.UnitAtCursor( nothing )
if not ( aunit is nothing ) then
MsgBox aunit.Name
end if

  Delphi:

var
aunit : IUnit;
begin
aunit := vgctrl1.vg.UnitAtCursor( nil );
if ( aunit <> nil ) then
ShowMessage( aunit.Name );
end if
end;

  Visual C++:

CUnit aunit = vgctrl1.GetVg().UnitAtCursor( 0 );
if ( aunit )
ShowMessage( aunit.GetName() );

 如何在.net下使用颜色?

System.Drawing.Color cl;
int n = System.Drawing.ColorTranslator.ToWin32(cl);
这两行代码把.net下的颜色转换成Visual Graph能用的颜色(RGB色)。

 在Windows7的32位操作系统无法安装

请以管理员身份进入cmd.exe安装(运行RegisterActiveX.bat)

 如何操作元件内部某个图形的属性?

  假设一个元件Element1,内部有一个矩形Rect1,下面脚本可以把这个矩形的透明度设置成50(半透明):

  Element1.Rect1.Alpha = 50

  在COM中使用是这样的语法:

  vgctrl1.vg.ActiveSheet.Execute( "Element1.Rect1.Alpha = 50" );

  或者:

  vgctrl1.vg.ActiveSheet.UnitByName( "Element1" ).UnitByName( "Rect1" ).Alpha = 50

  或者:

  vgctrl1.vg.ActiveSheet.UnitByName( "Element1" ).Execute( "Rect1.Alpha = 50" )

 如何使用二维数组?

  举例如下:

  ar = Array()

  ar[0] = Array()

  ar[0][0] = 100

  ar[0][1] = "Hello"

  ar[1] = true

  从上面可以看出,ar数组的第一个元素又是一个数组,第二个元素是逻辑值true。