progress变量的属性以及显示

来源:互联网 发布:酷乐视 q6 软件 编辑:程序博客网 时间:2024/06/07 05:05

关键字: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.
更多的属性或者方法可以参考帮助.