イベント駆動型と無限ループ型

イベント駆動型プログラム
イベントが発生したときだけ処理

無限ループ型プログラム
無限ループ内で,
時間経過の処理
キー入力の処理
その他の処理
→アクションゲームなどに向いている
今回のプログラムの特徴
時間の経過を調べるAPI関数の使用
 キーの入力を監視するAPI関数の使用
 無限ループ型のプログラム

代表的なデータの型
データ型
範囲
ブール型
Boolean 真 (True) または偽 (False)
Trueは0以外,Falseは0
整数型
Integer -32768 ~ 32767の範囲の整数
長整数型
Long
-2,147,483,648 ~ 2,147,483,647の範囲の整数
単精度浮動
小数点数型
Single
負の値
正の値
約-3.4×1038 ~約-1.4×10-45
約1.4×10-45 ~ 約3.4×1038
倍精度浮動
小数点数型
Double
負の値
正の値
約-1.8×10308 ~約-4.9×10-324
約4.9×10-324 ~ 約1.8×10308
文字列型
String
約 2ギガバイトまでの文字を格納できる変数
バリアント型
Variant 約 2ギガバイトまでのあらゆる種類のデータを
格納できる変数
API関数とは






アプリケーション プログラミング インターフェイス
(Application Programming Interface)
Windowsが備えているさまざまな機能を使うことが
できる
処理速度の高速化
プログラミングの自由度が増す
プログラミングが複雑
エラーを起こすとフリーズすることがある
API関数を使用するための宣言
GetAsyncKeyState関数(キー入力判定関数)
Declare Function API関数名 Lib "ファイル名" Alias "エントリー名" (引数 As 型) As 戻り値の型
①
②
③
API関数宣言の一般形
① API関数の宣言
② API関数名
③ Lib "ファイル名"
④ Alias "エントリー名"
⑤ (引数 As 型)
⑥ As 戻り値の型
④
⑤
⑥
GetAsyncKeyState関数
Declare Function
GetAsyncKeyState
Lib "User32.dll"
(ByVal vKey As Long)
As Long
GetAsyncKeyState関数
指定したキーが押されているかどうかを判定
GetAsyncKeyState(引数KeyCode)
キーコードの例
戻り値
・キーが押されている場合
0以外の数値になる
・キーが押されていない場合
0になる
定数
値
キーの種類
vbKeyEscape
27
Escキー
vbKeyReturn
13
Enterキー
vbKeyLeft
37
←キー
vbKeyUp
38
↑キー
vbKeyRight
39
→キー
vbKeyDown
40
↓キー
API関数を使用するための宣言
GetTickCount関数(起動後経過時間取得関数)
Declare Function API関数名 Lib "ファイル名" Alias "エントリー名" (引数 As 型) As 戻り値の型
①
②
③
API関数宣言の一般形
① API関数の宣言
② API関数名
③ Lib "ファイル名"
④ Alias "エントリー名"
⑤ (引数 As 型)
⑥ As 戻り値の型
④
⑤
⑥
GetTickCount関数
Declare Function
GetTickCount
Lib "kernel32.dll"
()
As Long
GetTickCount関数
Windowsが起動してからの経過時刻を、ミリ秒(ms)単位で取得する
GetTickCount()
引数はない
戻り値
システムを起動した後の経過
時刻が、ミリ秒単位で得られる
変数Flag

True
指定したキーが押された場合

