前へ | 次へ | 目次 | 索引 |
Scroll a Display Under a Viewport ルーチンは,対応するビューポートで表示されている仮想ディスプレイをスクロールします。
SMG$SCROLL_VIEWPORT display-id [,direction] [,count]
OpenVMS 用法 cond_value データ型 longword (unsigned) アクセス write only 受け渡し方 by value
display-id
OpenVMS 用法 identifier データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
スクロールされる仮想ディスプレイのディスプレイ識別子。 display-id 引数は,ディスプレイ識別子を格納した符号なしロングワードのアドレスです。direction
OpenVMS 用法 mask_longword データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
方向指定子(省略可能)。direction 引数は,スクロールの方向を指定する方向コードを格納したロングワード・ビット・マスクのアドレスです。 count 引数(省略可能)を組み合わせて使用することにより,指定した方向にスクロールする行数を指定できます。direction 引数に対して指定できる値は以下のとおりです。
SMG$M_UP count 行だけ上にスクロールします。 SMG$M_DOWN count 行だけ下にスクロールします。 SMG$M_RIGHT count カラムだけ右にスクロールします。 SMG$M_LEFT count カラムだけ左にスクロールします。 省略時の設定は SMG$M_UP です。
count
OpenVMS 用法 longword_signed データ型 longword (signed) アクセス read only 受け渡し方 by reference
スクロールする行数またはカラム数(省略可能)。省略時の値は 1 です。
SMG$SCROLL_VIEWPORT ルーチンは,対応するビューポートで表示されている仮想ディスプレイをスクロールします。実際には,スクロールをシミュレートするために,仮想ディスプレイの上をビューポートが移動するように,ビューポートはその座標を変更します。しかし,画面上で物理的な位置が変化するわけではありません。ビューポートが仮想ディスプレイの外部に移動する場合には,ビューポートのサイズが変化する可能性があります。ビューポートのサイズを元に戻すには,SMG$CHANGE_VIEWPORT ルーチンを使用します。ビューポートの開始カラムが,全角文字の右半分であった場合には,そのカラムは表示されません。また,ビューポートが全角文字の左半分で終了した場合にも,そのカラムは表示されません。
SS$_NORMAL 正常終了。 SMG$_INVARG count 引数の値が 0 より小さい値です。 SMG$_INVDIS_ID display-id 引数に誤りがあります。 SMG$_NO_WINASSOC 指定された仮想ディスプレイにビューポートは対応づけられていません。 SMG$_WRONUMARG 引数の数が誤っています。 SMG$_WINTRUFIT 正常終了。ただし,仮想ディスプレイに対応づけられているビューポートはサイズが変更されました。
#1 |
---|
C This DEC FORTRAN example demonstrates SMG$SCROLL_VIEWPORT. C Include the SMG definitions. In particular, we want SMG$M_BORDER. IMPLICIT INTEGER (A-Z) INCLUDE '($SMGDEF)' C Create the Virtual Displays. Give them borders. ROWS = 10 COLUMNS = 22 STATUS = SMG$CREATE_VIRTUAL_DISPLAY 1 (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) C Create viewport STATUS = SMG$CREATE_VIEWPORT (DISPLAY1, 2, 2, 3, 10) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) C Create the Pasteboard STATUS = SMG$CREATE_PASTEBOARD (PASTE1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) C Put data into the Virtual Displays STATUS = SMG$PUT_CHARS ( DISPLAY1,'11111111111111', 1, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$PUT_CHARS ( DISPLAY1,'This is row 2.', 2, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$PUT_CHARS ( DISPLAY1,'33333333333333', 3, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$PUT_CHARS ( DISPLAY1,'This is row 4.', 4, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$PUT_CHARS ( DISPLAY1,'55555555555555', 5, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$PUT_CHARS ( DISPLAY1,'This is row 6.', 6, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$PUT_CHARS ( DISPLAY1,'77777777777777', 7, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$PUT_CHARS ( DISPLAY1,'This is row 8.', 8, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$PUT_CHARS ( DISPLAY1,'99999999999999', 9, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$PUT_CHARS ( DISPLAY1,'This is row 10.', 10, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) C Paste the Virtual Display STATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1, PASTE1, 4, 3) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = LIB$WAIT (2.0) DO 1 I = 1, 3 STATUS = SMG$SCROLL_VIEWPORT(DISPLAY1,SMG$M_UP,1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) CALL LIB$WAIT (2.0) 1 CONTINUE STATUS = LIB$WAIT (2.0) END |
この例では,1 つの仮想ディスプレイが作成され,ビューポートが対応づけられています。仮想ディスプレイはビューポートに対応づけられた後,ペーストボードにペーストされたため,仮想ディスプレイの中でビューポートの内部だけが表示されます。この状態は 図 8-42 に示すとおりです。
図 8-42 仮想ディスプレイをペーストすることにより生成される出力
SMG$SCROLL_VIEWPORT ルーチンを全部で 3 回呼び出しています。 図 8-43 は,SMG$SCROLL_VIEWPORT ルーチンを最初に呼び出した後のビューポートを示しています。
図 8-43 SMG$SCROLL_VIEWPORT ルーチンを最初に呼び出した後に生成される出力
図 8-44 は,SMG$SCROLL_VIEWPORT ルーチンを 2 回目に呼び出した後のビューポートの内容を示しています。
図 8-44 SMG$SCROLL_VIEWPORT ルーチンを 2 回目に呼び出した後生成される出力
図 8-45 は,SMG$SCROLL_VIEWPORT ルーチンを最後に呼び出した後のビューポートの内容を示しています。
図 8-45 SMG$SCROLL_VIEWPORT ルーチンを最後に呼び出した後に生成される出力
Make a Selection from the Menu ルーチンは,矢印キーを使って選択メニュー間の移動をしたり,[Return]キーを使ってメニューの選択を確定することを可能にします。
SMG$SELECT_FROM_MENU keyboard-id ,display-id ,selected-choice-number [,default-choice-number] [,flags] [,help-library] [,timeout] [,word-terminator-code] [,selected-choice-string] [,rendition-set] [,rendition-complement]
OpenVMS 用法 cond_value データ型 longword (unsigned) アクセス write only 受け渡し方 by value
keyboard-id
OpenVMS 用法 identifier データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
入力を読み込む対象となる仮想キーボードを指定します。 keyboard-id 引数は,キーボード識別子を格納した符号なしロングワードのアドレスです。display-id
OpenVMS 用法 identifier データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
選択した項目が表示される仮想ディスプレイを指定します。 display-id 引数は,ディスプレイ識別子を格納した符号なしロングワードのアドレスです。仮想ディスプレイは,ペーストボードにペーストされ,バッチ処理されたり重ね書きされたりすることはできません。selected-choice-number
OpenVMS 用法 word_unsigned データ型 word (unsigned) アクセス write only 受け渡し方 by reference
選択されるメニュー項目の指定番号。 selected-choice-number 引数はこの番号を受け付ける符号なしワードのアドレスです。 selected-choice-number 引数は,SMG$CREATE_MENU ルーチン内の 静的配列内のメニュー項目の索引に対応します。default-choice-number
OpenVMS 用法 word_unsigned データ型 word (unsigned) アクセス read only 受け渡し方 by reference
省略時のメニュー項目の指定番号(省略可能)。 default-choice-number 引数は省略時のメニュー項目の番号を格納する符号なしワードのアドレスです。 default-choice-number 引数は,SMG$CREATE_MENU ルーチン内の静的配列内のメニュー項目の索引に対応します。この引数が省略された場合の選択は,すでに選択された項目中の最後のメニュー項目になります。何も選択されていなかった場合には,メニューの中の最初の項目が選択されます。flags
OpenVMS 用法 mask_longword データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
選択された時の動作を指示するビットマスク(省略可能)。 flags 引数は,フラグを格納した符号なしロングワードのアドレスです。この引数に対して指定できる値は次のとおりです。
SMG$M_RETURN_IMMED 矢印キー以外のキーが入力されたときに,コントロールをユーザに戻します。 SMG$M_REMOVE_ITEM SMG$SELECT_FROM_MENUルーチンによって各々のメニュー項目が一度のみ選択されるようにします。
help-library
OpenVMS 用法 char_string データ型 character string アクセス read only 受け渡し方 by descriptor
[PF2] / [HELP]が入力された場合のヘルプ・ライブラリ(省略可能)。 help-library 引数は,このヘルプ・ライブラリを示すディスクリプタのアドレスです。この引数は,flags 引数がSMG$M_RETURN_IMMED を指定した場合には,無視されるので注意してください。省略時の設定値は,SYS$HELP:HELPLIB.HLB です。timeout
OpenVMS 用法 longword_signed データ型 longword (signed) アクセス read only 受け渡し方 by reference
時間切れの値(省略可能)。 timeout 引数は,選択が決定されるまでにかかる秒数を指定する符号付きロングワードのアドレスです。word-terminator-code
OpenVMS 用法 word_unsigned データ型 word (unsigned) アクセス write only 受け渡し方 by reference
word-terminator-code 引数は,どの文字またはどのキーが読み込み操作を終了したかを示すコードが書き込まれる符号なしワードのアドレスです(省略可能)。selected-choice-string
OpenVMS 用法 char_string データ型 character string アクセス write only 受け渡し方 by descriptor
選択されたメニュー項目のテキストを受け取る文字列(省略可能)。 selected-choice-string 引数は,この文字列を示すディスクリプタのアドレスです。rendition-set
OpenVMS 用法 mask_longword データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
属性指定子。rendition-set 引数は省略可能で,ロングワード・ビット・マスクのアドレスです。この引数で指定する属性が,仮想ディスプレイ上に設定されます。この引数に対して指定できる値は次のとおりです。
SMG$M_BLINK 点滅する文字を表示します。 SMG$M_BOLD 通常より明るい輝度の文字を表示します。 SMG$M_REVERSE 文字を反転表示します。つまり仮想ディスプレイの現在の省略時属性とは逆の状態で表示します。 SMG$M_UNDERLINE 下線を付けた文字を表示します。 SMG$M_USER1 から SMG$M_USER8 ユーザ定義属性を表示します。
rendition-complement
OpenVMS 用法 mask_longword データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
属性補足指定子。rendition-complement 引数は省略可能で,ロングワード・ビット・マスクのアドレスです。この引数で指定する補足的な属性が,仮想ディスプレイ上に設定されます。rendition-set 引数で指定できる引数はすべて,rendition-complement 引数で補足指定することができます。rendition-set 引数と rendition-complement 引数はどちらも省略可能な引数であり,これらの引数を組み合わせて使用すれば,ユーザは仮想ディスプレイの属性を制御できます。rendition-set 引数は特定の仮想ディスプレイ属性を設定します。それに対し,rendition-complement 引数はこれらの属性を補足します。rendition-set 引数と rendition-complement 引数の両方に同じビットが指定されている場合には,最初に rendition-set 引数が評価され,その後, rendition-complement 引数が評価されます。これらの 2 つの引数を組み合わせて使用すれば,1 回のプロシージャ呼び出しで複数の仮想ディスプレイ属性を制御できます。各属性に対して,ユーザは次の組み合わせを指定できます。
設定 補足 動作 0 0 属性を省略時の状態に設定する。 1 0 属性をオンに設定する。 0 1 属性を省略時の状態の逆の状態に設定する。 1 1 属性をオフに設定する。
SMG$SELECT_FROM_MENU ルーチンによって,メニューの中の項目を選択することができます。SMG$CREATE_MENU ルーチンは,SMG$SELECT_FROM_MENUルーチンの前に 呼び出されなければなりません。矢印キーを使って,メニュー項目内を移動し,[Return]キーを押すことによって選択を確定することができます。[Ctrl/Z]を入力すると,現在の選択を確定し, SMG$_EOFという値が戻されます。
選択メニュー数が1画面で表示しきれない場合は,適切な矢印キーが入力されると,仮想ディスプレイがスクロールされ,表示できなかった選択メニューが見えるようになります。
現在選択されているメニューは, 反転表示され(または,指定された属性で) 物理カーソルで示されます。選択されたメニューは,selected-choice-number 引数に戻されます。さらに,flag 引数に SMG$M_REMOVE_ITEM が指定されている場合には,選択された項目は,もう一度選択することはできません。
SMG$SELECT_FROM_MENUルーチンには,flags 引数によって指定される 2つの操作モードがあります。SMG$M_RETURN_IMMED という値を設定しない場合(省略時設定)は,次のようになります。
- ユーザは,矢印キーを使って選択メニュー間を移動できます。
- 現在の項目を選択するのに使われるキーは,次のとおりです。
[RETURN]キー
[DO]キー
[SELECT]キー
[ENTER]キー- [HELP]キーまたは[PF2]キーは現在選択した項目のヘルプを出力します。
- [CTRL/W]は, SMG$REPAINT_SCREEN を呼び出して画面をリフレッシュします。
- [CTRL/Z]は現在の項目を選択し,SMG$_EOFの値を戻します。
- [PF1/↑]はメニューの中の最初の項目を選択します。
- [PF1/↓]はメニューの中の最後の項目を選択します。
- [PF1/←]は現在カーソルがある行の最初の項目を選択します。
- [PF1/→]は現在カーソルがある行の最後の項目を選択します。
- 他のすべてのキーは無視されます。
SMG$M_RETURN_IMMED の値を設定した場合は,次のようになります。
- ユーザは,矢印キーを使って選択メニュー間を移動できます。
- [CTRL/Z]は現在の項目を選択し,SMG$_EOFの値を戻します。
- その他のキーが入力された場合は,現在の項目を選択します。
(上記の)どちらの場合でも,次のキーで代用が可能です。
- [LF]キーは,[↓]キーの代わりに使用されます。
- [BACKSPACE]キーは, [←]キーの代わりに使用されます。
- [TAB]キーは,[→]キーの代わりに使用されます。
読み込み操作を終了したコード SMG$R_TRM_key-name は, word-terminator-code 引数(省略可能)に戻されます。複数の文字で構成されたメニュー項目も許可されています。メニュー項目がDEC漢字文字またはJISカタカナ文字の場合,ヘルプ機能は起動されますが,メニュー項目は情報検索に使用されません。
SS$_NORMAL 正常終了。 SMG$_EOF ファイルの最後。 SMG$_ILLBATFNC 仮想ディスプレイまたはペーストボードがバッチ処理されています。 SMG$_INVARG 引数に誤りがあります。選択できるメニュー項目がありません。 SMG$_INVDIS_ID display-id 引数に誤りがあります。メニューが含まれていません。または,ビューポートが含まれています。 SMG$_NOTPASTED 仮想ディスプレイがペーストされていません。 LIB$_xxx LIB$SCOPY から戻された状態値。 SMG$_xxxx SMG$CHANGE_RENDITION, SMG$SET_CURSOR_ABS, SMG$READ_KEYSTROKE, SMG$PUT_HELP_TEXT, SMG$SAVE_PHYSICAL_SCREEN, SMG$RESTORE_PHYSICAL_SCREENルーチンから戻された状態値。
#1 |
---|
C+ C This DEC FORTRAN example program illustrates the use of C SMG$CREATE_MENU, SMG$SELECT_FROM_MENU, and SMG$DELETE_MENU C to create an application that lets a user make multiple C selections from a horizontal menu. C- IMPLICIT INTEGER (A-Z) INCLUDE '($SMGDEF)' CHARACTER*20 c CHARACTER*20 a(20) /'One','Two','Three','This is Four','Five', 1 'Six','Seven','Eight','Nine','I like ten', 2 'Eleven','Twelve','Thirteen','Fourteen', 3 'Fifteen','Sixteen','Seventeen','Eighteen', 4 'Nineteen','Exit this menu.' / s = SMG$CREATE_PASTEBOARD(p_id) if (.not. s) call LIB$SIGNAL(%VAL(s)) s = SMG$CREATE_VIRTUAL_KEYBOARD(k_id) if (.not. s) call LIB$SIGNAL(%VAL(s)) s = SMG$CREATE_VIRTUAL_DISPLAY(6,50, d_id2, SMG$M_BORDER) if (.not. s) call LIB$SIGNAL(%VAL(s)) s = SMG$CREATE_VIRTUAL_DISPLAY(6,50, d_id, SMG$M_BORDER) if (.not. s) call LIB$SIGNAL(%VAL(s)) s = SMG$PASTE_VIRTUAL_DISPLAY(d_id2, p_id, 2,2) if (.not. s) call LIB$SIGNAL(%VAL(s)) s = SMG$PASTE_VIRTUAL_DISPLAY(d_id, p_id, 10,2) if (.not. s) call LIB$SIGNAL(%VAL(s)) s = SMG$CREATE_MENU(d_id,a,SMG$K_HORIZONTAL,,2,SMG$M_REVERSE) if (.not. s) call LIB$SIGNAL(%VAL(s)) 20 s = SMG$SELECT_FROM_MENU(k_id, d_id, n,6,,,,,C,SMG$M_BOLD,0) if (.not. s) call LIB$SIGNAL(%VAL(s)) s = SMG$PUT_LINE(d_id2,c) if (.not. s) call LIB$SIGNAL(%VAL(s)) if (n .ne. 20) goto 20 s = SMG$DELETE_MENU(d_id) if (.not. s) call LIB$SIGNAL(%VAL(s)) END |
以下の図は, この DEC FORTRAN プログラムによって生成される水平方向のメニューです。
図 8-46 では,プログラムは,省略時で選択されるものを除くすべてのメニュー項目を,反転表示します。この時点で,プログラムはユーザが選択をするのを待っています。
図 8-46 メニュー項目が選択される前に生成される出力
このメニューが作成されるときには,何も引数が指定されていなかったので,メニューの中の項目は再び選択されることができます。 図 8-47 は,ユーザが3つの項目(その中の 2つは同じ)を選択した後の画面イメージを表しています。
図 8-47 3つのメニュー選択をした後に生成された出力
図 8-48 では,ユーザは "Exit this menu"を選択し,プログラムは実行を終了しました。
図 8-48 プログラムが終了した後に生成される出力
前へ | 次へ | 目次 | 索引 |