窗口元素的外部引用
窗口元素是指窗口中的窗口变量、窗口中的对象(如按钮、矩形、自由报表等)以及窗口自定义函数。而窗口元素的外部引用则是指在窗口外部对某一窗口中的元素的引用。这种引用适用于客户端中的任何脚本。
在老版本中,窗口将内部元素封装起来,外部脚本只能将窗口作为一个整体(或者说对象)进行访问。例如,Open()、Show()、Close()等窗口对象函数都是将窗口作为一个对象来访问的。但对于窗口中的元素外部则是无法访问的。紫金桥v6.5及更高级的版本将窗口元素对外开放,让窗口外部可以随意引用窗口元素。
下面以示意图的方式进一步说明这种引用关系的变化。
在低于紫金桥V6.5的版本中,窗口外部对窗口的引用情况如下图所示(箭头指向被访问者):
窗口外部可以将窗口作为一个整体访问,但不能访问窗口中的变量、对象以及窗口自定义函数。
在紫金桥v6.5以上版本中,窗口外部对窗口的引用情况如下图所示:
窗口外部既可以将窗口作为一个整体访问,也可以访问窗口内部的元素。
引用规则
窗口元素的外部引用适用于客户端中的任何脚本。其引用方式为:
#窗口名.对象名(或变量名或函数名)
例如:想在窗口外某一脚本处引用窗口DRAW1中的按钮Menu1的“Text”属性,则可以输入语句“#DRAW1.Menu1.Text...”。
内部处理
在运行时,如果一个窗口处于关闭状态,而此时其他脚本正在使用该窗口中的元素,则系统会自动以隐藏的方式打开这个窗口。并且,在程序退出前或者用户以某种方式(如脚本)主动关闭该窗口前,这个窗口会一直处于打开状态。此时应该注意,虽然该窗口不可见,但是实际上它已经被打开,它的窗口脚本已经被激活,如进入窗口脚本、周期执行脚本以及画面中的可执行脚本等。
此时如果想判断某一窗口是否已经被打开,可以使用窗口对象的IsOpen()函数。
优点
窗口元素的外部引用功能方便了紫金桥工程的编写。在老版本软件中,除少部分对象(如二维表、全局自定义函数、配方等)能以全局对象的方式使用外,其他绝大部分的对象都只局限于窗口内部使用,例如:windows控件、自由报表、趋势组件等。另外,若想在窗口间交换数据也只能使用全局变量。现在,窗口元素的外部引用功能解决了这些问题。某窗口中的元素完全可以当做全局元素来使用,这使紫金桥的工程开发变得更为灵活。
缺点
窗口元素的外部引用功能是为某些特殊情况下的使用而设计的。过多的使用这种功能会使窗口进程关系混乱,难以确定窗口间的依赖关系,致使程序可读性和稳定性降低。例如,某工程中在窗口2中实时显示窗口1中的变量n,如果某一时刻窗口1被关闭,虽然系统马上会以隐藏的方式打开窗口1,但在窗口1关闭的瞬间,变量n的值为坏值,这可能会产生意想不到的后果。
因此,在非必要情况下建议尽量不使用窗口元素的外部引用功能。如果一定要使用,请在详细了解它的运行原理之后再使用。