PASSDIRKEYSQQ

QuickWin 関数:QuickWin アプリケーションの矢印キーとページ・キーの動作を決定します。

モジュールUSE DFLIB

形式

result = PASSDIRKEYSQQ (val)

val
(入力) INTEGER(4) または LOGICAL(4)

val.TRUE. にすると,矢印キーとページ・キーは通常の文字として入力されます(PassDirKeys フラグがオンになっています)。val.FALSE. にすると,矢印キーとページ・キーはスクロールのために使用されます。

以下の定数 (\DF98\INCLUDE サブディレクトリの DFLIB.F90 で定義) は,整数引数として使うことができます。

結果

結果は PassDirKeys フラグの以前の設定です。

結果の型は val のデータ型と同じです。つまり,INTEGER(4) または LOGICAL(4) のいずれかです。

PassDirKeys フラグがオンである時,矢印キーとページ・キーが通常の入力文字として取り扱われるため,マウスをスクロールに使わなければなりません。

PASSDIRKEYSQQ 関数は,GETCHARQQ および INCHARQQ 関数と主として一緒に使うように設計されています。プログラムが矢印キーやページ・キーを解釈する機能を持っているとしても,PassDirKeys フラグをオンにして,通常の入力文 (たとえば,READ) を使わないようにしてください。

互換性

STANDARD GRAPHICS QUICKWIN GRAPHICS LIB

関連情報

GETCHARQQINCHARQQ

	! 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 Y  to exit, or any other char  to continue."
		 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
	   end