Tivoli Service Desk 6.0 Developer's Toolkit Script プログラミングの手引き
TSD Script を使用して、一般ウィンドウ、仮想スクロール・ウィンドウ、およびフォームを作成することができます。 TSD Script ウィンドウ・システムは、カスタム・ユーザー・インターフェースを作成できる数多くの TSD Script ステートメントで構成されます。
この章の内容は次の通りです。
ウィンドウとは、それ独自の文書またはメッセージが入っている画面またはデスクトップの一部分です。一般ウィンドウのパーツを説明するために、次の用語が使用されています。
WinCreate は一般ウィンドウを作成するために使用されます。 一般ウィンドウは TSD Script によって提供される最も単純で柔軟なウィンドウです。また、汎用ウィンドウには、それ自体のメッセージも含まれています。
VARIABLES mainWindow: Window; ACTIONS WinCreate($Desktop,mainWindow,MainEvent, 1,1,100,30,'',0);
次の説明は、前の例のアクションのセクションで使用された WinCreate 引き数を説明しています。
座標システムは (1,1) で始まり、これは画面の左上隅の位置になります。 X 座標は画面を右方向に、 y 座標は下方向に進むと数値が増します。
次の 2 つの引き数は、それぞれ新規ウィンドウのクライアント域の幅および高さです。 これらは文字単位になっています。
例で作成されたウィンドウは、その左上隅が画面の左上隅になります。 横 100 文字、縦 30 です。
次の例では、最後の引き数は整数式であり、各ビット位置はオン / オフ・フラグを表します。 例:
WinCreate($Desktop,mainWindow,MainEvent, 1,1,100,30,'', BitOr($WinTitle,$WinBorder,$WinMinMax));
BitOr 関数の結果は、このウィンドウがタイトル・バー、枠、および右上隅にある最小化 / 最大化ボタンの 3 つのアイテムで作成されていることを意味します。
TSD Script により提供される作成フラグの詳細については、 TSD 6.0 Developer's Toolkit Script 言語解説書 を参照してください。
TSD Script にアプリケーション・メイン・ウィンドウを作成することができます。 TSD Script では、ウィンドウの作成には次のステップがあります。
注: イベント・ハンドラーがウィンドウのクライアント域のサイズを変更するアクションを実行する場合には、新規 $MsgSize メッセージが生成されます。 ウィンドウのクライアント域は、エンド・ユーザーが作業する区域です。クライアント域に含まれない要素には次が入ります。
これら 4 つのステップの中で、たいていのウィンドウが関係するのは 2 番目と 4 番目だけです。 $MsgCreate メッセージは重要です。イベント・ハンドラーがメッセージの表示前にウィンドウに最終調整を行って、インスタンス・データで値を初期化する該当時間を識別するためです。
MainEvent ルーチンが $MsgCreate メッセージを受け取ると、次の 2 つのアクションを実行します。
- 最初に、アイコン名のリストを作成します。
- 次に、 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 フラグは、ツールバーが追加された時に新規ウィンドウが正しくサイズ変更されてクライアント域が正しいことを判別します。このセクションでは、メニュー・システムの作成方法を説明します。ファイル、編集、およびヘルプの 3 つのメニューでメニュー・システムを構成したいとします。ファイル・メニューの下には、次のコマンドがあります。
編集メニューの下には、次のコマンドがあります。
最後に、次のヘルプ・メニュー・コマンドがあります。
上から下、左から右にオプションを追加することにより、 2 次元メニュー構造が 1 次元リストに変換されます。
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) には、選択されたメニュー・コマンドを示す整数が入っています。 この整数は次のようにコード化されます。
major*100 + minor
major は選択された水平メニュー・コマンドの数値 (左端が 100) であり、 minor は選択された垂直メニュー・コマンドの数値 (最上部が 101) です。 そのために、ユーザーが編集メニュー下の貼り付けコマンドを選択する場合には、編集が 2 番目の水平コマンドであり、貼り付けが 3 番目の垂直コマンドなので、最初の名前なしイベント・パラメーター (整数) は値 203 になります。 数字 1 〜 99 はツールを表します。これはツール・イベントも $MsgMenu によって操作されるためです。
TSD Script は、一般ウィンドウのクライアント域の外観を更新する数多くのステートメントを提供します。 内部では一般ウィンドウが現行カーソル位置の追跡を保持します。 これは、特定の出力操作 (たとえば WinWrite) が起こる (x,y) 位置です。
現在選択されている座標システムのドロー位置は、クライアント域の左上隅の位置 (1,1) から測ることができます。 ドロー位置は、次で測ることができます。
x 座標位置は右方向に進み、 y 座標位置は下方向に進みます。
一般ウィンドウで使用できるステートメントは、次の表にリストされています。 パラメーターは Tivoli Service Desk 6.0 Developer's Toolkit Script プログラミングの手引き にリストされています。
ステートメント | 説明 |
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 メッセージを受け取ることができます。 再ペイント・メッセージの結果には 2 つの基本トリガーがあります。
注: ウィンドウのクライアント部分に書き込む一般ウィンドウは、通常は $MsgPaint イベントを保守イベント・ハンドラーの一部でだけそれを行う必要があります。
一般ウィンドウは、再ペイント・メッセージを操作し、その内容を任意の時に再生成できなければなりません。 TSD Script は、次を行う仮想スクロール・ウィンドウを提供します。
仮想スクロール・ウィンドウは完全に仮想です。これの 2 次元スペースの任意の場所に情報を書き込むことができ、スクロール・バー (水平および垂直) を使用してそれを表示することができます。
注: 仮想スクロール・ウィンドウは、ユーザー・データの構造についてはまったく認識しません。一般ウィンドウよりも使用は簡単ですが、有効ではありません。
仮想スクロール・ウィンドウは、 WinCreateScrollWindow ステートメントで作成されます。 このステートメントには、次の引き数があります。
引き数名 | 説明 |
whdlParent | 新しく作成されたウィンドウの親のハンドル。 |
whdl | 新しく作成されたウィンドウのハンドルがこのパラメーターで戻されます。 エラーがある場合には、変数は $Unknown に設定されます。 |
EventHandler | ウィンドウまたはダイアログ・ボックスによって生成されたイベントを処理するイベント・ハンドラー。 イベント処理が必要ない場合には、キーワード $NullHander が使用される場合があります。 |
xLoc | ウィンドウの左上隅の X 位置。 X 座標は文字セルで測ります。 |
yLoc | ウィンドウの左上隅の Y 位置。 Y 座標は文字セルで測ります。 |
width | ウィンドウの幅 (X 座標) 。枠を除外します。 X 座標は文字セルで測ります。 |
height | ウィンドウの高さ (Y 座標) 。枠、タイトル・バー、メニュー・バー、アイコン・バー、および状況バーを除外します。 Y 座標は文字セルで測ります。 |
title | ウィンドウ・タイトル・バー上に表示するタイトル。ウィンドウには、表示されるタイトルのタイトル・バーがなければなりません。 $WinTitle スタイルを使用します。 |
font | 使用可能システム・フォントの名前。 |
pointSize | スクロール・ウィンドウ内部で使用されるフォントのポイント・サイズ。 |
style | ウィンドウの外観をコントロールするために使用するスタイル・フラグのリストを表す整数のビット・マスク。 |
仮想スクロール・ウィンドウは、 "line-at-a-time" 情報を記録するのに有用です。 次の例はスクロール可能「ブラック・ボード」として提供するウィンドウを作成します。このウィンドウは、 EMPLOYEES テーブルのすべての従業員の名前および社会保障番号をリストするために使用されます。 これらの名前および番号は、ウィンドウの最上部から開始して、一度に 1 行ずつウィンドウに書き込まれます。
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 スタイルを使用している場合には、ウィンドウ全体が 1 行スクロールアップされます。 |
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 Service Desk 6.0 Developer's Toolkit Script プログラミングの手引き