FreeBASIC マニュアルのトップに戻る

FreeBASIC DevRtlInkey

目次→FreeBASIC のハッキング→FreeBASIC でのハッキングのための情報Keyboard Input←オリジナル・サイト

キーボード入力



基本

FB 内蔵の機能を使って、キーボード入力を得る 4 つの方法があります:


"scancode" は、多かれ少なかれ DOS キーボード・スキャンコードと一致している SC_* #defines を指します。
値は構築されません。値自身は、ある ASCII 文字に相当します。例えば: SC_HOME = asc( "G" ) = &h47
これらは、同じ値で、DOS/DJGPP のもとで、あるいは、拡張キーコード・シーケンスの一部として Linux カーネルから得られる値です。
これらの、multikey()screenevent() での使用に加えて、scancode は、内部で色々なところで使われます。例えば、キーコードの使いやすい、移植表現として、キーコードの異なる種類の間で翻訳するときです。

"key" は、ASCII 文字、あるいは、その他のキー用の2バイト拡張キーコード文字列(inkey() によって返される)を指します。
rtlib は、整数の形式で、利用可能な2バイト拡張キーコードのための、いくつかの KEY_* #defines を持っています。
これらは、内部で使われ、getkey() によって返される値と一致します。

FB の2バイト拡張キーコードは、押したキーに対応する SC_* scancode 値を含むバイトが続く &hFF バイトで構成されます。
inkey() で返される SC_HOME をチェックすると、以下のように見えます:
if( inkey( ) = chr( 255 ) + "G" ) then ...
Checking for SC_HOME returned by getkey():
if( getkey() = &h47FF ) then ...
if( getkey() = ((SC_HOME shl 8) or &hFF) ) then ...

inkey()getkey()multikey() は、ラッパー関数を使います。
ラッパー関数は、関数ポインター・フックを用いて、以下を呼びます。

rtlib

各々のプラットホームのために、rtlib には、上記の関数の別々のコンソール-モード実装があります:


gfxlib2

gfxlib では、fb_GfxInkey()fb_GfxGetkey() は、異なるまたはプラットフォームに特有の gfx ドライバーが、そこにキーを記入する、キー・バッファー(すべてのプラットフォームで同じコード)を使います。
これに似て、fb_GfxMultikey() のための、一つのキーの状態テーブルがあります。また、それは gfx ドライバーによって更新されます。
しかし、gfx ドライバーが、実際にキーを記入するか、キーの状態を更新するかどうかは、ドライバーしだいです。


FreeBASIC の開発者用情報 に戻る
目次に戻る
ページ歴史:2023-11-05 09:57:20
日本語翻訳:WATANABE Makoto、原文著作者:DkLwikki

ホームページのトップに戻る

表示-非営利-継承