关键字:progress 4GL 赋值 窗口
前面介绍了progress的IO操作,但是没有说怎么直接由输入给变量赋值。这是因为windows版的progress显示不是在命令行窗口下,而是自己会产生一个窗口,在其中显示变量的值,以及让用户设置新值。实际上,progress的这个缺省窗口就是一个简单的报表工具。
1.变量的高级属性
原来只是简单的介绍了定义变量的方法,而实际上变量名也都是带有属性的,其实严格来说应该是选项option。下面是一个比较完整的define variable语句,之所以说比较完整是因为这里的介绍都是针对图形用户界面版本的,字符界面版本的就忽略掉了:
define variable variable-name as dataType no-undo
bgcolor color-value
column-label label-name
context-help-id m
decimals n
drop-target
extent n
font font-expression
fgcolor color-value
format string
initial
{constant[,constant,[...]]}
label str1,str2,...
mouse-pointer expression
[not] case-sensitive
view-as-phase
trigger-phase.
下面对这些选项一一讲解:
bgcolor顾名思义就是背景色,其值为整数,可以从1到255。
column-label列标题,是一个字符串,它会显示在变量值的上方,并且可以用"!"来使它换行显示。
context-help-id表明帮助信息。
decimals表示精度,专门针对小数的。如果你使用在别的变量类型上,虽然语法正确,但是仍然会给于一个错误,然后progress回忽略它。
drop-target表示可以作为一个文件释放对象,不过没有用过。
extent就是定义数组的维数。注意不支持多位数组,当然可以通过别的方法来模拟。
font其对应的值是整数,对应预先定义的一系列字体。
fgcolor前景色。
format定义了变量的显示格式,注意是显示格式,变量实际存贮的内容可以远远多于所显示的,这是一个双引号括起来的字符串,下面介绍一下不同数据类型的缺省格式:
数据类型 缺省格式 说明
character "x(8)" 最多只显示8个字符
com-handle >>>>>>9 最多显示7位的整数
date 99/99/99 日/月/年
decimal ->>,>>9.99 小数点后两位,不满补0
handle >>>>>>9 和com-handle一样
integer ->,>>>,>>9 最多七位,左边不足留空
logical yes/no 逻辑值可以用true/false,也可以直接用yes/no
recid >>>>>>9 见handle
widget-handle >>>>>>9 见handle
memptr 不能直接显示,不过可以把它转换为字符串间接现实
x表示是一个字符,xxxx就相当于x(4),中间可以插入分隔符,比如电话号码,你可以定义格式为"X(3)-x(8)",你的电话号码为"01012345678",则它会直接显示为"010-12345678".又比如有一个日期字符串"20081120131400",你可以直接定义格式为"xxxx-xx-xx xx:xx:xx",则该日起就可显示为"2008-11-20 13:14:00".
>表示一个数字,如果该位没有则留空;9则表示该位没有插入0.前边的-在正数的时候不会显示.
initial 表示改变量的初始化值,如果是数组的话则可以用例如initial ["element1","element2","element3"]来设置.
如果没有显示初始化,progress会给出初始化值.下面的表格表明了各个数据类型的缺省初始化值:
数据类型 初始化值 说明
character ""
com-handle ? ?是一个关键字,用来定义一个未定义值.别的句柄也是如此.
date ? 显示为空
decimal 0.00
integer 0
logical no
label表示侧面标签,如果column-label也有的话,会显示column-label.
mouse-pointer没有使用过.
view-as说明用什么样的小窗口控件(widget)来显示变量.主要使用在窗口程序中.
trigger-phase定义了事件处理代码,这些事件是针对view-as里的小窗口控件的.
2.窗口程序
在progress中开发一个GUI程序也是一个很简单的事情.只要拖拖拉拉的把控件放在窗口上,就可以了.这样的文件会被保存为.w结尾.下面要说的是变量是怎么在窗口中显示的.
上面提到过,很多的小窗口控件用来表示一个变量的值,如果你用文本的方式打开.w文件并且察看一下你所拖拉的控件的定义就会发现,他们的定义都是define variable,具体是什么控件是由view-as字句决定的.这样的控件类型称之为field level的widget:
fill-in表示一个单行输入的文本框.不能输入中文.
editor表示一个可以多行输入的文本框.并且支持中文.
combo-box表示是一个组合框.
radio-set
selection-list是一个列表框
slider是一个滑块儿
对于定义的变量,它要显示在某一个框架(frame)中.比如,display用来显示一个变量,它的作用其实就是把变量的值显示在对应控件的screen-value中.相反的过程则是assign,把screen-value中的值也就是用户的输入存储到变量的实际内存中.
变量的完全显示:
display variable1 format format-string with frame frame-name.
实际上每一个小控件(widget)都有属性以及方法用来操作自己,那么怎么引用属性呢,比如引用screen-value,应该是:display myWidget:screen-value in frame frame-1.
更多的属性或者方法可以参考帮助.