False
指定したキーが押されない場合
一定時間ごとに処理を実行させる方法
(15) Flag = False
(16) Do While Flag = False
(17) StartTime = GetTickCount
(18) Interval (一定時間ごとに実行させる処理)
(19) Do While GetTickCount - StartTime < IntervalTime
(20)
KeyState (キーの入力を調べる処理)
(21)
DoEvents
(22) Loop
(23) Loop
一定時間ごとに処理を実行させる方法
(15) Flag = False
(16) Do While Flag = False
(17) StartTime = GetTickCount
(18) Interval (一定時間ごとに実行させる処理)
(19) Do While GetTickCount - StartTime < IntervalTime
(20)
KeyState (キーの入力を調べる処理)
(21)
DoEvents
(22) Loop
(23) Loop
(17)の時点の時刻をStartTimeに代入
(15) Flag = False
(16) Do While Flag = False
(17) StartTime = GetTickCount
例:300000
(18) Interval (一定時間ごとに実行させる処理)
(19) Do While GetTickCount - StartTime < IntervalTime
(20)
KeyState (キーの入力を調べる処理)
(21)
DoEvents
(22) Loop
(23) Loop
(19)の時点の時刻と(17)の時点の時刻の差が
インターバルタイムより小さい場合
条件成立で
(15) Flag = False
(19)~(22)の
(16) Do While Flag = False
無限ループ
を繰り返す
(17) StartTime = GetTickCount
(18) Interval (一定時間ごとに実行させる処理)
(19) Do While GetTickCount - StartTime < IntervalTime
例: 300000
300000
100
(20)
KeyState (キーの入力を調べる処理)
(21)
DoEvents
(22) Loop
(23) Loop
(19)の時点の時刻と(17)の時点の時刻の差が
インターバルタイムより小さい場合
条件成立で
(19)~(22)の
無限ループ
を繰り返す
(15) Flag = False
(16) Do While Flag = False
(17) StartTime = GetTickCount
(18) Interval (一定時間ごとに実行させる処理)
(19) Do While GetTickCount - StartTime < IntervalTime
例: 300010
300000
100
(20)
KeyState (キーの入力を調べる処理)
(21)
DoEvents
(22) Loop
(23) Loop
(19)の時点の時刻と(17)の時点の時刻の差が
インターバルタイムと等しい場合
条件不成立で
(19)~(22)の
無限ループを
脱出して(17)
に飛ぶ
(15) Flag = False
(16) Do While Flag = False
(17) StartTime = GetTickCount
(18) Interval (一定時間ごとに実行させる処理)
(19) Do While GetTickCount - StartTime < IntervalTime
例: 300100
300000
100
(20)
KeyState (キーの入力を調べる処理)
(21)
DoEvents
(22) Loop
(23) Loop
指定のキーが押されると処理を終了
(15) Flag = False
(16) Do While Flag = False
(17) StartTime = GetTickCount
(18) Interval (一定時間ごとに実行させる処理)
(19) Do While GetTickCount - StartTime < IntervalTime
(20)
KeyState (キーの入力を調べる処理)
(21)
DoEvents
(22) Loop
指定のキーが押されると,この中で
(23) Loop
Flag = Trueになり,(16)~(23)の
(24) End Sub
無限ループを脱出する
DoEventsメソッド

DoEventsを使用しないと
無限ループ内では,Excelの操作ができない

DoEventsを使用すると
無限ループ内でも,Excelの操作ができる
GetAsyncKeyState関数
指定したキーが押されているかどうかを判定
GetAsyncKeyState(引数KeyCode)
キーコードの例
戻り値
・キーが押されている場合
0以外の数値になる
・キーが押されていない場合
0になる
定数
値
キーの種類
vbKeyEscape
27
Escキー
vbKeyReturn
13
Enterキー
vbKeyLeft
37
←キー
vbKeyUp
38
↑キー
vbKeyRight
39
→キー
vbKeyDown
40
↓キー
比較演算子
=
等しい
>
より大きい(超過)
<
より小さい(未満)
>=
以上
<= 以下
<> 等しくない
Interior.ColorIndex
Cells(行番号, 列番号).Interior.ColorIndex = 色番号
セル
の 内部 の 色
値
色
XlNone
無色
1
黒
2
白
3
赤
4
緑
5
青
6
黄
7
赤紫
8
青緑
:
:
ダウンロード

キーの入力を調べる処理