Visual Graph常见问题回答(FAQ)

12.1.何谓设计态?

回答:我们常用的工具像 C#、Delphi、VB、PB、Jbuilder等都存在设计态,也就是可视化编程。还有AutoCAD、PowerPoin t、Flash等软件也都可以看作设计态。设计态的特点是,用户可以用鼠标编辑图形。

12.2.何谓运行态?

回答:我们常用的工具像 C#、Delphi、VB、PB、Jbuilder等都存在运行态,也就是开发完成后交付使用的部分。PowerPoint、F lash等软件也都有运行态,也就是播放的部分。像AutoCAD、PhotoShop这样的专门绘图工具是没有运行态的。运行态的特点是,用户不能任意编辑图形,但图形可以响应交互事件、图形可以动作。

12.3.支持硬件板卡接口么?

回答:VG是一个图形平台,不做硬件,如果图形想与硬件通讯,要自己开发相关的程序或DLL等功能库挂入VG作为VG的外部函数或内部函数,程序员可以通过VG来调用这些功能库了。因为图形提供了完善的I/O方法,程序员可以通过它把图形和硬件等连接起来。

12.4.支持数据库么?

回答:VG是一个图形平台,不包含数据库功能,但提供了数据库接口方案,因此,如果要实现和数据库的关联关系或者把图形存储到数据库,我们可以提供解决方案。

12.5.在浏览器中能用么?

回答:在浏览器中使用和其他语言环境中没什么差别,作为插件在客户端运行,当然,在IE中开发WEB应用需要用JavaScript或者VBScript语言进行控制VG。

12.6.绘图可能擅长,做表格可能太困难吧?

回答:有人觉得,VG的表格采用文字单元拼凑的方式实现,这样画一张表格太蹩脚、太不方便了。

   VG制表其实非常容易,在整个画表过程中,和其他表格软件没什么差别。可以绘制几行几列的表格、移动线条、划线、单元合并、表格边框设定等。几分钟就可以绘制一张大表。这种表格的特殊之处在于,每个单元格都可以自由移动位置,此外,由于表格和图形混 排,因此可以插入图片、图表、棒图、饼图、曲线图等等。

    事实上,VG曾经是一种专门的表格设计软件,只是由于现在侧重图形,所以很多人根据自己的经验以为无法用它制表,因为市场上很少有矢量绘图软件支持表格,在WEB上编辑与运行表格相当方便。

12.7.动态连接线问题,请问用c#做类似与visio的动态连接线,是把线设计为一个控件呢,还是直接在面板上画线?如果直接作为控件,控件的形状很难控制,因为这跟是动态线,可以任意变形的。但一般都是由横线和竖线组成。如果直接在面板上画线,又比较难实现拖动删除等操作。问题困扰很久,望大虾们能指点设计思路!有代码参考就更感激不尽了!

回答:有现成的LinkLine可以用,详情请查看小节10.12、图形拓扑连接的使用

12.8.在vg里如何使用定时器控件 ?现想用一定时器控制图元的角度变化,如何实现?另vg里如何创建一定时器控件呢?

回答:在lib\Controls.tbl里面有个定时器元件,此元件有个OnTimer事件,或者在每个Sheet类下是有Ontimer事件的。

12.9.VG下如何调用MSSQL语句并且如何保存MSSQL数值?想用VG去显示MSSQL中的数据,却不知道如何用VG去调用MSSQL语句,并且用什么去保存MSSQL中找到的数据?

回答:vg是个图形系统,不处理数据库操作系统。但VG提供外部接口DLL扩展来数据库操作函数,但从系统设计思想看,因为数据库的连接资源非常宝贵,所以不建议VG直接数据库。

12.10.线的末端箭头问题:我在arrows.tbl添加空心三角形图元,然后在线的末端箭头属性中选中这个图元,为什么显示出来的是黑色的实心三角形啊?

回答:网纹Pattern设置成此自定义的空心三角形图元所在Sheet里面序号,详情查看小节10.10、自定义箭头与填充

