Tivoli 服务台 6.0 开发工具包脚本程序设计指南
使用 TSD 脚本,用户可创建类属窗口、虚拟滚动窗口和表格。TSD 脚本窗口系统由许多 TSD 脚本语句组成,这些语句允许您创建自定义用户界面。
本章内容:
窗口是屏幕或桌面的一部分,包括自己的文档或消息。下列术语用来描述类属窗口的部分。
WinCreate 用来创建类属窗口。类属窗口是 TSD 脚本提供的最简单最灵活的窗口。类属窗口也可包括其自己的消息。
VARIABLES mainWindow: Window; ACTIONS WinCreate($Desktop,mainWindow,MainEvent, 1,1,100,30,'',0);
下列解释说明前面实例的操作段中使用的 WinCreate 自变量:
坐标系从(1,1)开始,该点位于屏幕的左上角。x 坐标向右增加; y 坐标向屏幕下方移动时增加。
下两个自变量分别是新窗口客户区的宽度和高度。这些以字符单位表示。
在本实例中创建的窗口的左上角在屏幕的左上角。它为 100 个字符宽,30 个字符高。
在下列实例中,最后一个自变量是一个整型表达式,其中每一位位置代表一个开/关标志。例如:
WinCreate($Desktop,mainWindow,MainEvent, 1,1,100,30,'', BitOr($WinTitle,$WinBorder,$WinMinMax));
BitOr 函数的结果意味着此窗口有三项:标题条、边界和右上角的一组最小化/最大化按钮。
欲获取关于 TSD 脚本提供的创建标志的详细信息,请参见 TSD 6.0 开发工具包脚本语言参考。
用户可在 TSD 脚本中创建应用程序主窗口。在 TSD 脚本中,创建窗口包括下列步骤:
注:如果事件处理器执行的操作更改了窗口的客户区的尺寸,则产生新的 $MsgSize 消息。窗口的客户区是最终用户工作的区域。不包括在客户区的元素有:
这四步中,大多数窗口只涉及第二步和第四步。$MsgCreate 消息很重要,因为它标识事件处理器对窗口(在显示它前)进行最后调整和对实例数据中的值进行初始化的适当时间。
当 MainEvent 例程接收到 $MsgCreate 消息,它执行两个操作:
- 首先,它创建图符名列表。
- 然后它使用 WinSetIconBar 向将要创建的窗口发送消息,告诉它向其工具条添加这些图符。例如:
EVENT MainEvent(REF context: ContextRecord) IS VARIABLES iconList: List of String; ACTIONS WHEN $Event IS $MsgCreate THEN iconList:={'ADDINV.ICO','SRCHINV.ICO', 'REPORTS.ICO'): LIST OF STRING; WinSetIconBar($Handle,iconList); ELSWHEN $MsgSelect THEN WHEN $EventParm(1,Integer) IS 1 THEN CreateAddWindow; ELSWHEN 2 THEN CreateSearchWindow; ELSWHEN 3 THEN CreateReportWindow; END; ELSWHEN QUERY_CURRENT_ID THEN $EventParm(1,String):=context.current_ID; END; END (* Main Event *);
注:
主程序的 WinCreate 语句中的 $WinIconBar 标志决定设置新窗口尺寸设置是否正确,以便当添加工具条时客户区是正确的。此部分讨论如何创建菜单系统。假如要构造带三个菜单的菜单系统:文件、编辑和帮助。在文件菜单下有下列命令:
在编辑菜单下有下列命令:
最后,有下列帮助菜单菜单命令:
通过从上到下,从左到右添加选项,可把两维菜单结构转换成一维列表。
ListInsert(menuList,'');
ListInsert(menuList,'Save ~As');
WinSetMenuBar($Handle,{'File','New','Open',..., 'General Help''}: LIST OF STRING);
使用'/L-'指示在菜单命令间应有分隔符。
WinSetMenuBar($Handle,{'File','New','Open',..., '/L-', 'General Help'}: LIST OF STRING);
当用户选择一个菜单命令时,窗口的事件处理器接收到 $MsgMenu 消息。第一个 $MenuSelection 事件参数(INTEGER)包括一个整数,指示选择的菜单命令。此整数编码为:
主要*100 + 次要
主要是选择的水平菜单命令号(100 对应最左),次要是选择的垂直菜单命令数(101 对应最上)。所以,如果用户选择编辑菜单下的粘贴命令,则第一个未命名的事件参数(整数)的值为 203,因为编辑是第二个水平命令,粘贴是第三个垂直命令。数字 1-99 代表工具,因为 $MsgMenu 也处理工具事件。
TSD 脚本提供一些语句,可改变类属窗口客户区的外观。在内部,类属窗口记录当前光标位置。这是某些输出操作(如 WinWrite)的(x,y)位置。
当前选择的坐标系中的绘制位置可从位置(1,1)测量,后者位于客户区的左上角。绘制位置可以下列单位测量:
x 坐标位置向右增加,y 坐标位置向下增加。
下表列出类属窗口可用的语句。参数列在 Tivoli 服务台 6.0 开发工具包脚本程序设计指南中。
语句 | 说明 |
WinGoToXY | 把当前位置移到给定(x,y)坐标。 |
WinWrite | 在当前位置写字符串。 |
WinWriteAt | 在给定位置写一字符串。 |
WinWriteLN | 在当前位置写一字符串,并把位置指针移到下一行的开始。 |
WinX | 返回当前文本输出的 x 坐标。 |
WinY | 返回当前文本输出的 y 坐标。 |
WinWidth | 返回窗口的宽度,以字符为单位。 |
WinHeight | 返回窗口的高度,以坐标表示。 |
WinClear | 把整个窗口清除为当前背景颜色。 |
WinClearEOL | 把窗口清除为当前背景颜色(从当前光标位置开始到当前行的末尾)。 |
WinClearEOW | 把窗口清除为当前背景颜色(从当前游标位置的右侧开始到当前游标位置之下)。 |
WinClearRectangle | 把给定矩形区域清除为当前背景绘制颜色。 |
WinGetXPos | 返回一有效窗口句柄的 x 坐标位置。 |
WinGetYPos | 返回一有效窗口句柄的 y 坐标位置。 |
WinSetColor | 设置窗口的当前前景和背景绘制颜色。 |
下列语句是用来创建窗口的函数。
语句 | 说明 |
WinSetIconBar | 设置图符条的内容。 |
WinSetMenuBar | 设置菜单条的内容。 |
WinCreateClock | 在类属窗口内创建时钟或计时器窗口。 |
WinCreateImage | 在类属窗口内创建图像查看器,显示给定的图像文件。 |
WinCreateMouseRect | 在窗口上的给定位置创建一矩形“热点”。在此区域内的鼠标点击产生类属窗口事件处理器的事件。 |
$MsgPaint 事件(也称作重新绘制消息)指示类属窗口的一些部分需要重新绘制。
如果用户关闭另一窗口或单击类属窗口,窗口管理器需要重新显示类属窗口的内容。通过发送 $MsgPaint 消息完成此操作。由于窗口管理器不记得桌面上打开的每个窗口的内容,则要求每个窗口知道如何重新绘制它自己。
例如,假定:
如果用户单击其他窗口,则它成为前景台,而类属窗口的一部分(或全部)落在其后。要更新显示,两个窗口都必须重新绘制自己。
在任何时侯,事件处理器可接收它所服务的窗口的 $MsgPaint 消息。有两个导致重新绘制消息的基本触发器:
注:一般情况下,写到窗口客户部分的类属窗口应该只在事件处理器(它服务于 $MsgPaint 事件)部分这样做。
在任何时侯,类属窗口必须能处理重新绘制消息并重新产生自己的内容。TSD 脚本提供虚拟滚动窗口,完成下述操作:
虚拟滚动窗口完全是虚拟的。用户可在其两维空间的任何地方写信息,并使用滚动条(水平的和垂直的)来查看信息。
注:虚拟滚动窗口不知道用户数据结构。它比类属窗口更容易使用,但可能效率低一些。
用 WinCreateScrollWindow 语句创建虚拟滚动窗口。此语句使用下列自变量:
自变量名 | 说明 |
whdlParent | 新创建窗口的父窗口的句柄。 |
whdl | 用此参数返回新创建窗口的句柄。如果有错误,则变量设置为 $Unknown。 |
EventHandler | 处理窗口或对话框产生事件的事件处理器。如果不需要处理事件,可能使用关键字 $NullHander。 |
xLoc | 窗口左上角的 X 坐标。X 坐标以字符单元测量。 |
yLoc | 窗口左上角的 Y 坐标。Y 坐标以字符单元测量。 |
width | 窗口的宽度(X 方向),不包括边界。X 坐标以字符单元测量。 |
height | 窗口的高度(Y 方向),不包括边界、标题条、菜单条、图符条和状态条。Y 坐标以字符单元测量。 |
title | 在窗口标题条上显示的标题。窗口必须有标题条,以显示标题。使用 $WinTitle 样式。 |
font | 可用的系统字体名称。 |
pointSize | 要在滚动窗口内使用的字体的点大小。 |
style | 整数位掩码,代表一列风格标志,用于控制窗口的外观。 |
虚拟滚动窗口对记录“每次一行”信息很有用。下列实例创建一个窗口,作为可滚动“黑板”。该窗口用来列出 EMPLOYEES 表中所有员工的姓名和社会安全号。每次向窗口上写一行这些姓名和号码,从窗口的顶部开始。
VARIABLES vWin: Window; i: INTEGER; cursor: SQLCursor; ACTIONS WinCreateScrollWindow($Desktop,vWin,$NullHandler, 1,1, 80,25,'Matches', SystemMonospaced, 10, BitOr($WinDefaultStyle, $WinViscroll, $WinAutoScroll)); i:=SQLSelect(cursor,'SELECT * FROM EMPLOYEES'); WHILE i > 0 DO i:=SQLFetch(cursor,employee); IF i > 0 THEN WinWriteLn(vWin,employee.first_name & ' ' & employee.last_name & ' ' & employee.ssn); END; END; SQLCloseCursor(cursor);
因为使用 $WinAutoScroll 样式,当到达窗口的底部时,先前的项滚出窗口的顶部。
在任何时侯,您都可使用垂直滚动条返回并查看先前的项。当用户不再使用窗口时,可使用系统菜单关闭它,或在应用程序中显式发送 $MsgClose 消息。
下列语句可用来更改虚拟滚动窗口的外观和功能:
语句名 | 说明 |
WinGoToXY | 把当前位置移到给定虚拟(x,y)坐标。 |
WinWrite | 在当前位置写字符串。 |
WinWriteAt | 在给定位置写一字符串。 |
WinWriteLN | 在当前位置写一字符串,并把位置指针移到下一行的开始。如果当前位置在窗口的底部,且您使用 $WinAutoScroll 样式,则整个窗口向上滚动一行。 |
WinX | 返回当前文本输出位置的 x 坐标。 |
WinY | 返回当前文本输出位置的 y 坐标。 |
WinWidth | 返回(物理)窗口的宽度,以字符表示。 |
WinHeight | 返回(物理)窗口的高度,以坐标表示。 |
WinClear | 把整个窗口清除为当前背景颜色。 |
WinClearEOL | 把虚拟窗口清除为当前背景颜色(从光标位置到当前行的末尾)。 |
WinClearEOW | 把窗口清除为当前背景颜色(从当前游标位置的右侧开始到当前游标位置之下)。 |
WinClearRectangle | 把给定矩形区域清除为当前背景颜色。 |
WinSetColor | 设置窗口的当前前景和背景绘制颜色。 |
WinSetIconBar | 设置图符条的内容。 |
WinSetMenuBar | 设置菜单条的内容。 |
WinCreateClock | 在滚动窗口内创建时钟或计时器窗口。时钟自动在滚动窗口内滚动。 |
WinCreateImage | 在滚动窗口内创建图像查看器。显示给定的图像文件。此图像自动在滚动窗口内滚动。 |
WinGetXPos | 返回一有效窗口句柄的 x 坐标位置。 |
WinGetYPos | 返回一有效窗口句柄的 y 坐标位置。 |
WinCreateMouseRect | 在窗口上的给定位置创建一矩形亮点。在此区域内的鼠标点击产生滚动窗口事件处理器的事件。 |
像类属窗口一样,虚拟窗口维护内部光标(x,y)位置。此光标位置指示某些输出操作(如 WinWrite)从何处开始。在 WinWrite 操作后,光标的 x 位置按所写字符的数目增加。
调用 WinX 和 WinY 函数可找到光标位置。调用 WinGotoXY( )函数可更改光标位置。
Tivoli 服务台 6.0 开发工具包脚本程序设计指南