Tivoli 服务台 6.0 开发工具包脚本语言参考
设置标准窗口内连续写操作的字体。
FUNCTION WinSetFont(VAL whdl: WINDOW, VAL fontName: STRING, VAL pointSize: INTEGER, VAL faceStyle: INTEGER): INTEGER;
自变量名称 | 说明 |
whdl | 要设置其字体的窗口的句柄。这必须是由 WinCreate 创建的标准窗口。 |
fontName | 要设置的、操作系统所看到字体的字体名称。有关缺省系统字体的列表,请参见此语句的“注释”。 |
pointSize | 字体的大小,以点数计。 可用于标准字体的光栅字体点数的大小为:8、10、12、14、18 和 24。 并不是所有字体都适用于这些字体点的大小。 轮廓字体可以是任意点大小。轮廓字体适用于全部缺省字体,除系统比例字体和系统单空格。这些字体只可用于点数的大小为 10。 所有缺省字体,除系统比例字体和系统单空格。这些字体只可用于点数的大小为 10。 |
faceStyle | 标志集合,组合它们以形成混合的字体风格。 合法值为 $FontPlain (缺省)、$FontBold、$FontUnderScore 和 $FontStrikeOut。 并不是全部字体都支持所有字体风格。将这些风格添加到现有字体。某些字体用一种字体风格,如黑体或斜体创建。在这些情况下,风格总存在。 |
下列预定义的常数提供对缺省系统字体的访问:
KNOWLEDGEBASE WinFont; ROUTINES PROCEDURE FontExample;
PRIVATE CONSTANTS MENU_LIST IS {'File' ,'Exit', '', 'Font','Courier','Helvetica','System Proportional', 'System Monospaced','Times Roman','Symbol Set','' }: LIST OF STRING;
ROUTINES
EVENT MainEvent(REF fontName: STRING) IS ROUTINES PROCEDURE PaintFont(VAL whdl: WINDOW, VAL fontName: STRING) IS
ACTIONS WinSetFont(whdl,'System Proportional',10, $FontPlain); WinClear(whdl); WinSetFont(whdl,fontName,8,$FontPlain); WinWriteAt(whdl,1,1,fontName & ' 8 '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName,10,$FontPlain); WinWrite(whdl,fontName & ' 10 '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName,12,$FontPlain); WinWrite(whdl,fontName & ' 12 '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName,14,$FontPlain); WinWrite(whdl,fontName & ' 14 '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName,18,$FontPlain); WinWrite(whdl,fontName & ' 18 '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName,24,$FontPlain); WinWrite(whdl,fontName & ' 24 '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName,24,$FontBold); WinWrite(whdl,fontName & ' 24 Bold '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName,24,$FontItalic); WinWrite(whdl,fontName & ' 24 Italic '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName,24,$FontUnderscore); WinWrite(whdl,fontName & ' 24 Underscore '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName, 24, $FontStrikeOut); WinWrite(whdl,fontName & ' 24 StrikeOut '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName, 48, $FontPlain); WinWrite(whdl,fontName & ' 48 '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,'System Proportional',10, $FontPlain); END (* Paint Font *);
PROCEDURE ProcessMenu(VAL whdl: WINDOW, VAL selection: INTEGER) IS ACTIONS WHEN selection IS 101 THEN SendMessage(whdl,$MsgClose); ELSWHEN 201 THEN fontName := $Courier; PaintFont($Handle,fontName); ELSWHEN 202 THEN fontName := $Helvetica; PaintFont($Handle,fontName); ELSWHEN 203 THEN fontName := $SystemProportional; PaintFont($Handle,fontName); ELSWHEN 204 THEN fontName := $SystemMonospaced; PaintFont($Handle,fontName); ELSWHEN 205 THEN fontName := $TimesRoman; PaintFont($Handle,fontName); ELSWHEN 206 THEN fontName := $SymbolSet; PaintFont($Handle,fontName); END; END (* Process Menu *);
ACTIONS WHEN $Event IS $MsgCreate THEN WinSetMenuBar($Handle,MENU_LIST); ELSWHEN $MsgPaint THEN PaintFont($Handle,fontName); ELSWHEN $MsgMenu THEN ProcessMenu($Handle,$MenuSelection); END; END (* Main Event *);
PROCEDURE FontExample IS VARIABLES whdlMain: WINDOW; ACTIONS WinCreate($Desktop,whdlMain,MainEvent{$TimesRoman}, 0,0,60,20,'Font example', BitOr($WinBorder,$WinTitle, $WinResize,$WinMenu, $WinVScroll,$WinMinMax, $WinTaskList, $WinSysMenu,$WinAutoPos)); WinWait(whdlMain); END (* Font Example *);
设置并显示工具条上的图符。
FUNCTION WinSetIconBar(VAL buttonList : LIST of $ToolbarNodeRecord): INTEGER;
自变量名称 | 说明 |
whdl | 具有 $WinIconBar 风格的窗口的句柄。它可以是标准窗口或滚动窗口。 |
iconList | 这可以是字符串列表或 $ToolbarItem 记录列表。对于字符串列表,每个字符串是在图符栏上显示的图像文件名。通过使用替换的形式($ToolbarNodeRecord)有可能指定其它属性,如与给定工具条按钮相关的菜单标识,以及工具条按钮的 "工具提示"。 |
工具条是类似于菜单条的控制。工具条出现在窗口的标题条和菜单条的下面。它组成一行图符,通过单击鼠标的按钮可以选择这些图符。
没有工具条或工具条上图符的键盘界面。选择一个图符发送一条菜单消息 ($MsgMenu) 给窗口事件处理器。第一个事件参数(整数)是该图符的标识。
注:从 1 到 99 给图符做标记,最左边的图符的标识 为 1。
图符必须是标准图符格式。文件必须在当前目录之下。否则,必须指定每个文件的全“路径”。任何没有查找到的、或文件格式不正确的文件被略过去。实际上,ID 是按图符列表中的位置,而不是按显示位置分配的。传递未知列表会导致清除或隐藏工具条。
注:给没有工具条的窗口添加工具条,会按用户区域的新尺寸给窗口发送 $MsgSize。
以下列方法使用字符串表格列表:
WHEN $Event IS &MsgCreate THEN WinSetIconBar($Handle, {SEARCH,CO','PRINT.ICO'}: LIST OF STRING); END;
按下列方法使用 $ToolbarItem 表格的列表:
WHEN $Event IS $MsgCreate THEN theList[1].ImageFile:='SEARCH.BMP'; theList[1].ItemID:=204; theList[1].ToolTip:='Search for Text';
theList[2].ImageFile:='PRINT.BMP'; theList[2].ItemID:=106; theList[2].ToolTipText:='Print File';
theList[3].ImageFile:='SAVE.BMP'; theList[3].ItemID:=103; theList[3].ToolTipText:='Save File';
WinSetIconBar($Handle,theList);
END;
设置窗口菜单条的选择项。
FUNCTION WinSetMenuBar(VAL whdl: WINDOW, VAL menuList: LIST OF STRING): INTEGER;
自变量名称 | 说明 |
whdl | 窗口句柄,在该窗口上执行操作。 |
menuList | 字符串列表,指定在窗口菜单条上显示的一个菜单。 有关列表格式的信息,请参见此语句的“注释”。 |
WinSetMenuBar 可以用于在窗口上设置菜单条,该窗口是以 $WinMenu 风格创建的。
传递给 WinSetMenuBar 的字符串列表,指定整个菜单的结构。包括指定水平方向的主菜单条目,垂直方向的辅助条目。在列表中从上到下、从左到右给菜单条目编码。空字符串作为分隔符。例如,最左边的菜单条目是“文件”,“文件”条目包括“新建”、“保存”、“保存为”和“退出”,菜单列表的形式如下:
{'File','New','Save','Save ~As','Exit',''}: LIST OF STRING;
第二列条目出现于旁边。
可以使用代字号 (~) 使字母成为菜单条目的选择器。可以将下表中的开关放在菜单列表条目的开始,以获得每个开关显示的结果。
开关 | 结果 |
/C | 最初效验的菜单条目。 |
/D | 最初禁用的菜单条目。 |
/S | 静止菜单条目,不能进行选择。 |
/L | 不显示菜单条目。在其位置出现一行分隔符。 |
/H | 当条目被选中时,菜单搁置为打开。 |
// | 显示一条斜线 (/)。不再处理开关。 |
给没有工具条的窗口添加工具条,会按用户区域的新尺寸给窗口发送 $MsgSize。
KNOWLEDGEBASE WinMenu; TYPES MainWinRec IS RECORD width: INTEGER; height: INTEGER; fontName: STRING; mousePointer: STRING; statusBar: STRING; END;
CONSTANTS MENU_LIST IS {'File' , 'E~xit', '', (* 101 *) 'Menu', '~Enable', (* 201 *) '~Disable', (* 202 *) '/L ', (* Put separator line in menu *) '/C/D~Check', (* 204 start check and disabled *) '', (* Mark end of menu sub menu *) 'Help', 'About', (* 301 *) '' (* Mark end of help submenu *) }: LIST OF STRING;
ROUTINES PROCEDURE MenuExample;
PRIVATE ROUTINES
EVENT MainEvent(REF mainWinData: MainWinRec) IS ACTIONS WHEN $Event IS $MsgCreate THEN 0 WinSetMenuBar($Handle,MENU_LIST); ELSWHEN $MsgPaint THEN WinClear($Handle); ELSWHEN $MsgMenu THEN WHEN $MenuSelection IS 101 THEN SendMessage($Handle,$MsgClose); ELSWHEN 201 THEN WinMenuEnableItem($Handle,204,TRUE); ELSWHEN 202 THEN WinMenuEnableItem($Handle,204,FALSE); ELSWHEN 204 THEN IF WinMenuItemIsChecked($Handle,204) THEN WinMenuCheckItem($Handle,204,FALSE); ELSE WinMenuCheckItem($Handle,204,TRUE); END; ELSWHEN 301 THEN WinMessageBox($Handle,'About',$MBOK,'Menu example'); END; END; END (* Main Event *);
PROCEDURE MenuExample IS VARIABLES whdlMain: WINDOW; ACTIONS WinCreate($Desktop,whdlMain,MainEvent,0,0,60,20, 'Menu example', BitOr($WinBorder,$WinTitle, $WinMenu,$WinMinMax, $WinTaskList,$WinAutoPos, $WinSysMenu)); WinWait(whdlMain); END (* Menu Example *);
设置窗口的弹出式菜单,替换任何现有的弹出式菜单。在平台上正确操作鼠标时,弹出式菜单会自动出现。通过 $MsgMenu 报告弹出式菜单的选择项。
FUNCTION WinSetPopupMenu ( VAL whdl: WINDOW, VAL menuList: LIST OF STRING, ): INTEGER;
自变量名称 | 说明 |
whdl | 更改标题文本的对话框表格或窗口的句柄。 |
menuList | 窗口弹出式菜单条目的列表 |
传递给 WinSetPopupMenu 的字符串列表,指定整个菜单结构。包括指定水平方向的主菜单条目,垂直方向的辅助条目。在列表中,从上到下,从左到右给菜单条目编码。空字符串作为分隔符。例如,最左边的菜单条目是“文件”,“文件”条目包括“新建”、“保存”、“保存为”和“退出”,菜单列表的形式如下:
{'File','New','Save','Save ~As','Exit',''}: LIST OF STRING;
第二列条目出现于旁边。
可以使用代字号 (~) 使字母成为菜单条目的选择器。可以将下表中的开关放在菜单列表选项的开始,以获得每个开关显示的结果。
开关 | 结果 |
/C | 最初效验的菜单条目 |
/D | 最初禁用的菜单条目 |
/S | 静止菜单条目,并且不是选择项 |
/L | 不显示菜单条目。在其位置出现一行分隔符 |
/H | 当条目为选择项时,菜单为搁置打开 |
// | 显示一条斜线 (/)。不再处理开关 |
给没有工具条的窗口添加工具条,会按用户区域的新尺寸给窗口发送 $MsgSize。
当使用 WinLoadPopupMenu 时,根据平台上的正确鼠标操作,菜单自动出现。当用户选择菜单条目时,将 $MsgMenu 送到窗口。这与以前的函数 WinPopup 不同。在 WinPopup 中,用户一定要捕捉正确的鼠标操作,并调用 WinPopup 以显示弹出式菜单。WinPopup 将返回已选菜单条目的 id。
KNOWLEDGEBASE popup;
ROUTINES
PROCEDURE Main;
(* ***** PRIVATE ***** *)
PRIVATE
VARIABLES (*Global Variable to hold the Window handle of the window *) mainWindow : WINDOW;
ROUTINES
PROCEDURE Main IS
VARIABLES MAIN_MENU {'File', '/CNew', '/DExit' } : LIST OF STRING;
ACTIONS WinCreate($Desktop, mainWindow, $NullHandler, 10, 10, 80, 25, 'WinSetPopupMenu Test', $WinDefaultStyle); (* Set the popup menu. The 'New' menu item is initially checked and *) (* the 'Exit' menu item is initially diabled *) WinSetPopupMenu(mainWindow, MAIN_MENU); WinWait(mainWindow);
END;
WinLoadPopupMenu
设置滚动栏的位置和标记大小。
FUNCTION WinSetScrollBar(VAL whdl: WINDOW, VAL scrollBarID, windowSize, dataSize,windowLoc: INTEGER): INTEGER;
自变量名称 | 说明 |
whdl | 窗口句柄,操作要在该窗口上进行。 |
scrollBarID | 被设置滚动栏的标签。必须是 $WinVScroll (垂直)或 $WinHScroll (水平)。如果地址滚动栏不存在,则操作不发生。没有错误报告。 |
windowSize | 窗口大小,以数据单元表示。单元是任意的,只与 dataSize 和 windowLoc 参数有关。必须以相同的单元表示这些参数。 |
dataSize | 数据大小,用指定窗口大小所用的相同单元表示。 |
windowLoc | 窗口上端或左侧的位置,用以前参数所有的同样单元表示。 |
KNOWLEDGEBASE FileView; CONSTANTS MENU_OPEN IS 101; MENU_EXIT IS 102; MENU_LIST IS {'~File','~Open','e~xit',''}: LIST OF STRING; TYPES EditorData IS RECORD fileName: STRING; yLen: INTEGER; lineCount: INTEGER; pageTop: INTEGER; statusLine: STRING; lines: LIST OF STRING;
END;
ROUTINES PROCEDURE FileView;
PRIVATE ROUTINES
EVENT EditorEvent(REF data: EditorData) IS VARIABLES loc: INTEGER; 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); result := FOpen(editFile, fileName, $Read); IF result <= 0 THEN WinMessageBox($Handle, 'Error', $MBOK + $MBIconError, 'Can not open file ' & fileName); Exit; END; data.lineCount := FReadText(editFile, data.lines); FClose(editFile); data.pageTop := 0; data.statusLine := ' File: ' & fileName; PostMessage($Handle, $MsgPaint); PostMessage($Handle, $MsgPaintStatus); ELSWHEN MENU_EXIT THEN SendMessage($Handle, $MsgClose); END;
END (* Process Main Menu *);
PROCEDURE ProcessChar(VALUE character: INTEGER) IS ACTIONS WHEN character IS $KeyDownArrow THEN IF data.pageTop + data.yLen < data.lineCount THEN data.pageTop := data.pageTop + 1; PostMessage($Handle, $MsgPaint); END; ELSWHEN $KeyUPArrow THEN IF data.pageTop > 0 THEN data.pageTop := data.pageTop - 1; PostMessage($Handle, $MsgPaint); END; ELSWHEN $KeyPageDown THEN IF data.pageTop + data.yLen < data.lineCount THEN data.pageTop := data.pageTop + data.yLen; PostMessage($Handle, $MsgPaint); END; ELSWHEN $KeyPageUp THEN IF data.pageTop > 0 THEN data.pageTop := data.pageTop - data.yLen; IF data.pageTop < 0 THEN data.pageTop := 0; END; PostMessage($Handle, $MsgPaint); END; ELSWHEN $KeyControlPageDown THEN IF data.pageTop + data.yLen < data.lineCount THEN data.pageTop := data.lineCount - data.yLen; PostMessage($Handle, $MsgPaint); END; ELSWHEN $KeyControlPageUp THEN IF data.pageTop > 0 THEN data.pageTop := 0; PostMessage($Handle, $MsgPaint); END; END; END (* ProcessChar *);
ACTIONS WHEN $Event IS $MsgCreate THEN WinSetMenuBar($Handle, MENU_LIST); data.lineCount := 0; data.pageTop := 1; data.statusLine := 'File:'; ELSWHEN $MsgSize THEN (* Size Message *) data.yLen := $EventParm(2, INTEGER); WinSetScrollBar($Handle,$WinVScroll,data.lineCount, data.yLen,data.pageTop); ELSWHEN $MsgPaint THEN WinSetScrollBar($Handle,$WinVScroll,data.lineCount, data.yLen,data.pageTop); FOR loc := 1 to data.yLen + 1 DO IF loc + data.pageTop> data.lineCount THEN ExitLoop; END; WinGoToXY($Handle, 1, loc); WinClearEOL($Handle); WinWriteAt($Handle,1,loc,data.lines[ data.pageTop +loc ]); END; WinGoToXY($Handle, 1, loc); WinClearEOW($Handle); ELSWHEN $MsgMenu THEN (* Menu Message *) ProcessMainMenu($MenuSelection); ELSWHEN $MsgChar THEN ProcessChar($EventParm(1, INTEGER)); ELSWHEN $MsgScroll THEN (* Scroll bar *) IF $EventParm(1, INTEGER) =$WinVScroll THEN data.pageTop := $EventParm(2, INTEGER); PostMessage($Handle, $MsgPaint); END; ELSWHEN $MsgPaintStatus THEN (* Status Bar *) WinClear($Handle); WinWrite($Handle,data.statusLine); END; END (* Editor Event *);
PROCEDURE FileView IS VARIABLES whdl: WINDOW; ACTIONS WinCreate($Desktop,whdl,EditorEvent,0,0,0,0, 'KML File viewer', BitOr($WinBorder,$WinTitle, $WinResize,$WinSysMenu, $WinMenu,$WinVSCroll, $WinStatus,$WinAutoPos, $WinAutoSize,$WinTaskList)); WinWait(whdl); END (* File View *);
WinCreate
在对话框表格或窗口的标题条设置文本。
FUNCTION WinSetTitle(VAL whdl: WINDOW, VAL newTitle: STRING): INTEGER;
自变量名称 | 说明 |
whdl | 要更改标题文本的对话框或窗口的句柄。 |
newTitle | 对话框表格或窗口的新标题。 |
该函数也可以作为一条能传递到对话框表格或窗口的消息($MsgSetTitle)来实现。
KNOWLEDGEBASE title;
ROUTINES PROCEDURE Main;
PRIVATE
ROUTINES
PROCEDURE Main IS VARIABLES Handle : WINDOW; ACTIONS WinCreate($Desktop, Handle, $NullHandler, 1, 1, 80, 25, 'If you see this it did not work', $WinDefaultStyle); WinSetTitle(Handle, 'It works!'); WinWait(Handle); END;
打开或关闭等待指针(砂漏)。等待指针影响应用程序中的全部窗口。
WinSetWaitPointer ( VAL state : BOOLEAN ) : INTEGER;
自变量名称 | 说明 |
state | ‘True’时,显示等待指针,而‘False’则恢复以前的指针。 |
WinSetWaitPointer 打开或关闭等待指针,取决于提供的状态。用它给出可见的提示,说明应用程序正忙或仍在处理。
KNOWLEDGEBASE wait;
ROUTINES
PROCEDURE Main;
(* ***** PRIVATE ***** *)
PRIVATE
VARIABLES (* Global Variable to hold the Window handle of the window *) mainWindow : WINDOW;
ROUTINES
PROCEDURE Main IS
VARIABLES
ACTIONS WinCreateScrollWindow($Desktop, mainWindow, $NullHandler, 10, 10, 80, 25, 'Test Window', $SystemMonoSpaced, 10, $WinDefaultStyle); WinSetWaitPointer(TRUE); (* Set the pointer to be the wait pointer before doing intensive processing *) (* and change it back afterwards *) WinSetWaitPointer(FALSE); WinWait(mainWindow);
END;
显示或隐藏对话框和窗口。
FUNCTION WinShowWindow(VAL whdl: WINDOW, VAL state: BOOLEAN): INTEGER;
自变量名称 | 说明 |
whdl | 可以更改其可视状态的对话框表格或窗口的句柄。 |
state | 如果要"显示"窗口,则设为 TRUE;如果要 "隐藏"窗口,则设为 FALSE。 |
也用作对话框或窗口的消息($MsgShow)。
KNOWLEDGEBASE title;
ROUTINES PROCEDURE Main;
PRIVATE
ROUTINES
PROCEDURE Main IS VARIABLES Handle : WINDOW; ACTIONS WinCreate($Desktop, Handle, $NullHandler, 1, 1, 80, 25, 'If you see this it did not work', $WinDefaultStyle); WinShowWindow(Handle, FALSE); SysDelay(1000); WinShowWindow(HANDLE, TRUE); WinWait(Handle); END;
存在窗口时,暂停执行。
FUNCTION WinWait(VAL whdl: WINDOW): INTEGER;
当处理 $MsgDDEInitiate 消息,请不要使用 WinWait。$MsgDDEInitiate 向应用程序广播消息,并在返回响应之前锁定消息队列。同时,WinWait 语句初始化也在等待消息队列应答的事件处理器程序。WinWait 防止其它应用程序向消息队列发送消息。这会造成死锁,有效的锁定用户界面。
自变量名称 | 说明 |
whdl | 要执行操作的窗口的句柄。 |
WinWait 通常用于应用程序主过程的等待,直到主窗口不再存在。
VARIABLES whdl: WINDOW; ACTIONS WinCreateScrollWindow($Desktop,whdl,$NullHandler,0,0,0,0, 'Window Title','',0, BitOr($WinBorder,$WinTitle, $WinResize,$WinSysMenu, $WinAutoPos,$WinAutoSize, $WinTaskList)); WinWait(whdl);
查询窗口的宽度。
FUNCTION WinWidth(VAL whdl: WINDOW): INTEGER;
自变量名称 | 说明 |
whdl | 执行操作的窗口的句柄。 |
WinWidth 返回指定窗口客户机区域的当前宽度,以字符单元表示。
VARIABLES width: INTEGER; ACTIONS width := WinWidth($Handle);
在一个窗口的当前位置写入字符串。
FUNCTION WinWrite(VAL whdl: WINDOW, VAL outputText: LIST OF STRING): INTEGER;
自变量名称 | 说明 |
whdl | 要写入窗口的句柄。此句柄可以引用标准(类属)窗口或滚动窗口。 |
outputText | 显示的字符串的列表。单个字符串也是有效的。在列表的每一条目执行此命令。 |
WinWrite 可以用于向类属窗口或滚动窗口中写入信息。不能用它向对话框中写入信息。
查找当前画图的位置
TSD 脚本为每个类属窗口和滚动窗口维护一个当前画图位置。由 WinWrite 写入的文本出现在该位置。写操作之后,画图的 x 坐标前移。通过调用 WinX 和 WinY 函数,可以找出当前位置。
使用格式说明符
格式说明符实际上是位屏蔽,位屏蔽中的不同位控制格式的不同部分。 WinWrite 处理字符串的列表,使您能够控制 WinWrite 和其它语句中的显示格式。
一般来说,所有表达式都可以用两种格式说明符来表示:
这些格式说明符是用冒号与表达式分开并用冒号将格式说明符彼此分开。例如:
VARIABLES s: STRING; i: INTEGER; r: REAL; b: BOOLEAN; (* true false *) d: DATE; (* right, empty pad, usa *) t: TIME; (* right, empty pad, 24 hour military *) ACTIONS s := 'First Bank'; i := 951; r := 14567.89; d := {2,15,1956}: DATE; t := {11,45,0}: TIME; WinWrite($Handle,s:20); -- outputs 'First Bank' WinWrite($Handle,i:5); -- outputs '951 ' WinWrite($Handle,r:9:2);-- outputs '14567.89 ';
WinWrite($Handle,d:10:$FmtDateMonthDayYear); -- outputs '2/11/1956' WinWrite($Handle,d:10:BitOr($FmtDateMonthDayYear, $FmtDateTruncateCentury); -- outputs '2/11/56 ' WinWrite($Handle,t:7:$FmtTimeAMPM); -- outputs '11:45 AM';
注: 在数据类型格式标志中, 对各种格式标志进行了说明。
实数格式说明符
实数格式说明符也可以对要显示的小数点的右面的位数进行解码。例如:
WinWrite($Handle, r :10 : BitOr(2, $FmtLeftJustify));
左边调整输出,并显示小数点右边的两位数字。在缺省状态下,实数显示小数点右边的六位数字。
数据类型的缺省格式
各种数据类型都有缺省格式。这些缺省格式可能依国家而改变,因为数据类型的缺省格式(包括美国)是基于国际控制面板的设置。
下表显示美国数据类型的缺省格式。
数据类型 | 美国数据类型的缺省格式 |
字符串 | $FmtRightJustify |
整数 | $FmtRightJustify+$FmtIntUngrouped+$FmtBlankPad+$FmtIntSignNegOnly+$FmtIntDecimal |
实数 | $FmtRightJustify+$FmtRealUngrouped+$FmtBlankPad+$FmtRealSignNegOnly+
$FmtRealDecimalDot |
布尔 | $FmtRightJustify+$FmtBoolTrueFalse |
日期 | $FmtRightJustify+$FmtDateMonthDayYear+$FmtBlankPad+$FmtDateSlashSeparators+
$FmtDateNumericMonth+$FmtDateFullYear |
时间 | $FmtRightJustify+$FmtTimeWithSeconds+$FmtBlankPad+$FmtTimeMilitary |
使用 StringFormat、IntegerFormat、RealFormat、BooleanFormat、DateFormat 和 TimeFormat 函数可以改变缺省格式。
KNOWLEDGEBASE Clip;
CONSTANTS MENU_REFRESH IS 101; MENU_EXIT IS 102;
ROUTINES PROCEDURE ClipView;
PRIVATE
CONSTANTS MENU_LIST IS {'~File','~Refresh','E~xit',''}: LIST OF STRING; ROUTINES EVENT ClipboardEvent(REF clipBoard: STRING) IS ACTIONS WHEN $Event IS $MsgCreate THEN WinSetMenuBar($Handle,MENU_LIST); SysGetClipboard(clipBoard); WinWrite($Handle,clipBoard); ELSWHEN $MsgMenu THEN WHEN $MenuSelection IS MENU_REFRESH THEN SysGetClipboard(clipBoard); WinClear($Handle); WinWrite($Handle,clipBoard); ELSWHEN MENU_EXIT THEN SendMessage($Handle,$MsgClose); END; END; END (* Clipboard Event *); PROCEDURE ClipView IS VARIABLES whdl: WINDOW; ACTIONS WinCreateScrollWindow($Desktop,whdl,ClipboardEvent{''}, 0,0,0,0,'KML Clipboard viewer', '',10, BitOr($WinBorder,$WinTitle, $WinResize, $WinSysMenu, $WinMenu,$WinAutoPos, $WinAutoSize,$WinVScroll, $WinHScroll,$WinTaskList)); WinWait(whdl); END (* Clip View *);
其他信息,请参见 数据类型格式标志。
在窗口指定位置写入字符串。
FUNCTION WinWriteAt(VAL whdl: WINDOW, VAL xLoc, yLoc: INTEGER, VAL outputText: LIST OF STRING): INTEGER;
自变量名称 | 说明 |
whdl | 要向其中写入内容的窗口的句柄。此句柄可以引用标准(类属)窗口或滚动窗口。 |
xLoc | 字符串开始的 X 坐标。 |
yLoc | 字符串开始的 Y 坐标。 |
outputText | 显示的字符串的列表。单个字符串也有效。此命令处理列表中的每一条目。 |
WinWriteAt 用于在类属窗口或滚动窗口的特定位置开始写入信息。处理结束时,WinWriteAt 使当前的画图位置(光标位置)离开最后一个写入字符右边一个字符位置。
WHEN $Event IS $MsgPaint THEN WinWriteAt($Handle,1,1,context.fileName); END;
在窗口写入字符串,将位置指针前移至下一行的开始处。
FUNCTION WinWriteLN(VAL whdl: WINDOW, VAL outputText: LIST OF STRING): INTEGER;
自变量名称 | 说明 |
whdl | 要写入窗口的句柄。此句柄可以引用标准(类属)窗口或滚动窗口。 |
outputText | 显示的字符串的列表。单个字符串也有效。此命令处理列表中的每一条目。 |
WinWriteLN 使用隐含的 FOR 循环:顺序地写入整个字符串列表。
WinWriteLN 与 WinWrite 是相同的,除了它将窗口光标前移到下一文本行的开始处之外。
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 *);
返回当前画图位置的 x 坐标。
FUNCTION WinX(VAL whdl: WINDOW): INTEGER;
自变量名称 | 说明 |
whdl | 要在其中执行操作的窗口的句柄。 |
WinX 与 WinGetXPos 不同,因为它返回窗口内的字符位置,而 WinGetXPos 查询窗口或对话框的左上角。
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;
WinY
返回当前画图位置的 y 坐标。
FUNCTION WinY(VAL whdl: WINDOW): INTEGER;
自变量名称 | 说明 |
whdl | 要在其中执行操作的窗口的句柄。 |
WinY 与 WinGetYPos 不同,因为它返回窗口内的字符位置,而 WinGetYPos 查询窗口或对话框的左上角。
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;
WinX
Tivoli 服务台 6.0 开发工具包脚本语言参考