12.11.线上图标问题 :我用的是试用版VG,线上图标图库文件在什么位置,我可以在线上图标图库中添加自定义图标吗?

回答:在目录 dat\lineicon.tbl 的文件里定义。

12.12.关于数组:数组是不是只能一个一个的给数组中的每个元素赋值,不能一次就给所有的元素赋值,例如,la=array(10)

la={1,2,3} ?

回答:确实只能一个一个赋值

12.13.在使用vg.Execute( "SystemParams.GraphDriver = 1" )后会在关闭ie时会异常出错,为什么?

回答:在IE关闭前必须运行恢复回来,用vg.Execute( "SystemParams.GraphDriver = 0" )

12.14.vg控件对象在web中与Div覆盖的问题 :activex对象在网页中使用时,总是显示在最上面,覆盖掉了其它内容,如何解决 ??

回答:调整位置和大小吧 ,还是这个对象的z-index值永远是最大的, 永远是在最上面的。

12.15.如何延长hint的提示时间?vg控件的hint时间大约只有2秒,如何延长hint的提示时间?没有找到hintwindow类,无法针对该类编程。

回答:用vg.Execute( "SystemParams.ShowHintDelay=5000" )设置它,默认为2秒。

12.16.vb中调用问题 我现在要用vb做一个电力上的模拟操作软件,在vb中怎么调用vg啊?比方说,在vb的窗口上绘制一个commond命令按钮, 单击此命令按钮时,就会出现vg的编辑画面?具体怎么实现啊?

回答:vgctrl1.Design( "文件名" ),详情可查看小节5.1、VB6

12.17.一个图元只有1个连接点,该连接点连接了多条line,如何从该图元得到这些连接的line?

回答:看LinksCount、Links[n],详情查看小节10.12、图形拓扑连接的使用

12.18.在C#窗体程序里怎么判断一个元件被放到了绘图区上

回答:会触发OnAddUnit事件

12.19.关于选中图形对象的问题? 目前鼠标选中图形(如rect)时,图形四周出现可调整大小的特征点,现在我想当鼠标点中图形,选中后,让图形背景色发生改变来表示当前图形背选中,而不想显示特征点框框?该怎么办?

回答:运行态实现即可,自己处理一下OnClick,设计态下不能如此 .

12.20.如果一张图 有多个圆之间要用线连接 因为圆很多都是直线不可能 要辟开那些圆 连接线能否做到能否自动弯曲 注:是根据配置文件做图 不是直接画 ?

回答:详情查看小节10.12、图形拓扑连接的使用

12.21.如何删除折线上的点?怎么用代码删除折线上的一个点,不通过DeletePoint()函数 ?

回答:先设置pointcount = pointcount - 1 ,然后依次把后面的顶点挪到前面去。 直接的方法就是自己写一个函数,调用,这样以后就很方便了。

12.22.VC中Text控件问题 :Text控件有个"运行只读"属性,在VC6中设为false没有办法在里面输入数据,同样的图在VB6中却可以正常输入,请问 该如何解决。

回答:处理premessage事件,把焦点还给vg

12.23.VC中怎么转换视图坐标? 我的VG是7.1版的,在VC中使用时发现ClientToView和ViewToClient这两个函数的参数为long型, 但帮助文档中却是一个Point结构,那么VC中应该怎样转换视图坐标?

回答:VG中的Point结构如下:

struct TDoublePoint

{

double x;

double y;

}

那个long是个指向TDoublePoint的指针。

12.24.请教Delphi中的Sheet里面的ClientToView小问题

var

Sheet1 : ISheet;

fp : TDPoint;

begin

Sheet1 := vgctrlMap.ActiveSheet;

Sheet1.ClientToView( Integer( @fp ) );

end;

我想请问BASE大侠,上面的Sheet1.ClientToView是什么意思,是将当前可视的区域赋值给@fp吗? 

回答:不是,应该这样:

var

Sheet1 : ISheet;

fp : TDPoint;

begin

Sheet1 := vgctrlMap.ActiveSheet;

fp.x := ClientWidth;

fp.y := ClientHeight;

