integer*4 events integer*4 keystate integer*4 x, y integer*4 result c c ***** 左右ボタンのダブルクリック待ち ***** events = MOUSE$RBUTTONDBLCLK .or. MOUSE$LBUTTONDBLCLK result = WAITONMOUSEEVENT(events, keystate, x, y) c c ***** 結果のチェック ***** if (result .eq. MOUSE$RBUTTONDBLCLK) then write(*,*) '右ボタンがダブルクリックされました' else if (result .eq. MOUSE$LBUTTONDBLCLK) then write(*,*) '左ボタンがダブルクリックされました' else write(*,*) 'Bad event' endif c c ***** 同時に押されているボタン・キーのチェック ***** if ((keystate .and. MOUSE$KS_RBUTTON) .eq. MOUSE$KS_RBUTTON) then write(*,*) '右ボタンが押されています' endif if ((keystate .and. MOUSE$KS_SHIFT) .eq. MOUSE$KS_SHIFT) then write(*,*) 'SHIFT キーが押されています' endif c c ***** マウスポインタの座標 ***** write(*,*) 'ポインタの位置は (', x, ',', y, ') です'
マウスからの特定のイベント(入力)を取得します。 上の例では、右ボタンまたは左ボタンがダブルクリックされるまで プログラムが中断します。 そして指定したイベントのうち、 どれが発生したかが result に返されます。 イベントの指定方法と結果の確認方法は上のサンプルを見てください。 指定できるイベントは以下の通りです。
keystate にはイベント発生時に同時に押されていた ボタンまたはキーが記録されます。 確認方法は上のサンプルを見てください。 対象となるものは以下の通りです。
x, y にはイベント発生時のマウスポインタの座標が記録されます。
マウスのイベントは画面毎に別個に扱われます。 WAITONMOUSEEVENT はその時点で アクティブだった画面からの イベントのみを待ち、他の画面からのイベントは無視します。 したがって、複数の画面からの入力を同時に待つことはできません。 どの画面からの入力にも対応できるプログラムを作成したい場合は、 次節で述べる手法を使用する必要があります。
疲れたのでやめます。 [Programmer's Guide → Using QuickWin → Customize QuickWin Applications → Using a Mouse → Event-Based Functions] を参照してください。
integer*4 index integer*4 color integer*4 result index = 120 color = #00FFFF result = REMAPPALETTERGB(index, color)
上記の例は、 色番号 120 に対し黄色を割り当て、 結果を result に返しています。 result は成功のとき 0、失敗のとき -1 となります。
色番号は 0 から 255 まで使用できます。 0 から 15 まではあらかじめ標準的な色が設定されていますが、 自分で変更することも可能です (でもおすすめはしません)。
ここで問題となるのは、 割り当てるべき色を数値で与えなければならない点でしょう (たとえば黄色なら #00FFFF など)。 説明するのも面倒なので、よくわからないという人は 次の関数を使用してください。
function iRGB2INT(red, green, blue) integer*4 iRGB2INT integer red ! 赤の輝度(0 から 100) integer green ! 緑の輝度(0 から 100) integer blue ! 青の輝度(0 から 100) integer R, G, B R = (red * 255) / 100 G = (green * 255) / 100 B = (blue * 255) / 100 iRGB2INT = R + G * 256 + B * 256**2 return end
黄色を加色法の三原色で表現すると、 赤と緑が最大輝度、青が最低輝度となるので、 上記関数を使用すると次のように書けます。
color = iRGB2INT(100, 100, 0) result = REMAPPALETTERGB(index, color)
さて、 皆さんは赤・緑・青の三原色の組み合わせで好きな色を 表現することができるでしょうか。 えっ、できない? それは困りましたね。 そこまでは面倒見きれません。
パレットカラーでは 同時に使用できる色は 256 色までとなります。 同時にそれ以上の色を表示したい場合は SETCOLOR の代わりに SETCOLORRGB を使用します。
integer*4 color integer*4 result color = #00FFFF result = SETCOLORRGB(color)
同様に、 SETTEXTCOLOR の代わりに SETTEXTCOLORRGB、 SETBKCOLOR の代わりに SETBKCOLORRGB を使用します。 詳しくは、 [Programmer's Guide → Drawing Graphics Elements → Adding Color] を参照してください。