Tivoli 服务台 6.0 开发工具包脚本语言参考
返回主页
注:所有 Win 函数都具有同样的返回码。此代码表在 WinAboutBox 函数中出现,并且每个 Win 函数都出现到此表的链接。
返回主页
注:这是窗口处理函数的第一部分。本部分以
WinSetColor 结束,第二部分
以 WinSetFont 开始。
返回一个句柄到桌面窗口。在当前会话期间,此值是不变的。但并不永久保存此值。下次执行程序时,此常数会有一个新值。
FUNCTION $Desktop: WINDOW;
注意:在 OS/2 系统中,有一些有效的消息,可以发送它们至桌面以暂停处理。例如,将 $MsgClose 发送至桌面,可以暂停程序的运行。这种运转状态由操作系统控制。
$Desktop 是预定义的系统常数,它包含 OS/2 桌面或 Windows 桌面的句柄。在窗口或对话框语句中,它常常被指定为父级。
KNOWLEDGEBASE Desktop;
ROUTINES PROCEDURE Example;
PRIVATE ROUTINES
(* Create a scroll window parented by the desktop with default event processing *) PROCEDURE Example IS VARIABLES whdl: WINDOW;
ACTIONS WinCreateScrollWindow($Desktop, (*Window is a child of OS/2 desktop *) whdl, (* return handle of new window *) $NullHandler, (* Default event processing *) 5, 5, 80, 20, (* Window location and size *) 'Example', (* Window title *) '', (* Use default font *) 0, (* Point size is ignored for default *) BitOr( $WinTitle, $WinBorder, $WinSysMenu )); WinWait( whdl ); END;
当 $MsgChar 事件发生时,指示用户所按的键。
TSD 脚本为某些特殊的键,如光标控制键、修改键(即,那些要与其它键以组合方式按下的键,如 Control 或 Alt) 等,定义若干常数。
注: 其他信息,请参见 TSD 脚本常数。
EVENT MyEvent IS ACTIONS WHEN $Event IS $MsgChar THEN WHEN $KeyCode IS $KeyUpArrow THEN MoveUp; ELSWHEN $KeyDownArrow THEN MoveDown; ELSWHEN $KeyLeftArrow THEN MoveLeft; ELSWHEN $KeyRightArrow THEN MoveRight; END; END;
此函数显示应用程序缺省的"关于"框。
FUNCTION WinAboutBox( VAL Icon : STRING, VAL AppName : STRING, VAL Version : STRING ) : INTEGER;
显示的信息包含 Tivoli 服务台的版权信息,并且不准备用于第三方的应用程序。
自变量名称 | 说明 |
Icon | 与应用程序同时显示的、相关的 .bmp 文件名。 如果不能查找到文件、或文件名无效,则显示的框中不出现图形。搜索 SAIPATH 和 PATH 环境变量,寻找由此命令指定的文件。 |
AppName | 应用程序的名称。 |
Version | 应用程序的版本号。 |
KNOWLEDGEBASE aboutbox;
CONSTANTS
AppName IS 'Pink Elephant Word Processor'; AppVersion IS 'Version 3.1';
ROUTINES
Procedure DisplayAboutBox;
PRIVATE ROUTINES
Procedure DisplayAboutBox IS
VARIABLES ACTIONS WinAboutBox('pink.bmp', AppName, AppVersion); END;
返回码 | 说明 |
1 | 成功完成。 |
0 | 用户异常终止。用户关闭窗口或终止操作。通常以按 Esc 键或“取消”按钮,或从系统菜单中关闭窗口来实现。 |
-1 | 窗口句柄不能找到有效的窗口。该窗口可能不再存在,或该窗口不支持此命令。 |
-2 | 未知值。 |
-3 | 内存不足。 |
-4 | 没有创建。操作系统不能创建请求的对象。一个可能的原因是父级窗口句柄引用了已不存在的窗口。 |
-7 | 在窗口句柄引用的对话框中,不能找到对话框的命名控制。 |
-8 | 请求的对话框命令可能不能以命名的控制类型来执行。 |
-10 | 在操作系统级调用失败。这可能是由不适当的配置或资源不够引起的。 |
-12 | 用 NETx 语句不支持的消息,调用 SendMessage 或 PostMessage 语句。这类消息必须是受支持的 $MsgNetx 消息之一,或用户定义的 $MsgUser + n 消息(这是为与 NETx 语句一起使用而专门定义的)。 |
清除窗口或滚动窗口的整个客户机区域,使其成为当前的背景颜色。
FUNCTION WinClear(VAL whdl: WINDOW): INTEGER;
自变量名称 | 说明 |
whdl | 要清除的窗口的句柄。此句柄可能引用标准窗口或滚动窗口。 |
使用 WinSetColor 函数可以改变当前的背景颜色。
WHEN $Event IS $MsgPaint THEN WinSetColor($Handle,$WinWhite,$WinBlack); WinClear( $Handle ); WinWrite($Handle,'Black');
使用当前的背景颜色清除窗口,从当前的光标位置清到行末。
FUNCTION WinClearEOL(VAL whdl: WINDOW): INTEGER;
自变量名称 | 说明 |
whdl | 要清除的窗口的句柄。此句柄可能引用标准窗口或滚动窗口。 |
WinClearEOL 从当前的光标位置到当前行的末端,进行清除。它不改变光标的位置。清除区域涂上当前的背景颜色。
注:可以使用 WinSetColor 函数改变当前的背景颜色。
WHEN $Event IS $MsgPaint THEN WinSetColor($Handle,$WinWhite,$WinBlue); WinGoToXY($Handle,2,2); WinClearEOL($Handle);
使用当前的背景颜色清除窗口,从当前的光标位置清到窗口底端。
FUNCTION WinClearEOW(VAL whdl: WINDOW): INTEGER;
自变量名称 | 说明 |
whdl | 要清除的窗口的句柄。此句柄可能引用标准窗口或滚动窗口。 |
WinClearEOW 清除指定的窗口,从当前光标的位置到窗口的底端。清除区域涂上当前的背景颜色。光标的位置不改变。
注:可以使用 WinSetColor 语句改变当前的背景颜色。
WHEN $Event IS $MsgPaint THEN WinGoToXY($Handle,5,10); WinSetColor($Handle,$WinWhite,$WinLightBlue); WinClearEOW($Handle);
使用当前的背景颜色,清除窗口的矩形区域。
FUNCTION WinClearRectangle(VAL whdl: WINDOW, VAL xLoc, yLoc, width, height: INTEGER): INTEGER;
自变量名称 | 说明 |
whdl | 要清除的窗口的句柄。此句柄可能引用标准窗口或滚动窗口。 |
xLoc | 要清除的区域左上角的 X 位置。X 坐标是以字符单元指定的。 |
yLoc | 要清除的区域左上角的 Y 位置。Y 坐标是以字符单元指定的。 |
width | 要清除的区域的宽度。宽度以字符单元量度。 |
height | 要清除的区域的高度。高度以字符单元量度。 |
WinClearRectangle 在给定的窗口内,清除指定的矩形区域。清除区域涂上当前的背景颜色。光标不移动。
注:可以使用 WinSetColor 语句改变当前的背景颜色。
WHEN $Event IS $MsgPaint THEN WinSetColor($Handle,$WinWhite,$WinBlack); WinClearRectangle($Handle,5,10,40,8); END:
关闭对话框或窗口。
FUNCTION WinCloseWindow(VAL whdl: WINDOW): INTEGER;
自变量名称 | 说明 |
whdl | 要关闭的对话框或窗口的句柄 |
此函数也作为一条消息来实施,该消息被传递到对话框或窗口($MsgClose)。
KNOWLEDGEBASE close;
ROUTINES PROCEDURE Main;
PRIVATE
ROUTINES
PROCEDURE Main IS VARIABLES Handle : WINDOW; ACTIONS WinCreate($Desktop, Handle, $NullHandler, 1, 1, 80, 25, 'Window will close shortly...', $WinDefaultStyle); SysDelay(1000); WinCloseWindow(Handle); END;
一个创建标准或类属的窗口。
FUNCTION WinCreate(VAL parent: WINDOW, REF whdl: WINDOW, VAL EventHandler: EVENT, VAL xLoc, yLoc, width, height: INTEGER, VAL title: STRING, style: INTEGER): INTEGER;
如果事件函数没有处理涂色消息就清除了窗口,则窗口将保留它创建时存在于其中的图像。
在执行 $MsgCreate之前,WinCreate 不返回结果。因此,在执行 $MsgCreate 之前,返回的窗口句柄之值尚未设置。但是,在处理 WinCreate 期间,$Handle 仍然可以使用。
自变量名称 | 说明 |
parent | 要创建的新窗口的父级。 |
whdl | 新创建的窗口的句柄以此参数返回。如果有错误,此变量被设置为 $Unknown。 |
EventHandler | 事件处理器,处理由窗口或对话框生成的事件。如果不需要处理事件,则可以使用 $NullHandler 关键字。 |
xLoc | 窗口左上角的 X 位置。X 坐标是以字符单元指定的。 |
yLoc | 窗口左上角的 Y 坐标。Y 坐标是以字符单元指定的。 |
width | 窗口的宽度 (X 方向),不包括边框。 |
height | 窗口的高度 (Y 方向),不包括边框、标题条、菜单条、工具条和状态条。 |
title | 在窗口标题条显示的标题。窗口必须有标题条,以显示标题。使用包含 $WinTitle 的风格。 |
style | 整数位掩码,代表一组风格标志,用于控制窗口的外观。 关于可用风格标志的列表,请参见窗口风格。 |
第一个接收到的消息
当创建窗口时,按如下所示的顺序接收到下列消息:
用风格定制窗口
WinCreate 可以用于创建标准的或类属的窗口。这些窗口可包含菜单栏、工具条、状态条和其它窗口组件。
用 WinCreate 创建的窗口的准确外观和工作方式主要由风格自变量决定。此整数自变量是由各种标志(在下一部分中列出)组合而成的位掩码。通常用 BITOR 运算符(例如,BITOR($WinBorder,$WinTitle)) 组合成这个自变量。其它方法应当小心使用;如果同一个标志被添加两次,可能会引起不希望的结果。
注意:详细信息,请参见窗口风格。
为窗口创建事件处理器
一般来说,您都要将 WinCreate 创建的窗口与一个事件处理器联系起来。事件处理器是一个例行程序,处理传递到窗口的某些消息。例如,如果窗口有一个图符栏,每次用户单击其中一个图符时,窗口的事件处理器都会收到 $MsgMenu 消息(事件)。第一个事件参数(整型数)包含 1 到图符个数之间的一个数,表示选择哪一个图符。然后事件处理器可以调用某个特定的例行程序。
可以用 WinCreate 创建的窗口来接收到的各种消息记录于 TSD 脚本消息中。
EVENT MainEvent IS ACTIONS WHEN $Event IS $MsgCreate THEN WinSetIconBar($Handle,{'FILE.ICO', 'REPORT.ICO','HELP.ICO'}: LIST OF STRING); ELSWHEN $MsgMenu THEN WHEN $EventParm(1,INTEGER) IS 1 THEN HandleFileIcon; ELSWHEN 2 THEN HandleReportIcon; ELSWHEN 3 THEN HandleHelpIcon; END; END; END;
PROCEDURE MainProgram IS VARIABLES mainWindow: WINDOW; ACTIONS WinCreate($Desktop,mainWindow,MainEvent,0,0,80,20, 'Main Window', BitOr($WinBorder,$WinTitle,$WinResize, $WinSysMenu, $WinIconBar, $WinAutoPos,$WinTaskList)); WinWait(mainWindow); END;
创建时钟或计时器窗口。
FUNCTION WinCreateClock(VAL whdlParent: WINDOW, REF whdl: WINDOW, VAL xLoc, yLoc, width, height, style, id: INTEGER): INTEGER;
自变量名称 | 说明 |
whdlParent | 要创建的新窗口的父级。 |
whdl | 新窗口的句柄以此参数返回。如果有错误,此变量被设置为 $Unknown。 |
xLoc | 窗口左上角的 X 坐标。X 坐标以字符单元量度。 |
yLoc | 窗口左上角的 Y 坐标。Y 坐标以字符单元量度。 |
width | 窗口的宽度 (X 方向),不包括边框。宽度以字符单元量度。 |
height | 窗口的高度 (Y 方向),不包括边框、标题条、菜单条、工具条和状态条。高度以字符单元量度。 |
style | 时钟窗口的风格。风格标志是用 BITOR 运算符组成的。 从下列选择其一,或不做选择:
从下列选择其一,或不做选择:
可选标志:$ClkHidden - 在屏幕上不显示时钟。 |
ID | 给父级窗口的通知消息中使用的身份标识编号。使用 $MsgStartTimer 消息,在类属窗口内您可以创建计时器。 |
WinCreateClock 可以用于创建实时(每秒)修正的时钟。缺省情况下,以系统时钟为基础,时钟开始显示日期的当前时间。然而,通过发送时间值的同时,给时钟发送 $MsgClockSet 消息,可以设置时钟,使其显示当前的时间。
例如,下一行可以用于建立一个占用时间的时钟:
SendMessage(clockWindow,$MsgClockSet,{0,0,0}: TIME);
时钟窗口也响应 $MsgShow 消息。这就允许您创建一个时钟窗口,隐藏它,更改其时间,然后显示它。请看下面的例子:
WHEN $Event IS $MsgCreate THEN WinCreateClock($Handle,clockWindow, 1,1,13,2, $Clk24Hour,0); SendMessage(clockWindow,$MsgShow,FALSE); ELSWHEN START_TIMER THEN SendMessage(clockWindow,$MsgClockSet, {0,0,0}: TIME): SendMessage(clockWindow,$MsgShow,TRUE); END;
在此例中,您位于另一个窗口的事件处理过程中。当创建窗口时,窗口也创建一个时钟,但隐藏它。当窗口接收到 START_TIMER 消息时,它将时钟时间设为 00:00:00,然后显示时钟。用户就看见了一个占用时间的时钟。
VARIABLES clock: WINDOW; ROUTINES EVENT WindowEvent IS ACTIONS WHEN $Event IS $MsgCreate THEN WinCreateClock($Handle,clock,1,1,13,2,$ClkBorderIn,1); END; END;
创建多文档界面(MDI)查看器窗口,该窗口具有基本的超文本能力。可用于“文件”、“编辑”和 Window 菜单的菜单条允许您:
用鼠标右键单击超级媒体查看器,可以访问弹出式菜单的选择项。这些菜单项允许您选择:
FUNCTION WinCreateHyperViewer(VAL whdlParent: WINDOW, REF whdl: WINDOW, VAL fileName: STRING, VAL EventFunc: EVENT, VAL xLoc, yLoc, width, height: INTEGER, VAL title: STRING, VAL style: INTEGER): INTEGER;
自变量名称 | 说明 |
whdlParent | 要创建的新窗口的父级。 |
whdl | 新创建的窗口的句柄以此参数返回。如果有错误,whdl 自变量将被设置为 $Unknown。 |
fileName | 要查看的文件名。如果文件不在当前目录下,搜索 SAIPATH。此文件可能是纯 ASCII 文件,或者它可能已经嵌套了超文本链接。 有关的详细信息,请参见“注释”部分。 |
EventFunc | 事件处理器,处理由窗口或对话框生成的事件。如果不需要处理事件,可以使用 $NullHandler 关键字。 |
xLoc | 窗口的左上角的 X 位置。X 坐标以字符单元量度。 |
yLoc | 窗口的左上角的 Y 位置。Y 坐标以字符单元量度。 |
width | 窗口的宽度(X 方向),不包括边框。宽度以字符单元量度。 |
height | 窗口的高度(Y 方向),不包括边框、标题条、菜单条、工具条和状态条。高度以字符单元量度。 |
title | 在窗口标题条显示的标题。窗口必须有标题条,以显示标题。 |
style | 整数位掩码,代表一列风格标志,用于控制窗口的外观。 有关的详细信息,请参见此语句的“注释”。 |
WinCreateHyperViewer 可以用于创建超文本查看器。除了以指定的位置、大小和风格创建窗口外,WinCreateHyperViewer 显示指定文件的内容。假设此文件是包含带有嵌套按钮的 ASCII 文本。以高亮词出现在用户面前的按钮,是与另一个对象,如文本文件、声音文件、图像文件或程序的链接。
用下列格式定义按钮:
[[<Button text> | <command>]]
其中 <Button text> 是要以高亮文本显示给用户的文本,而 <command> 表示由单击激发的操作。
词环绕
超文本控制希望将提供的文件格式化为 Tivoli 系统超级媒体文件。这意味着,它的词将环绕文本的全部行(忽略回车),直到它在一行内查找到两个回车。
关闭词环绕并格式化缺省值
要关闭词环绕并格式化超文本窗口的缺省值,您可以使用 aseview.exe 传递 /NOWORDWARP /NOFORMAT 标志作为命令行自变量。这是用程序关闭词环绕,格式化超文本窗口缺省值的唯一方法。
下表显示 WinCreateHyperViewer 语句的命令选项和说明:
命令选项 | 说明 |
ID | 如果命令是整数,它即为按钮的标识。当用户单击按钮时,将 $MsgButton 消息送到超文本查看器窗口的事件处理器。按钮文本位于事件参数 1 (字符串)之中,而按钮标识位于事件参数 2 (整型数)之中。 如果不提供命令(即如果按钮的形式为 [[Button-text]]),当选择按钮时,事件处理器依然接收 $MsgButton 消息。但是,按钮的标识(事件参数 2,整型数)是 0。在这种情况下,如果事件处理器返回 0,则查看器将修改按钮文本,使 formButtonTextand 执行搜索操作 (请参见以下内容)。 |
JUMP | JUMP <标记符名称> 搜索 Jump 后的文本相匹配的标记符的标记列表(有关的详细信息,请参见标记符标记)。如果查找到一个匹配,则含有标记的行位于查看器的上端,并生成一个 EventJump。超文本视图处理 EventJump,以保持文件中 "访问过的" 标记符的列表。 |
LABEL | LABEL <标签文本>可以是任意字符串。将 $MsgLabel 消息送到窗口的事件处理器,按钮文本位于事件参数 1 (字符串)之中,标签文本位于事件参数 2 (字符串)之中。 |
MARKER | MARKER <标记符名称> 在文本内放置一个不可见的标记符。 |
SEARCH | SEARCH <搜索文本>在<搜索文本>的上端开始搜索当前文件。文本不能越行,除非搜索文本已嵌套了新行。除 Windows 外,搜索将区分大小写。 如果查找到文本,查看器也定位,这样包含文本的行将出现在查看器窗口的第一行。 |
FILE | FILE <文件名> [NEW|REPLACE] [NOWORDWRAP|NOFORMAT] 打开新的文本文件。缺省情况下,新文件将替换查看器中的当前文件。如果关键字 REPLACE 跟在<文件名>之后,情况也是这样。 如果关键字 NEW 跟在<文件名>之后,将打开新的查看器窗口,以显示新文件。 查看器的大小由系统决定。 缺省情况下,使用词环绕,以便没有被至少一行空行隔开的所有各行,作为流动段来处理。 将非空行之后的第一行空行取消。NOWORDWRAP 关键字可以用于抑制此性能。 NOFORMAT 和缺省的词环绕一起使用,防止相邻的行合并,而依然环绕长行。 |
IMAGE | IMAGE <图像文件> .BMP [SCROLL | SCALE] 打开图像查看器,并显示指定的图像文件。缺省情况下,要剪辑图像以适应查看器的尺寸。SCALE 关键字使图像按照查看器的尺寸按比例剪辑。 SCROLL 关键字剪辑图像,但同时给查看器添加滚动栏,滚动栏可以用于滚动整个图像。 |
PLAY | PLAY <声音文件> .WAV 播放指定的音频文件。出现超文本查看器窗口,这样用户可以进行操作,以控制音频回放。 |
RUN | RUN <应用程序名> 执行指定的应用程序。< 应用程序名> 可以是一个字符串,不仅包含可执行程序名或命令行文件名,也包含命令行自变量 ([[Windows NT|RUN F:\DOC\DOCMAN.EXE WINDOWS_NT]])。 |
关于类属窗口可接收的各种消息的完整列表,请参见 TSD 脚本消息。
有关窗口风格标志的讨论,请参见 WinCreate 语句。
KNOWLEDGEBASE WinHyper;
ROUTINES PROCEDURE HyperTextExample;
PRIVATE
CONSTANTS MENU_LIST {'File' ,'Open','/L ','Exit',''}: LIST OF STRING;
ROUTINES EVENT HyperTextEvent IS VARIABLES fileName: STRING; ACTIONS WHEN $Event IS $MsgCreate THEN WinSetMenuBar($Handle,MENU_LIST); WinSetIconBar($Handle,{'hyp_text.ico', 'hypimage.ico', 'hypsound.ico','search.ico'}:
LIST OF STRING); ELSWHEN $MsgMenu THEN WHEN $MenuSelection IS 1, 101 THEN IF WinFileDialog($Desktop,fileName,'*.*', 10,10, 'Select file to view',0) < 0 THEN WinMessageBox($Handle,'Error', $MBOk+$MBIconError,fileName); ELSE SendMessage($Handle,$MsgOpenFile,fileName, fileName,0); END; ELSWHEN 2 THEN IF WinFileDialog($Desktop,fileName,'*.bmp', 10,10, 'Select bitmap to view',0) < 0 THEN WinMessageBox( $Handle, 'Error', $MBOk+ $MBIconError,fileName ); ELSE SendMessage($Handle,$MsgDisplayImage,fileName, fileName,0); END; ELSWHEN 3 THEN IF WinFileDialog($Desktop,fileName,'*.wav',10,10, 'Select sound to play',0) < 0 THEN WinMessageBox($Handle,'Error', $MBOk+$MBIconError,fileName); ELSE SendMessage($Handle,$MsgPlaySound,fileName, fileName,0); END; ELSWHEN 4 THEN IF WinEditField($Desktop,fileName,0,0,30, 'Search for?', BitOr($WinAutoPos, $WinBorder, $WinTitle)) < 1 THEN WinMessageBox($Handle,'Error', $MBOk+$MBIconError,fileName); ELSE SendMessage($Handle,$MsgSearch,fileName); END; ELSWHEN 103 THEN SendMessage($Handle,$MsgClose); END; ELSWHEN $MsgChar THEN WHEN $KeyCode IS $KeyAltT THEN SendMessage($Handle,$MsgMenu,1); ELSWHEN $KeyAltI THEN SendMessage($Handle,$MsgMenu,2); ELSWHEN $KeyAltA THEN SendMessage($Handle,$MsgMenu,3); ELSWHEN $KeyAltS THEN SendMessage($Handle,$MsgMenu,4); ELSE WinMessageBox($Handle,'Hypertext Key',$MBOK, $KeyCode); END; ELSWHEN $MsgButton THEN WinMessageBox($Handle,'Hypertext Button',$MBOK, 'Button text' & $EventParm(1,STRING) & 'Button ID ' & $EventParm(2,INTEGER)); ELSWHEN $MsgLabel THEN WinMessageBox($Handle,'Hypertext Button',$MBOK, 'Button text ' & $EventParm(1,STRING) & 'Button Label ' & $EventParm(2,STRING)); END; END (* Hypertext Event *); PROCEDURE HyperTextExample IS VARIABLES whdl: WINDOW; ACTIONS WinCreateHyperViewer($Desktop,whdl,'formman.hlp', HyperTextEvent,1,1,80,25, 'Hyertext Test', BitOr($WinBorder,$WinTitle, $WinResize,$WinMenu, $WinIconBar,$WinSysMenu, $WinMinMax, $WinAutoPos,$WinAutoSize)); WinWait(whdl); END (* Hypertext Example *);
关于格式化超级媒体文件的详细信息,请参见 Tivoli 服务台开发工具包工具和公用程序指南。
关于 SAIPATH 的其他信息,请参见使用 SAIPATH 进行文件搜索。
创建显示图像的窗口。
FUNCTION WinCreateImage(VAL whdlParent: WINDOW, REF whdl: WINDOW, VAL fileName: STRING, VAL xLoc, yLoc, width, height: INTEGER, VAL title: STRING, VAL style, id: INTEGER): INTEGER;
自变量名称 | 说明 |
whdlParent | 要创建的新窗口的父级。 |
whdl | 新创建的窗口的句柄以此参数返回。如果有错误,则变量被设置为 $Unknown。 |
fileName | 显示的图像的文件名。图像可以是 OS/2 位图文件、Windows 位图文件或 .PCX 图像文件。 |
xLoc | 窗口的左上角的 X 位置。X 坐标以字符单元量度。 |
yLoc | 窗口的左上角的 Y 位置。Y 坐标以字符单元量度。 |
width | 窗口的宽度(X 方向),不包括边框。宽度以字符单元量度。 |
height | 窗口的高度(Y 方向),不包括边框、标题条、菜单条、工具条和状态条。高度以字符单元量度。 |
title | 在窗口标题条显示的标题。窗口必须有标题条,用以显示标题。使用 $ImgTitle 风格。 |
style | 控制图像窗口表示方式的整型数位图。 有关风格标志选项的信息,请参见“注释”部分。 |
id | 当报告事件时,$MsgImage 消息为标识图像使用的标识(整型数)。 |
用 BITOR 运算符从下列风格中可以组合图像窗口的风格。
风格 | 说明 |
$ImgScroll | 图像以它在文件中的尺寸出现。窗口具有滚动栏。如果图像大于窗口,可以滚动图像。 |
$ImgClip | 图像以它在文件中的尺寸出现。如果需要,请剪辑图像的上端和右侧,以适应窗口。 |
$ImgScale | 图像的宽度和高度按比例缩放,以适应窗口尺寸的需要。缩放可能会使图像失真。 |
$ImgBorder | 图像窗口具有边框。 |
$ImgTitle | 图像窗口具有标题。也必须指定 $ImgBorder。 图像窗口可以响应 $MsgSetImage 消息。当此消息带有图像文件名时,将导致图像窗口装入,并显示指定的文件。 |
KNOWLEDGEBASE WinImage;
TYPES ImageRec IS RECORD fileName: STRING; whdlImage: WINDOW; END;
ROUTINES PROCEDURE ImageExample;
PRIVATE
ROUTINES EVENT ImageEvent(REF imageData: ImageRec) IS ACTIONS WHEN $Event IS $MsgCreate THEN WinSetMenuBar($Handle,{'File','Open','/L','Exit',''}: LIST OF STRING); WinCreateImage($Handle,imageData.whdlImage, 'os2logo.bmp',1,1,WinWidth($Handle), WinHeight($Handle),'',$ImgScroll,1); ELSWHEN $MsgMenu THEN WHEN $MenuSelection IS 101 THEN IF WinFileDialog($Handle,imageData.fileName,'*.bmp', 10,10,'Select new image', 0 ) >= 1 THEN SendMessage(imageData.whdlImage, $MsgSetImage,imageData.fileName); END; ELSWHEN 103 THEN SendMessage($Handle,$MsgClose); END; ELSWHEN $MsgSize THEN SendMessage(imageData.whdlImage,$MsgSetSize, $EventParm(1,INTEGER),$EventParm(2,INTEGER)); ELSWHEN $MsgImage THEN WinMessageBox($Handle,'Image',$MBOK,$EventParm(1, INTEGER)); END; END (* Image Event *);
PROCEDURE ImageExample IS VARIABLES whdl: WINDOW; data: ImageRec ACTIONS WinCreate($Desktop,whdl,ImageEvent{data},0,0,0,0, 'Image test', BitOr($WinBorder,$WinTitle,$WinResize, $WinMenu,$WinMinMax,$WinTaskList, $WinSysMenu,$WinAutoPos, $WinAutoSize)); WinWait(whdl); END (* Image Example *);
创建对鼠标单击敏感的矩形区域。
FUNCTION WinCreateMouseRect(VAL whdl: WINDOW, VAL xLoc, yLoc, xLen, yLen, id: INTEGER): INTEGER;
自变量名称 | 说明 |
whdl | 要在其中创建矩形区域的窗口的句柄。whdl 自变量可以引用一个标准窗口或一个滚动窗口。 |
xLoc | 鼠标区左上角的 X 坐标。 |
yLoc | 鼠标区左上角的 Y 坐标。 |
xLen | 鼠标区的宽度。 |
yLen | 鼠标区的高度。 |
id | 用于标识特定鼠标区的整型数。 |
缺省情况下,在窗口内,TSD 脚本不报告鼠标事件。然而,通过创建鼠标区可以导致报告诸如鼠标移动和鼠标单击这样的事件。鼠标区是窗口内的矩形区域。当创建鼠标区时,您给它分配一个整型数标识。随该区域内的所有鼠标事件一起,该标识也被报告给父级窗口。
当在鼠标区内发生活动时,随下列四个整型数事件参数一起,将 $MsgMouse 消息送到该区的父级窗口:
提示:每当窗口之一处理 $MsgMouse 事件时,都必须调用 WinSetMousePointer。
KNOWLEDGEBASE WinMouse;
ROUTINES PROCEDURE MouseExample;
PRIVATE CONSTANTS MENU_LIST IS {'File' , 'Exit','', 'Pointer type', 'MouseDefaultPtr', 'MouseuLArrowPtr', 'MouseURArrowPtr', 'MouseDRArrowPtr', 'MouseDLArrowPtr', 'MouseUPResizePtr', 'MouseURResizePtr', 'MouseRTResizePtr', 'MouseDRResizePtr', 'MouseDNResizePtr', 'MouseDLResizePtr', 'MouseLTResizePtr', 'MouseULResizePtr', 'MouseCrossPtr', 'MouseHandPtr', 'MouseHourGlassPtr', 'MouseIBeamPtr',''}: LIST OF STRING;
ROUTINES EVENT MouseEvent(REF pointerType: INTEGER) IS ROUTINES
PROCEDURE ProcessMenu(VAL whdl: WINDOW, VAL selection: INTEGER) IS ACTIONS WHEN selection IS 101 THEN SendMessage(whdl,$MsgClose); ELSWHEN 201 THEN pointerType := $MouseDefaultPtr; ELSWHEN 202 THEN pointerType := $MouseuLArrowPtr; ELSWHEN 203 THEN pointerType := $MouseURArrowPtr; ELSWHEN 204 THEN pointerType := $MouseDRArrowPtr; ELSWHEN 205 THEN pointerType := $MouseDLArrowPtr; ELSWHEN 206 THEN pointerType := $MouseUPResizePtr; ELSWHEN 207 THEN pointerType := $MouseURResizePtr; ELSWHEN 208 THEN pointerType := $MouseRTResizePtr; ELSWHEN 209 THEN pointerType := $MouseDRResizePtr; ELSWHEN 210 THEN pointerType := $MouseDNResizePtr; ELSWHEN 211 THEN pointerType := $MouseDLResizePtr; ELSWHEN 212 THEN pointerType := $MouseLTResizePtr; ELSWHEN 213 THEN pointerType := $MouseULResizePtr; ELSWHEN 214 THEN pointerType := $MouseCrossPtr; ELSWHEN 215 THEN pointerType := $MouseHandPtr; ELSWHEN 216 THEN pointerType := $MouseHourGlassPtr; ELSWHEN 217 THEN pointerType := $MouseIBeamPtr; END; END (* Process Menu *);
ACTIONS WHEN $Event IS $MsgCreate THEN WinSetMenuBar($Handle,MENU_LIST); ELSWHEN $MsgPaint THEN WinClear($Handle); WinCreateMouseRect($Handle,1,1, WinWidth($Handle), WinHeight($Handle),1); ELSWHEN $MsgMenu THEN ProcessMenu($Handle,$MenuSelection); ELSWHEN $MsgMouse THEN WinSetMousePointer($handle,pointerType); END; END (* Mouse Event *);
PROCEDURE MouseExample IS VARIABLES whdlMain: WINDOW; ACTIONS WinCreate($Desktop,whdlMain,MouseEvent{ $MouseDefaultPtr}, 0,0,60,20, 'Mouse example', BitOr($WinBorder,$WinTitle, $WinResize,$WinMenu, $WinVScroll,$WinMinMax, $WinTaskList, $WinSysMenu,$WinAutoPos)); WinWait(whdlMain); END (* Mouse Example *);
创建需要时自动重新喷涂其自身的无模型的滚动窗口。
WinCreateScrollWindow(VAL whdlParent: WINDOW, REF whdl: WINDOW,| VAL EventHandler: EVENT, VAL xLoc, yLoc, width, height: INTEGER, VAL title, font: STRING, VAL pointSize, style: INTEGER): INTEGER;
自变量名称 | 说明 |
whdlParent | 滚动窗口的父级窗口。 |
whdl | 新创建的窗口的句柄以此参数返回。如果有错误,变量将被设置为 $Unknown。 |
EventHandler | 事件处理器,处理由窗口或对话框生成的事件。如果不需要处理事件,可以使用 $NullHandler 关键字。 |
xLoc | 窗口左上角的 X 位置。以字符单元量度 X 和 Y 坐标。 |
yLoc | 窗口左上角的 Y 坐标。 |
width | 窗口的宽度(X 方向),不包括边框。宽度以字符单元量度。 |
height | 窗口的高度(Y 方向),不包括边框、标题条、菜单条、工具条和状态条。高度以字符单元量度。 |
title | 在窗口标题条显示的标题。窗口必须有标题条,以便显示标题。使用 $WinTitle 风格。 |
font | 可用的系统字体的名称。 |
pointSize | 在滚动窗口内要使用的字体的点大小。 |
style | 整数位掩码,代表一列风格标志,用于控制窗口的外观。 有关的详细信息,请参见 WinCreate 的“注释”部分。 |
第一个接收到的消息
当创建滚动窗口时,按如下所示的顺序接收下列消息:
跟踪并重新涂滚动窗口
WinCreateScrollWindow 可以用于创建虚拟的滚动窗口。在类属窗口内,编程器负责了解窗口的内容,并一收到 $MsgPaint 消息,就重新显示窗口。滚动窗口"了解"它们的内容。编程器通过 WinWrite、WinWriteLN 等将信息写入其中。
注:关于滚动窗口可以生成并接收的消息的列表,请参见 TSD 脚本消息。
定制滚动窗口
滚动窗口可以包含工具条、菜单条、状态条和任何其它可用于类属窗口的组件。
KNOWLEDGEBASE Scroll;
CONSTANTS MENU_OPEN IS 101; MENU_EXIT IS 102; MENU_LIST IS {'~File','~Open','E~xit',''}: LIST OF STRING;
TYPES EditorData IS RECORD statusLine: STRING; lines: LIST OF STRING; END;
ROUTINES PROCEDURE FileView;
PRIVATE
ROUTINES
EVENT EditorEvent(REF editorData: EditorData) IS ROUTINES PROCEDURE ProcessMainMenu(VALUE selection: INTEGER) IS VARIABLES fileName: STRING; editFile: FILE; result: INTEGER; ACTIONS WHEN selection IS MENU_OPEN THEN WinFileDialog($Handle,fileName,'*.KB',5,5, 'Select file to edit',0); IF FOpen(editFile,fileName,$Read) > 0 THEN FReadText(editFile,editorData.lines); FClose(editFile); editorData.statusLine := ' File: ' & fileName; WinClear($Handle); WinWriteLN($Handle,editorData.lines); PostMessage($Handle,$MsgPaintStatus); ELSWHEN MENU_EXIT THEN SendMessage($Handle,$MsgClose); END; END; END (* Process Main Menu *);
ACTIONS WHEN $Event IS $MsgCreate THEN WinSetMenuBar($Handle, menuList); editorData.statusLine := 'File:'; ELSWHEN $MsgMenu THEN ProcessMainMenu($MenuSelection); ELSWHEN $MsgPaintStatus THEN (* Status Bar *) WinClear($Handle); WinWrite($Handle,editorData.statusLine); END; END (* Editor Event *);
PROCEDURE FileView IS VARIABLES whdl: WINDOW; ACTIONS WinCreateScrollWindow($Desktop,whdl,EditorEvent, 0,0,0,0, 'KML File viewer', $SystemMonospaced,10, BitOr($WinBorder,$WinTitle, $WinResize, $WinSysMenu, $WinMenu,$WinStatus, $WinAutoPos,$WinAutoSize, $WinVScroll,$WinHScroll, $WinTaskList)); WinWait(whdl); END (* File View *);
其他信息,请参见窗口风格。
显示一行编辑器,用于编辑值的数据类型。
FUNCTION WinEditField(VAL parent: WINDOW, REF value: ANY, VAL xLoc, yLoc, length: INTEGER, title: STRING, VAL style: INTEGER): INTEGER;
自变量名称 | 说明 |
parent | 要创建的新窗口的父级。在 Windows 中,如果调用
WinEditField 时禁用父级窗口,则 WinEditField 窗口不剪辑父级窗口。 在 Windows 中,如果 $Desktop 与 $WinModal 联合被指定作为父级,则用 WinEditField 创建的窗口是无模型的。 下一部分说明风格标志,如 $WinModal。 |
xLoc | 窗口左上角的 X 位置。 |
yLoc | 窗口左上角的 Y 位置。 |
length | 窗口的宽度(X 方向),不包括边框。 |
title | 在窗口标题条上显示的标题。窗口必须有标题条,以显示标题。使用 $WinTitle 风格。在 Windows 中,如果您不指定此自变量,则自动添加 $WinTitle 常数。 |
style | 包含控制窗口的外观的一列风格标志的整型数。有关详情,请参见可用的风格标志部分。 |
在表中列出了有关 WinEditField 的可用的风格标志。
风格标志 | 说明 |
$WinAutoPos | 系统决定窗口的最佳位置。忽略 xLoc 和 yLoc 参数。 |
$WinAutoSize | 系统决定窗口的最佳大小。忽略 xLen 和 yLen 参数。 |
$WinBorder | 窗口具有类似于对话框的边框。有些风格需要一个边框。在 Windows 中,如果您不指定 $WinBorder 常数,则会自动添加它。 |
$WinDefaultStyle | 系统定义的、由 $WinBorder、$WinResize、$WinTitle 和 $WinSysMenu 组合的缺省风格。 |
$WinField | 窗口具有单像素边框(象对话框中的控制)。此风格与 $WinBorder 互斥。 |
$WinInvisible | 创建隐藏的窗口。必须向它发送 $MsgShow,它才能变为可见窗口。 |
$WinModal | 当创建编辑字段时,它是一个模型窗口。编辑字段窗口和所有其它子窗口的父级窗口被禁用。 |
$WinNone | 窗口是空的,没有边框、标题条或其它组件。 |
$WinTaskList | 将窗口标题输入到系统的任务列表。用户可以从任务列表中激活窗口。此种风格一般用于应用程序的主窗口。 |
$WinTitle | 窗口具有标题条。如果不存在此种风格,则不显示标题,即使指定标题作为其中的一个参数。标题条可以使窗口移动。 |
VARIABLES intVal: INTEGER; ACTIONS WinEditField($Desktop,intVal,0,0,30,'Integer', $WinAutoPos+$WinBorder+ $WinTitle);
DlgBox
启用或禁用对话框(或窗口)。
FUNCTION WinEnableWindow(VAL whdl: WINDOW, VAL state: BOOLEAN): INTEGER;
自变量名称 | 说明 |
whdl | 要更改其启用状态的对话框或窗口的句柄。 |
state | 如果要"启用"窗口,则状态设为 TRUE;如果要"禁用"窗口,则状态设为 FALSE。 |
此函数也可以作为一条消息来实现,可以将其传递到对话框或窗口($MsgEnable)。
KNOWLEDGEBASE enable;
ROUTINES PROCEDURE Main;
PRIVATE
ROUTINES
PROCEDURE Main IS VARIABLES Handle : WINDOW; ACTIONS WinCreate($Desktop, Handle, $NullHandler, 1, 1, 80, 25, 'Test Window', $WinDefaultStyle); WinEnableWindow(Handle, FALSE); SysDelay(1000); WinEnableWindow(HANDLE, TRUE); WinWait(Handle); END;
显示文件选择项对话框。
FUNCTION WinFileDialog(VAL whdlParent: WINDOW, REF fileName: STRING, VAL startMask: STRING, VAL xLoc, yLoc: INTEGER, VAL title: STRING, VAL style: INTEGER ): INTEGER;
自变量名称 | 说明 |
whdlParent | 要创建的新窗口的父级。 |
fileName | 返回用户选择的文件名。如果用户取消对话框,则不会改变此值。 |
startMask | 可以使用原始文件的选择掩码,* 和 ? 通配符。 |
xLoc | 窗口左下角的 X 位置。 |
yLoc | 窗口左下角的 Y 位置。 |
title | 在窗口标题条显示的标题。窗口必须有标题条,以显示标题。使用 $WinTitle 风格。 |
style | 文件对话框的风格。可能值为:
|
当要提示用户输入文件名时,无论是打开新文件,或允许用户保存文件为新文件,可以使用 WinFileDialog。通过设置 startMask 自变量,可以使用 WinFileDialog 选择指定的文件类型(例如,对于知识库,请使用 *.kb)。
提示:xLoc 和 xLoc 参数在 Windows 中没有作用。
VARIABLES fileName: STRING; ACTIONS IF WinFileDialog($Desktop,fileName,'*.TXT', 10,10, 'Select file to edit',0) > 0 THEN LoadAndEdit(fileName); END;
查询任何有效窗口句柄(窗口或对话框)的 X 坐标位置。位置 00 指的是左上角。
FUNCTION WinGetXPos (VAL whdl: Window): Integer;
自变量名称 | 说明 |
whdl | 查询 X 位置的窗口句柄 |
WinGetXPos 不同于 WinX,因为 WinX 返回窗口内的字符位置,而 WinGetXPos 则查询窗口或对话框的左上角。X 坐标位置成功返回。
KNOWLEDGEBASE GetPos;
ROUTINES PROCEDURE Main;
PRIVATE
ROUTINES
PROCEDURE Main IS VARIABLES Handle : WINDOW; x,y : INTEGER; ACTIONS WinCreateScrollWindow($Desktop, Handle, $Nullhandler, 10,10,75,25, 'Test', $SystemMonospaced,10, $WinDefaultStyle); x := WinGetXPos(Handle); y := WinGetYPos(Handle); WinWriteLN(Handle, 'The upper left corner of the window is at (' & x & ', ' & y & ')'); WinWait(Handle); END;
WinGetYPos
查询任何有效窗口句柄(窗口或对话框)的 Y 坐标位置。位置 00 是窗口或对话框的左上角。
FUNCTION WinGetYPos (VAL whdl: Window): Integer;
自变量名称 | 说明 |
whdl | 查询 Y 位置的窗口句柄 |
WinGetYPos 不同于 WinY,因为当 WinY 返回窗口内的字符位置时,而 WinGetYPos 查询窗口或对话框的左上角。
请参见 WinGetXPos 语句的实例。
WinGetXPos
将位置指针移到新位置。
FUNCTION WinGoToXY(VAL whdl: WINDOW, VAL xLoc, yLoc:
INTEGER): INTEGER;
自变量名称 | 说明 |
whdl | 窗口的句柄,要执行该窗口上的操作。 |
xLoc | 当前位置指针的新 X 位置。 |
yLoc | 当前位置指针的新 Y 位置。 |
WHEN $Event IS $MsgChar THEN WHEN $EventParm(1,INTEGER) IS $KeyUpArrow THEN WinGoToXY(Handle,$WinX($Handle),$WinY($Handle)-1); ELSWHEN $KeyRightArrow THEN WinGoToXY(Handle,$WinX($Handle)+1,$WinY($Handle)); END; END;
查询窗口的高度并返回高度,以字符单元表示。
FUNCTION WinHeight(VAL whdl: WINDOW): INTEGER;
自变量名称 | 说明 |
whdl | 窗口的句柄,要执行该窗口上的操作。 |
WinHeight 返回给定窗口内当前客户机区域的高度。
WinCreateMouseZone($Handle,1,1, WinWidth($Handle),WinHeight($Handle),1);
从资源文件装入菜单,并将其附加给指定的窗口。(替换任何以前附加的菜单)。
FUNCTION WinLoadMenuBar(VAL win: WINDOW, VAL resource : STRING ) : INTEGER;
自变量名称 | 说明 |
win | 表格、类属、滚动或超文本 |
resource | 标准格式的资源字符串 |
给表格附加菜单的捷径,是在同一 .df 文件中,提供给菜单的名称与表格的名称相同。如果表格具有菜单的风格,则自动装入菜单。
KNOWLEDGEBASE loadmenu;
ROUTINES
PROCEDURE Main;
(* ***** PRIVATE ***** *)
PRIVATE
VARIABLES (* Global Variable to hold the Window handle of the window *) mainWindow : WINDOW;
ROUTINES
PROCEDURE Main IS
VARIABLES
ACTIONS WinCreate($Desktop, mainWindow, $NullHandler, 10, 10, 80, 25, 'Test Window', $WinDefaultStyle); (*load the menu with id MAIN_MENU from the file loadmenu.df *) WinLoadMenuBar(mainWindow, 'loadmenu[MAIN_MENU]'); WinWait(mainWindow);
END;
从 .df 文件中装入菜单资源,并将其联合起来作为窗口的弹出式菜单,替换任何现有的弹出式菜单。弹出式菜单自动出现,并利用平台上的正确鼠标操作。由 $MsgMenu 从弹出式菜单中报告选择项。
FUNCTION WinLoadPopupMenu( VAL whdl: WINDOW, VAL menu: STRING, ) : INTEGER;
自变量名称 | 说明 |
whdl | 要更改其标题文本的对话框表格或窗口的句柄 |
menu | 标准文件的完全匹配的名称,该文件说明菜单到创建菜单 |
当使用 WinLoadPopupMenu 时,通过平台上的正确鼠标操作,菜单自动出现。当用户选择菜单项时,将 $MsgMenu 送到窗口。这与以前的函数 WinPopup 不同。在 WinPopup 中,用户一定要捕捉到正确的鼠标操作,并调用 WinPopup 才显示弹出式菜单。 WinPopup 将返回已选菜单项的标识。
KNOWLEDGEBASE loadpop;
ROUTINES
PROCEDURE Main;
(* ***** PRIVATE ***** *)
PRIVATE
VARIABLES (* Global Variable to hold the Window handle of the window *) mainWindow : WINDOW;
ROUTINES
PROCEDURE Main IS
VARIABLES
ACTIONS WinCreate($Desktop, mainWindow, $NullHandler, 10, 10, 80, 25, 'Test Window', $WinDefaultStyle); (* load the menu with id MAIN_MENU from the file loadmenu.df *) WinLoadPopupMenu(mainWindow, 'loadmenu[MAIN_MENU]'); WinWait(mainWindow);
END;
WinSetPopupMenu
从资源文件中装入工具条,并将其附加给指定的窗口。(替换任何以前附加的工具条)。
FUNCTION WinLoadToolBar(VAL win: WINDOW, VAL resource : STRING ): INTEGER;
自变量名称 | 说明 |
win | 表格、类属、滚动或超文本 |
resource | 标准格式的资源字符串 |
给表格附加工具条的捷径,是在同一 .df 文件中,指定工具条的名称与表格的名称相同。如果表格具有工具条的风格,则自动装入工具条。
KNOWLEDGEBASE loadtool;
ROUTINES
PROCEDURE Main;
(* ***** PRIVATE ***** *)
PRIVATE
VARIABLES (* Global Variable to hold the Window handle of the window *) mainWindow : WINDOW;
ROUTINES
PROCEDURE Main IS
VARIABLES
ACTIONS WinCreate($Desktop, mainWindow, $NullHandler, 10, 10, 80, 25, 'Test Window', $WinDefaultStyle); (* load the toolbar with id MAIN_TOOLBAR from the file loadtool.df *) WinLoadToolBar(mainWindow, 'loadtool[MAIN_TOOLBAR]'); WinWait(mainWindow);
END;
设置菜单项的效验状态。
FUNCTION WinMenuCheckItem(VAL whdl: WINDOW, VAL id: STRING, VAL newState: BOOLEAN): INTEGER;
FUNCTION WinMenuCheckItem(VAL whdl: WINDOW, VAL id: INTEGER, VAL newState: BOOLEAN): INTEGER;
自变量名称 | 说明 |
whdl | 具有菜单条的窗口的句柄 |
id | 要设置的菜单项的标识 |
newState | 菜单项的新状态 |
WinMenuCheckItem 允许效验或不效验菜单项。当您调用 WinMenuItemIsChecked 时,可以测验给定选项的当前的效验状态。
注:用字符串或整型数可以标识菜单项。
WinMenuCheckItem($Handle,204,TRUE);
设置菜单项的启用或禁用状态。
FUNCTION WinMenuEnableItem(VAL whdl: WINDOW, VAL id: STRING, VAL newState: BOOLEAN): INTEGER;
FUNCTION WinMenuEnableItem(VAL whdl: WINDOW, VAL id: INTEGER, VAL newState: BOOLEAN): INTEGER;
自变量名称 | 说明 |
whdl | 具有菜单条的窗口的句柄 |
id | 要设置的菜单项的标识 |
newState | 菜单项的新状态 |
WinMenuEnableItem 可以用于启用或禁用菜单项。禁用项是不可用的。用下列方法,可以使用 $SysMenuCloseItem 常数启用或禁用窗口的系统菜单上的“关闭”项:
(* This line enables the Close item *) WinMenuEnableItem (myWindow, $SysMenuCloseItem, TRUE); (* This line disables the Close item *) WinMenuEnableItem (myWindow, $SysMenuCloseItem, FALSE);
注:用字符串或整型数可以标识菜单项。
WinMenuEnableItem($Handle,204,TRUE);
进行测验,以查看菜单项是否是当前效验的。
FUNCTION WinMenuItemIsChecked(VAL whdl: WINDOW, VAL id: STRING): BOOLEAN;
FUNCTION WinMenuItemIsChecked(VAL whdl: WINDOW, VAL id: INTEGER): BOOLEAN;
自变量名称 | 说明 |
whdl | 具有菜单条的窗口的句柄 |
id | 要设置的菜单项的标识 |
TSD 脚本允许您建立选择项的菜单条。您可以效验给定的菜单项,以查看它是否是通过调用 WinMenuItemIsChecked 并传递以下两项来选择的:
注:用字符串或整型数可以标识菜单项。
IF WinMenuItemIsChecked($Handle,204) THEN CarryOutAction; END;
显示消息框,并返回用户选择项。(消息文本限制在 512 字符内。)
FUNCTION WinMessageBox(VAL whdlParent: WINDOW, VAL title: STRING, VAL style: INTEGER, VAL message: STRING): INTEGER;
事件处理器和 DDE
当处理 $MsgDDEInitiate 消息,请不要使用 WinWait。$MsgDDEInitiate 向应用程序广播消息,并在返回响应之前锁定消息队列。同时 WinWait 语句激活也从消息队列中等待应答的事件处理器。WinWait 防止其它应用程序向队列发送消息。这会造成死锁,并有效地锁定用户界面。
自变量名称 | 说明 |
whdlParent | 消息框的父级。如果它是 $Desktop,消息框不能是模型。 |
title | 在窗口标题条显示的标题。窗口必须有标题条,以便显示标题。使用 $WinTitle 风格。 |
style | 消息框的风格。这是控制消息框的外观和表现方式的位掩码。 有关风格选项的说明,请参见“注释”部分。 |
messageText | 显示的消息文本。支持词环绕和新行。(限制在 512 个字符内。 |
消息框的说明
消息框是用 WinMessageBox创建的简单对话框。不需要创建 .df 文件或使用“界面设计器”。
当使用 WinMessageBox 时,您只可以添加标题、文本字符串 (消息 ),最多可达三个按钮。您不能添加其它的文本框或控制。
定制消息框
消息框的风格是下列设置的组合:
风格名称 | 说明 |
按钮风格 | 指示出现在消息框内的按钮选项。 |
图符风格 | 指示显示在消息框内的图符类型。 |
缺省按钮 | 指示哪一个按钮为缺省的按钮。 |
模型 | 指示消息框的模型。这将确定在响应消息框之前,用户是否可以做其它的事情。 |
标题 | 在 OS/2 中,如果给窗口添加标题条,您必须指定 $WinTitle 常数。在 Windows 中所有窗口自动拥有标题条。 |
要创建消息框的风格,请选择下列按钮风格之一:
选择零个或多个下列图符风格:
选择零个或一个下列缺省按钮:
选择零个或一个下列模型:
如果消息框有“取消”按钮,则 Esc 键关闭消息框,并且 WinMessageBox 返回 $MBResultCancel。如果没有“取消”键,则 Esc 键不起作用。只在内部错误条件下,才返回$MBResultError。
根据消息文本和标题长度,消息框自动决定其大小。消息框最高可达屏幕高度的三分之二。
WinMessageBox ($Desktop,'Error',$MBOK+$MBIconError, 'Unable to open file');
关于风格标志的列表,请参见消息框风格。
窗口的父级,该窗口被传递为其自变量。
FUNCTION WinParent(VAL whdl: WINDOW): WINDOW;
自变量名称 | 说明 |
whdl | 窗口的句柄,该窗口的父级被请求的。 |
VARIABLES parent: WINDOW; ACTIONS parent := WinParent($Handle);
返回窗口的父级,该窗口被传递为其自变量。
设置窗口的当前的画图颜色。画图颜色确定文本颜色和背景颜色。
FUNCTION WinSetColor(VAL whdl: WINDOW, VAL foreGround: INTEGER; VAL backGround: INTEGER): INTEGER;
自变量名称 | 说明 |
whdl | 窗口的句柄,要执行该窗口上的操作。 |
foreGround | 新的前景画图颜色。有关颜色常数的完整列表,请参见“注释”部分。 |
backGround | 新的背景画图颜色。有关颜色常数的完整列表,请参见“注释”部分。 |
预定义的颜色常数
下列为可用的预定义的颜色常数:
注:$WinDefaultColor 为窗口选择系统缺省的前景或背景。
在用 $WinOpaque 作为背景颜色调用 WinSetColor 之前,$WinTransparent 将所有文本输出操作写入透明文本。透明文本为缺省值。
$WinOpaque 将所有文本输出操作写入不透明文本。即以当前的背景颜色清理矩形区内的文本。在以 $WinTransparent 为背景色调用 WinSetColor 之前,$WinOpaque 保留有效。
访问操作系统定义的颜色
使用下列预定义的常数,访问由操作系统定义的用户可配置的颜色:
WHEN $Event IS $MsgPaint THEN WinSetColor($Handle,$WinWhite,$WinBlack); WinClear($Handle); END;
Tivoli 服务台 6.0 开发工具包脚本语言参考