Sheet1.ClientToView( Integer( @fp ) );

end;

//取得窗口右下角所在的视图坐标

fp.x := ClientWidth;

fp.y := ClientHeight;

Sheet1.ClientToView( Integer( @fp ) );

//是右下角

12.25.asp.net页面中用C#直接控制vg 在vs2005中,控件为何不能添加到工具栏中。是不是在vs2005中只能通过jscript或vbscript才能控制vg ? 在asp.net页面中能否利用c#语言直接控制vg?请给个例子!!!!

回答:可以先用vs2003创建画面(工具栏允许添加ActiveX) 然后用vs2005环境打开老版本的工程文件,具体为何vs2005无法把控件插入工具栏,原因可能是你的VS2005配置的原因。 vs2003中使用该控件的方法在source.zip里面有源代码示例。 c#、vb.net的例子。如果是在ASP.net下进行编程,那么只查看5.3、.net(vb.net,vc.net,C#,J#.....)和6.3.2、.net(asp.net)-中文编码问题,WEB编程下的Cilent端IE的控制只有jscript或vbscript才能控制vg。

12.26.如何删除图元的自定义属性 ?使用SetPropertyValue可以给元件添加属性,如果这个属性不需要了,用什么函数或方法来删除这个属性呢?

回答:不能删除属性。

12.27.UnitAtPoint() 问题,取得鼠标下所在的元件 如果使用UnitAtPoint()得到的是一个元件,那么如何得到该元件中位于该点的单元?

回答:1种(封装):在元件A中添加GetTheUnit如下:

public function GetTheUnit( x, y )

return UnitAtPoint( x, y, 0 )

end function

如果你用UnitAtPoint函数已经得到了这个元件A。

2种(循环):

TheUnit = 0

i = 0

while i < A.UnitCount

d = A.Units

if d.Contains( x, y ) then

    TheUnit = d

    break

end if

i = i + 1

wend

这里得到的TheUnit就是你要的。

12.28.GetFocusedText()问题 在设计态(design)下,可否使用GetFocusedText()?

如果可以,在VC++下如何使用? 如果不可以,在VC++下如何获得拥有焦点的文字单元?我在VC++ 下的代码如下: VARIANT var = pvgCtrl->Execute("d = GetFocusedText(); if d <> 0 then ShowMessage(d.Text); return d; else return 0 end if");

if(var.vt != VT_EMPTY) MessageBox("sfasfasf"); 第一行代码用于取有焦点的文字单元,并用showmessage测试; 第二行大名用于测试返回的结果;

回答:可以得到拥有焦点的文字单元,GetFocusedText()是脚本语言的函数,控件却没有。 这样就得用点办法: 例如,在vb中写下面的代码:

Set d = vgctrl1.Execute("d = GetFocusedText(); if d <> 0 then; return d; else; return ActiveSheet; end if")

If d.Type = "text" Then

    d.Text = "HHHH"

End If

12.29.请教如何将AUOTOCAD文件转换到vg格式?谢谢!

回答:VG正式版有专用CAD到VG图形的转换工具,转换效果非常好!

12.30.我是想问:静态图形控件系列 ,VG图形控件绘图版,相对于图形引擎绘图版,但不含内置脚本语言,适合开发常用绘图应用。 此版本,是开发常用绘图软件的最佳选择。例如房屋布置设计、施工绘图、简单CAD制图、绘制表格、图形建模、图形拓 扑分析、地图等。 这个的“一服务器”和“特别授权”有什么区别?

回答:"一个服务器"就是用在“一个服务器”上的意思,非一个服务器的需求,都叫特别授权。

12.31.元件全部导入问题。如果我将所有需要使用的元件全部存放到“元件.tbl”文件中,我在程序中点元件按钮,弹出一元件列表界面,这些元件存放在什么容器?也就是说,可以象线上图标那样,先出来一个元件界面,再选择需要的元件。请base大侠赐教!

回答:打开arrowdlg.tbl,找到里面的arrows.tbl,把它改为"元件.tbl",把arrowdlg.tbl另存为 " 元件选择窗口.tbl"

