Tivoli Service Desk 6.0 Developer's Toolkit Script 言語解説書
標準ウィンドウにおける後続の書き込み操作のフォントを設定します。
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) を使用 することにより、ツールバー・ボタンの "ツールのヒント" と同様に、指定のツールバー・ボタンに対応したメニュー ID などの追加の属性を指定することが可能となります。 |
ツールバーはメニュー・バーに類似したコントロールです。 ツールバーは、ウィンドウ上の タイトル・バーとメニュー・バーの下に表示されます。 これは、マウス・ボタン 1 をクリックする ことによって選択することのできるアイコンの行から成っています。
ツールバーおよびその中のアイコンに対するキーボード・インターフェースはありません。 アイコンを選択すると、メニュー・メッセージ ($MsgMenu) がウィンドウのイベント・ハンドラー に送られます。 最初のイベント・パラメーター (整数) はアイコン ID です。
注: アイコンには 1-99 のラベルが付いており、左端のアイコンの ID が 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 に渡された文字列のリストは、メニュー構造全体を指定します。 水平のメイン・メニュー・アイテムおよび垂直の補助アイテムの両方を指定することができます。 メニュー・アイテムは、上から下、左から右の形式でリスト中にコード化されます。 空ストリングは 区切り記号としての役目をします。 たとえば、左端のメニュー・アイテムが「ファイル」で、 「ファイル」のアイテムとして「新規」、「保管」、「別名保管」、および「終了」を組み込む 場合には、メニュー・リストは次のようになります:
{'ファイル','新規','保管','別名保管','終了',''}: LIST OF STRING;
アイテムの 2 番目の列が次にきます。
ティルド (~) を使用して、文字をメニュー・アイテムのセレクターにすることができます。
次の表の中のスイッチをメニュー・リスト・アイテムの始めに位置づけて、各スイッチごとに
結果が表示されるようにすることができます。
スイッチ | 結果 |
/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 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 に渡された文字列のリストは、メニュー構造全体を指定します。 水平のメインメニュー・アイテムおよび垂直の補助アイテムの両方を指定することができます。 メニュー・アイテムは、上から下、左から右の形式でリスト中にコード化されます。 空ストリングは区切り記号としての役目をします。 たとえば、左端のメニュー・アイテムが「ファイル」で、 「ファイル」のアイテムとして「新規」、「保管」、「別名保管」、および「終了」を組み込む 場合には、メニュー・リストは次のようになります:
{'ファイル','新規','保管','別名保管','終了',''}: LIST OF STRING;
アイテムの 2 番目の列が次にきます。
ティルド (~) を使用して、文字をメニュー・アイテムのセレクターにすることができます。
次の表の中のスイッチをメニュー・リスト・オプションの始めに位置づけて、各スイッチごとに
結果が表示されるようにすることができます。
スイッチ | 結果 |
/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 Script は、各総称およびスクロール・ウィンドウごとに現在のドロー位置を保守します。 WinWrite で書かれたテキストがその位置に表示され、書き込み操作後に、ドロー位置の X 位置が 拡張されます。 現在位置は、WinX および WinY 関数を呼び出すことによって 検出することができます。
形式指定子の使用
形式指定子は実際には、各種のビットが形式の各種のパーツをコントロールするビット・マスクです。 WinWrite は、ユーザーが表示の形式設定を WinWrite および他のステートメント中で コントロールすることができる文字列のリストを処理します。
一般的には、任意の式の後に次の 2 つの形式指定子が続くことができます:
これらの形式指定子は、コロンによって式から切り離され、また互いに切り離されます。 例:
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));
left は出力をそろえて、小数点の右側に 2 桁を表示します。 デフォルトでは、 実数は小数点の右側に 6 桁を表示します。
データ・タイプのデフォルト形式
いろいろなデータ・タイプにデフォルト形式があります。 これらのデフォルトは国によって 異なる場合があります。なぜなら、データ・タイプのデフォルトは (米国のものも含めて) 国際 制御パネル設定値に基づいているからです。
次の表は、データ・タイプの米国のデフォルト形式を示したものです。
データ・タイプ | 米国のデフォルト形式 |
文字列 | $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 は、その処理の終わりの時点で、現在のドロー位置 (カーソルの位置) を、書き込まれた最後の文字から 1 文字分だけ右に離します。
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 はウィンドウまたは ダイアログ・ボックスの左上隅を参照するので、これら 2 つは異なるものです。
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 はウィンドウまたは ダイアログ・ボックスの左上隅を参照するので、これら 2 つは異なるものです。
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 Service Desk 6.0 Developer's Toolkit Script 言語解説書