QuickWin 関数:QuickWin アプリケーションの矢印キーとページ・キーの動作を決定します。
モジュール:USE DFLIB
形式
result = PASSDIRKEYSQQ (val)
val
(入力) INTEGER(4) または LOGICAL(4)。
val を .TRUE. にすると,矢印キーとページ・キーは通常の文字として入力されます(PassDirKeys フラグがオンになっています)。val を .FALSE. にすると,矢印キーとページ・キーはスクロールのために使用されます。
以下の定数 (\DF98\INCLUDE サブディレクトリの DFLIB.F90 で定義) は,整数引数として使うことができます。
PASS_DIR_FALSE - 矢印キーの特別な処理をオフにします。これらは,GETCHARQQ でプログラムに渡されません。
PASS_DIR_TRUE - 矢印キーの特別な処理をオンにします。これらは,GETCHARQQ でプログラムに渡されます。
PASS_DIR_INSDEL - INSERT と DELETE キーも GETCHARQQ でプログラムに渡されます。
PASS_DIR_CNTRLC - QuickWin アプリケーションに対してのみ必要とされます。既に CTRL+C を渡している Standard Graphics アプリケーションで使われる場合には無害です。この値は,DELETEMENUQQ を使って「EXIT」項目を「File」メニューからプログラムが削除している場合,CTRL+C が QuickWin プログラムに渡されることを許可します。この値は,矢印キー,INSERT キーおよび DELETE キーも渡します。
結果
結果は PassDirKeys フラグの以前の設定です。
結果の型は val のデータ型と同じです。つまり,INTEGER(4) または LOGICAL(4) のいずれかです。
PassDirKeys フラグがオンである時,矢印キーとページ・キーが通常の入力文字として取り扱われるため,マウスをスクロールに使わなければなりません。
PASSDIRKEYSQQ 関数は,GETCHARQQ および INCHARQQ 関数と主として一緒に使うように設計されています。プログラムが矢印キーやページ・キーを解釈する機能を持っているとしても,PassDirKeys フラグをオンにして,通常の入力文 (たとえば,READ) を使わないようにしてください。
互換性
STANDARD GRAPHICS QUICKWIN GRAPHICS LIB
関連情報
例
! QuickWin または Standard Graphics アプリケーションでビルドします。 use dflib logical*4 res character*1 ch, ch1 Print *,"Type X to exit, S to scroll, D to pass Direction keys" 123 continue ch = getcharqq( ) ! エスケープを検証します。 ! 0x00 0x?? は関数キーです。 ! 0xE0 0x?? は矢印キーです。 if (ichar(ch) .eq. 0) then ch1 = getcharqq() print *,"function key follows escape = ",ichar(ch), " ",ichar(ch1)," ",ch1 goto 123 else if (ichar(ch) .eq. 224) then ch1 = getcharqq() print *,"direction key follows escape = ",ichar(ch)," ",ichar(ch1)," ",ch1 goto 123 else print *,ichar(ch)," ",ch if(ch .eq. 'S') then res = passdirkeysqq(.false.) print *, "Entering Scroll mode ",res endif if(ch .eq. 'D') then res = passdirkeysqq(.true.) print *, "Entering Direction keys mode ",res endif if(ch .ne. 'X') go to 123 endif end
以下の例は,PASSDIRKEYSQQ の引数として整数定数を使っています。
!======================================================================= ! ! dirkeys4.for ! ! 以下の例は,CVF V6.1 以上のコンパイラが必要です。 ! !======================================================================= ! ! Compile/Load Input Line for Standard Graphics Full Screen Window ! ! f90 /libs:qwins dirkeys4.for ! ! Compile/Load Input Line for QuickWin Graphics ! ! f90 /libs:qwin dirkeys4.f90 ! ! Program to illustrate how to get almost every character ! from the keyboard in QuickWin or Standard Graphics mode. ! Comment out the deletemenu line for Standard Graphics mode. ! ! If you are doing a standard graphics application, ! control C will come in as a #03 without further ! effort. ! ! In a QuickWin application, The File menu Exit item must ! be deleted, and PassDirKeysQQ called with PASS_DIR_CNTRLC ! to get control C. ! !======================================================================= use dflib integer(4) status character*1 key1,key2,ch1 write(*,*) 'Initializing' !--これを Standard Graphics アプリケーションに行ってはいけません。 ! File メニューから Exit 項目を削除します。 status = deletemenuqq(1,3) ! CTRL+C を得ないようにします。 !--CTRL+C を含むすべてのキーをウィンドウに渡すように設定します。 status = passdirkeysqq(PASS_DIR_CNTRLC) !=============================================================== ! ! 文字を読み,印字します。 ! !=============================================================== 10 key1 = getcharqq() !--CTRL+C を最初に検証します。 if(ichar(key1) .eq. 3) then write(*,*) 'Control C Received' write(*,*) "Really want to quit?" write(*,*) "Type Yto exit, or any other char read(*,*) ch1 if(ch1.eq."y" .or. ch1.eq."Y") goto 30 goto 10 endif if(ichar(key1).eq.0) then ! 矢印キー? key2 = getcharqq() write(*,15) ichar(key1),ichar(key2),key2 15 format(1x,2i12,1x,a1,' function key') else if(ichar(key1).eq.224) then ! 矢印キー? key2 = getcharqq() write(*,16) ichar(key1),ichar(key2),key2 16 format(1x,2i12,1x,a1,' direction key') else write(*,20) key1,ichar(key1) ! 通常のキー 20 format(1x,a1,i11) endif endif go to 10 30 stop endto continue."