Tivoli Service Desk 6.0 Developer's Toolkit Script プログラミングの手引き

第 6 章: TSD Script ウィンドウ・システムの使用法

目次に戻る


概要

TSD Script を使用して、一般ウィンドウ、仮想スクロール・ウィンドウ、およびフォームを作成することができます。 TSD Script ウィンドウ・システムは、カスタム・ユーザー・インターフェースを作成できる数多くの TSD Script ステートメントで構成されます。

この章の内容は次の通りです。

ウィンドウ記述

ウィンドウとは、それ独自の文書またはメッセージが入っている画面またはデスクトップの一部分です。一般ウィンドウのパーツを説明するために、次の用語が使用されています。

WinCreate の使用

一般ウィンドウの作成

WinCreate一般ウィンドウを作成するために使用されます。 一般ウィンドウは TSD Script によって提供される最も単純で柔軟なウィンドウです。また、汎用ウィンドウには、それ自体のメッセージも含まれています。

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

WinCreate 引き数の例

次の説明は、前の例のアクションのセクションで使用された 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 では、ウィンドウの作成には次のステップがあります。

  1. ウィンドウと関連したイベント・ハンドラーが、 $MsgSize イベントで呼び出されます。 これはウィンドウが画面上でドローされる以前に起こります。
    さらに、他の 2 つの情報部分 (文字で表される新規ウィンドウの幅および高さ) がイベント・ハンドラーに渡されます。これらの値は、それぞれ最初の名前なしイベント・パラメーター (INTEGER) と 2 番目の名前なしイベント・パラメーター (INTEGER) に渡されます。
  2. 次に、イベント・ハンドラーは $MsgCreate イベントで呼び出されます。 これは、ウィンドウが画面でドローされようとしているイベント・ハンドラーを示します。この時点で、イベント・ハンドラーはメニュー・コマンド、ツール、および他のビジュアル要素を追加するアクションを実行する必要があります。

注: イベント・ハンドラーがウィンドウのクライアント域のサイズを変更するアクションを実行する場合には、新規 $MsgSize メッセージが生成されます。 ウィンドウのクライアント域は、エンド・ユーザーが作業する区域です。クライアント域に含まれない要素には次が入ります。

  1. ウィンドウ・フレームが画面上でドローされます。
  2. イベント・ハンドラーが $MsgPaint で呼び出されます。この時に、イベント・ハンドラーはウィンドウのクライアント域の内部に表示される他の情報をドローする必要があります。

これら 4 つのステップの中で、たいていのウィンドウが関係するのは 2 番目と 4 番目だけです。 $MsgCreate メッセージは重要です。イベント・ハンドラーがメッセージの表示前にウィンドウに最終調整を行って、インスタンス・データで値を初期化する該当時間を識別するためです。

MainEvent ルーチンが $MsgCreate メッセージを受け取ると、次の 2 つのアクションを実行します。

注: メインプログラムの WinCreate ステートメントにある $WinIconBar フラグは、ツールバーが追加された時に新規ウィンドウが正しくサイズ変更されてクライアント域が正しいことを判別します。

ドロップダウン・メニュー

ドロップダウン・メニュー・システムの作成

このセクションでは、メニュー・システムの作成方法を説明します。ファイル、編集、およびヘルプの 3 つのメニューでメニュー・システムを構成したいとします。ファイル・メニューの下には、次のコマンドがあります。

編集メニューの下には、次のコマンドがあります。

最後に、次のヘルプ・メニュー・コマンドがあります。

メニュー・オプション

上から下、左から右にオプションを追加することにより、 2 次元メニュー構造が 1 次元リストに変換されます。

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) には、選択されたメニュー・コマンドを示す整数が入っています。 この整数は次のようにコード化されます。

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 プログラミングの手引き

目次に戻る

著作権