调用此对话盒的方式(这段代码是VG语法。 )如下:

doc = Create( Handle, "元件选择窗口.tbl", false, false )

if doc.ShowModal() = 1 then

ret = doc.ActiveSheet.Element1.GetSelectedName()

' 这个ret就是返回的元件在arrows.tbl中的序号

end if

doc.Free()

VG的变量不需要声明,直接使用,因为Create函数返回弹出窗口的视图类,所以,Doc就是视图类。

12.32.请问VG是否能够将线条、图形、元件等显示带立体效果? 看了VG自带的lib和demo中的例子,有带立体感的例子,请问VG是否能够显示出立体效果?

回答:VG没有专门立体效果的功能,需要手工制作。VG带有阴影功能

例如,一个按钮,添加阴影的方法是在背后放一个暗色无边矩形,然后把它们组合。您也可以在阴影上放一个控制点,当鼠标拖动这个控制点的时候,可以让阴影的方向和长度发生改变等等(这需要处理调控点的OnNodeChange事件)

12.33.我将*.tbl中的所有元件,图形,线条名称都导入到了一个Combox中,我选择combox中的任意个名称,怎样将选中光标 移到对应的元件、图形、线条上?

回答:BeginUpdate()

ActiveSheet.Selection.Clear()

ActiveSheet.Selection.Add( ActiveSheet.UnitByName( "某图形的名字" ) )

EndUpdate()

12.34.在vgctrl1SelectChange事件中怎么使用Sender对象? 如果使用这个Sender对象,也就是怎么控制当前选中的元件或图形的属性等信息。

回答:vgctrl1SelectChange(Sender: TObject);

beign

Tvgctrl(Sender).

end;

12.48.自定义元件loadfrombuffer 该怎么写? NewUnit.LoadFromBuffer(‘<自定义元件名1 name="????" lib="自定义元件库.tbl" bounds="654.818182,768,668.818182,797" origin="661.818182,782.5" protect="128" color="65535"/>

’); 对内建的元件上面的语句通过了,到自定义元件的时候出现错误, 应该怎么写?

回答:d = AddUnit( "element", 0, 0, 0, 0)

d.LoadFromBuffer( ................ )

 

12.36. loadfrombuff的问题 元件A

S=A.savetobuffer 然后

B=Addunit('xxx',0,0,0,0)

B.loadfrombuffer(S)

B能够重现A的形状,但不能重现A的初始位置,这是什么原因? 如何实现完全的重现(包括拓扑连接关系)?

回答:调用页面的SaveToBuffer() 和LoadFromBuffer() 页面的savetobuffer和Loadfrombuffer没问题

12.37..net颜色转换方式 ???

回答:System.Drawing.Color cl;

int n = System.Drawing.ColorTranslator.ToWin32(cl)

12.38.请问,在VC下修改系统参数类,除了vgctrl1.Execute()这个手段,还有别的吗? 用vgctrl1.Execute()这个手段实在不方便。

回答:系统参数是关系到整个系统所有文件的一些参数,例如DefaultPath(箭头、网纹、属性列表窗口等系统文件存放的路径) 如果写成形如: vgctrl1.DefaultPath = "c:\vg\dat\" 。那就表示只是针对vgctrl1这个视图控件进行设置了。以后势必还要对其他控件进行同样的设置......

12.39.请问如何用VC枚举一个页面的所有图元?

回答:例如用VC++ 6.0生成11对类库文件 ,然后用vc.net打开vc60创建的工程 ,GetActiveSheet()返回CSheet(页面类) ,页面上有UnitCount个图形 ,第一个图形是GetUnits(0)(基本图形类CUnit),做一个循环遍历就可以了。

12.40.在入门教程里, 我要是拿vc写该怎么写啊,你给出了VB的修改属性的语句如下:

set d = vgctrl1.ActiveSheet.Units( 0 )

d.SetPropertyValue "circle1.BackColor", 255

d.SetPropertyValue "circle1.Pattern", 15

我们不仅可以对元件的属性进行直接读写,而且还可以通过SetPropertyValue操作元件内部图形的属性。

