Tivoli 服务台 6.0 开发工具包脚本程序设计指南

第 6 章:使用 TSD 脚本窗口系统

返回目录


简介

使用 TSD 脚本,用户可创建类属窗口、虚拟滚动窗口和表格。TSD 脚本窗口系统由许多 TSD 脚本语句组成,这些语句允许您创建自定义用户界面。

本章内容:

窗口说明

窗口是屏幕或桌面的一部分,包括自己的文档或消息。下列术语用来描述类属窗口的部分。

使用 WinCreate

创建类属窗口

WinCreate 用来创建类属窗口。类属窗口是 TSD 脚本提供的最简单最灵活的窗口。类属窗口也可包括其自己的消息。

VARIABLES 
  mainWindow: Window; 
ACTIONS 
WinCreate($Desktop,mainWindow,MainEvent, 
            1,1,100,30,'',0); 

实例 WinCreate 自变量

下列解释说明前面实例的操作段中使用的 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 脚本中,创建窗口包括下列步骤:

  1. $MsgSize 事件调用与窗口相联系的事件处理器。在屏幕上绘制窗口前完成此操作。
    此外,另两条信息被传送给事件处理器:新窗口的宽度和高度(以字符表示)。这些值分别在第一个未命名事件参数(INTEGER)和第二个未命名事件参数(INTEGER)中传送。
  2. 然后用 $MsgCreate 事件调用事件处理器。此信号通知事件处理器将要在屏幕上绘制窗口。在这时,事件处理器应执行操作,以添加菜单命令、工具和其它可视化元素。

注:如果事件处理器执行的操作更改了窗口的客户区的尺寸,则产生新的 $MsgSize 消息。窗口的客户区是最终用户工作的区域。不包括在客户区的元素有:

  1. 把窗口框架绘制在屏幕上。
  2. $MsgPaint 消息调用事件处理器。在这时,事件处理器必须绘制在窗口的客户区内出现的任何其它信息。

这四步中,大多数窗口只涉及第二步和第四步。$MsgCreate 消息很重要,因为它标识事件处理器对窗口(在显示它前)进行最后调整和对实例数据中的值进行初始化的适当时间。

MainEvent 例程接收到 $MsgCreate 消息,它执行两个操作:

注:主程序的 WinCreate 语句中的 $WinIconBar 标志决定设置新窗口尺寸设置是否正确,以便当添加工具条时客户区是正确的。

下拉式菜单

创建下拉式菜单系统

此部分讨论如何创建菜单系统。假如要构造带三个菜单的菜单系统:文件、编辑和帮助。在文件菜单下有下列命令:

在编辑菜单下有下列命令:

最后,有下列帮助菜单菜单命令:

菜单选项

通过从上到下,从左到右添加选项,可把两维菜单结构转换成一维列表。

ListInsert(menuList,''); 
ListInsert(menuList,'Save ~As'); 
WinSetMenuBar($Handle,{'File','New','Open',...,
'General Help''}: LIST OF STRING); 
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 位置按所写字符的数目增加。

调用 WinXWinY 函数可找到光标位置。调用 WinGotoXY( )函数可更改光标位置。


Tivoli 服务台 6.0 开发工具包脚本程序设计指南

返回目录

版权所有