FreeBASIC Screenevent
目次→描画ライブラリー参考→描画画面関連→SCREENEVENT←オリジナル・サイト
システム事象を質問して、検索します。
構文:
用法:
result = ScreenEvent( [ event ] )
パラメタ:
event
関数が事象データを格納するためのバッファを指定します。
戻り値:
検索されるべき未決の事象がある場合には、-1 が戻ります。そうでなければ、0 です。
記述:
この関数は、内部の GfxLib 事象(イベント)待ち行列から、最新の利用可能なシステム事象を返します。
「事象(出来事・イベント)」とは、例えば、マウスやキーボードの何かの状況を意味します。
イベントデータ(利用可能なら)は、
Event として宣言された指定されたバッファーにコピーされます。
Event のページで、イベント型のリストと、関連する項目の使用方法を確認してください(以下の例も参照してください)。
事象のための質問
関数は、検索されるべき未定の事象があれば
-1 を返します。そうでなければ
0 を返します。
event パラメタが
0 に設定される(省略時のデフォルト)なら、
ScreenEvent は、イベントデータをコピーできないで、それは内部のイベント待ち行列からそれを待機解除しないでしょう。
この関数を呼ぶ、この方法は、未定の事象が、実際にそれらをとって来ずに、あるかをどうかをチェックするために、役に立ちます。
注意
KEY_PRESS、KEY_RELEASE または KEY_REPEAT イベントを受け取ると、それは、キーボード・バッファをクリアしていません。
イベントを受けたあと、バッファを消去したいならば、手動で消去する必要があります。
Inkey を参照下さい。
例:
注:FreeBASIC 1.08〜 で、SetEnviron を追加しなくても、日本語環境で描画画面が表示されるように改善されました。
' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")
'' いくつかの有用な定義のために、fbgfx.bi を含めます
#include
"fbgfx.bi"
#if
__FB_LANG__ =
"fb"
Using fb
'' 定数と構造は、lang fb の FB名前空間に格納されます。
#endif
Dim e
As EVENT
ScreenRes 640,
480
Do
If (ScreenEvent(@e
)) Then
Select Case e.type
Case EVENT_KEY_PRESS
If (e.scancode = SC_ESCAPE
) Then'' Esc キーを押すと、終了します
End
End If
If (e.ascii >
0) Then
Print "'" & e.ascii &
"'";
Else
Print "unknown key";
End If
Print " was pressed (scancode " & e.scancode &
")"
Case EVENT_KEY_RELEASE
If (e.ascii >
0) Then
Print "'" & e.ascii &
"'";
Else
Print "unknown key";
End If
Print " was released (scancode " & e.scancode &
")"
Case EVENT_KEY_REPEAT
If (e.ascii >
0) Then
Print "'" & e.ascii &
"'";
Else
Print "unknown key";
End If
Print " is being repeated (scancode " & e.scancode &
")"
Case EVENT_MOUSE_MOVE
Print "mouse moved to " & e.x &
"," & e.y &
" (delta " & e.dx &
"," & e.dy &
")"
Case EVENT_MOUSE_BUTTON_PRESS
If (e.button = BUTTON_LEFT
) Then
Print "left";
ElseIf (e.button = BUTTON_RIGHT
) Then
Print "right";
Else
Print "middle";
End If
Print " button pressed"
Case EVENT_MOUSE_BUTTON_RELEASE
If (e.button = BUTTON_LEFT
) Then
Print "left";
ElseIf (e.button = BUTTON_RIGHT
) Then
Print "right";
Else
Print "middle";
End If
Print " button released"
Case EVENT_MOUSE_DOUBLE_CLICK
If (e.button = BUTTON_LEFT
) Then
Print "left";
ElseIf (e.button = BUTTON_RIGHT
) Then
Print "right";
Else
Print "middle";
End If
Print " button double clicked"
Case EVENT_MOUSE_WHEEL
Print "mouse wheel moved to position " & e.z
Case EVENT_MOUSE_ENTER
Print "mouse moved into program window"
Case EVENT_MOUSE_EXIT
Print "mouse moved out of program window"
Case EVENT_WINDOW_GOT_FOCUS
Print "program window got focus"
Case EVENT_WINDOW_LOST_FOCUS
Print "program window lost focus"
Case EVENT_WINDOW_CLOSE
End
Case EVENT_MOUSE_HWHEEL
Print "horizontal mouse wheel moved to position " & e.w
End Select
End If
Sleep 1
Loop
プラットホーム差:
-
Screenevent は、DOSバージョンでは、ウインドウに関連する事象を返しませんが、入力事象は返します。
方言差:
QBからの違い:
参照:
ページ歴史:2022-06-07 13:54:18
日本語翻訳:WATANABE Makoto、原文著作者:LilloWiki