回答:CUnit d = vgctrl1.GetActiveSheet().Get_Units( 0 );

d.SetPropertyValue( "circle1.BackColor", 255 );

12.41.如何获得图形元素中的文字内容?

回答:AText = AUnit.GetPropertyValue( "text1" )

AString = AUnit.GetPropertyValue( "Text1.Text" )

12.42.怎么给连接线加箭头? 我用控件在vb程序中用语句vgctrl1.NewUnit "Line", 5画了一条连接线,怎么给该线加箭头?,用程序怎么获得此对象啊?

回答:NewUnit返回值就是此对象 线条有StartArrow属性和EndArrow属性,这是起止箭头形状。

12.43.VG怎么才能导入其它作图工具绘制的矢量图?有没有现成工具将作图工具绘制的矢量图转换为VG能够使用的?

回答:选择编辑/粘贴emf图片功能、或VG的专门格式转换工具、VG.EXE的导入

12.44.请问,如何取消平移画面效果?在使用了movesheet()函数后,如何才能将鼠标、选择状态还原回初始状态(加载图元时状态)?

回答:Edit()

12.45.因为图片太大,现在想在vg中实现漫游。请问有这方面的思路与例子嘛? 请问平移画面是用movesheet() 移动图元是用什么?

回答:movesheet() 、moveselection()

12.46.在Vb程序中使用VG控件,VB程序中的变量能否与VG控件中的变量交互,例 如,在Vb中设置变量,当该变量值变化,是否能映射到VG控件中的变量?

回答:请参考source.zip包里面提供的vb例子

12.47.询问,VG帮助上Delphi的问题:FormCreate

procedure TForm1.FormCreate(Sender: TObject);

begin

   vgctrl1.Design( '' );

   vgctrl2.Run( 'C:\Documents and Settings\LG\桌面\vg\lib\电力设备.tbl' );

   vgctrl2.Library_ := True

end;

procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

    vgctrl1.NewUnit('水平刀闸',1);

end;

我就是按照帮助上原样照搬在DELPHI试验下,看能不能画出刀闸,为什么以上代码,运行过后,不能画出刀闸, 还有我从你们给的例子,运行可执行文件,也画不出东西呢, 请问应该怎么办我以上代码错误吗, 我就是想看看 怎么在自己程序上做出图

回答:不能在FormCreate里面写 ,必须在FormShow里面写,因为FormCreate的时候,窗口没有创建起来,而Design和Run函数需要窗口创建后才能运行

12.48.如何在元件的下方自动显示元件的名称.?

回答:目前无这个功能 ,代替办法:可在状态栏里面显示鼠标所在位置处的图形名称

处理OnMouseMove事件,根据ActiveSheet.UnitAtCursor( 0 )返回值就知道当前鼠标位置处的图形了。

12.49.在图形和元件直接设置连接出现的问题?我在delphi下,想在已经画好的折线的每个顶点上连接一个元件(相同的),已经把折线的linkmode:=2(是被连接者 ),每个元件中linkmode:=1(是连接者)请问如何设置连接啊,

这样设置为什么不行?

punit:=asheet.AddUnit('航路点',0,0,0,0);

punit.SetLink(aline,punit.Links[0],p0);

其中punit是元件,aline是被连接的折线?

回答:punit.setlink( aline, "dot", "p1" )

其中"dot"是元件中那个连接点的名字 "p1"是线条连接点的名字(第二个点) 请仔细阅读帮助中关于setlink的说明,详情查看小节10.12、图形拓扑连接的使用

12.50.想利用数据库中的两组数据为为点坐标使用vg画线,这些线是连起来的,数据库已连接好了,写了代码运行之后,为什么马上显示画线?

回答:首先建立一条线,然后对线上顶点进行赋值。最后调用线条的Refresh()函数

12.51.如何向一个函数中传参数? Results = Array(6)

Results.Text = ValueArray

i = 0

iUnit = 0

While i < Elements.Count

iUnit = UnitByName(Elements)

If iUnit <> 0 then    

    iUnit.Exequte("RefreshValue", CStr(Results))

End If

i = i + 1

Wend

一段脚本程序如上,其中iUnit 是从外部添加的。iUnit 中定义了一个函数RefreshValue用于刷新数据,现请问,如何在以上程序中调用此函数呢?

回答:这是在脚本中么? 如果是在脚本中,如此即可:

iUnit.RefreshValue( Results ) 如果是在控件中,需要这样: vg.Execute( "unitname.RefreshValue( results )" ) 其中unitname是图形单元的名字 results是其中的参数。

12.52.在IE中,ActiveX控件定时调用GetURL更新数据,鼠标变为沙漏形,有何解决方法?

回答:是不是数据太多了,太多数据下载的话,应该规划好数据传输,另外可用下面的办法:

 vgctrl1.Execute( "cursors[4]=cursors[0]" ) ;

12.53.你们有没有导入SVG的工具或者代码?

回答:有,你在VG.EXE里面新建一个文件,然后点击菜单->文件->导入,选SVG格式。

12.54. 在time 的ontimer中这个写

dim ran as Random

text1.Text=ran.Next(100,1000)

为什么不对?

回答:dim ran as Random是什么语法?不是VG语法,请查看VG的语法帮助说明。

12.55.我要声明一个随机数,怎么做?

回答:Random 求一个随机整数 :text1.Text=Random(100,1000) VG的内部函数

12.56. 如何动态添加元件的属性?

回答:在VG脚本里,用:元件名.setpropertyvalue('属性名',属性值)进行增加与赋值属性。返回值用:元件名.getpropertyvalue('属性名'),详情请看帮助的setpropertyvalue。

12.57. 还有,在.NET下如何实现这样的功能:vgctrl1.AddFunction "EndRunning", "41", 48, AddressOf EndRunning? 在VB下是行的,但在.NET下会出错.

回答:.NET下面的函数与变量、对像都是托管代码,是访问不了他们的内存地址,所以.NET会出错,在.net、JAVA下不能直接操作地址,所以在.net下不能使用函数AddFunction。只能把功能函数放在一个DLL中,然后用VG声明DLL外部函数,而DLL必须是按WIN32API的dll标准?

12.58. VG正式网络版里面的vgserver.exe是做在网络认证服务的吗,它的端口是多少?

回答:vgserver监听端口1024,register(“IP”)时VG.dll调用Ry4Com.dll去和vgserver联系,知道是否取得VG使用权。如果后台的服务器是在路由后面的,那么应该把路由的端口1024开放并映射到后台服务器的1024端口上来

12.58. 如何在JS里面post一段VG的XML串到后台WEB服务器?

回答:JS代码如下:_form.column_value.value = vgctrl1.SaveToBuffer();

        _form.event.value = 'save';

        _form.submit();

就可以实现网上VG编辑图形,用JS脚本上传TBL入数据库了。

12.59. 如何判断图形是否在某个矩形范围内?

回答:Touches函数是Iunit图形单元类的:

bool=Touches(double,double,double,double)

四个参数分别表示这个矩形的左边、上边、右边、下边坐标(视图坐标)。

如果图形在这个矩形框内,返回true,否则返回false。

12.59.VC里如何用AddFcnction增加类的成员函数做为内部函数

回答:VC里面声明如下: void __stdcall CallByVG1( double x );

定义如下:void  __stdcall   CReadwriteDlg::CallByVG1( double x )

{

    thisdlg->SetDlgItemInt( IDC_EDIT1, (int)x );   

};

Addfunction增加函数如下:

    void (__stdcall CReadwriteDlg::*CallByVG1)(double a);

    CallByVG1=&CReadwriteDlg::CallByVG1;

    vgctrl1.AddFunction( "CallByVG", "12", '0', *(long*)(& CallByVG1) );

VG调用如下:

CallByVG(0,Sender.Value )

由于C++类中成员函数的this指针的默认声明,所以要声明时要多一个参数this.但VC函数使用this指针时,会有些问题,所以不推荐使用类成员函数。增加内部函数时应建议使用全局函数。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值