Transcript キーの入力を調べる処理
イベント駆動型と無限ループ型 イベント駆動型プログラム イベントが発生したときだけ処理 無限ループ型プログラム 無限ループ内で, 時間経過の処理 キー入力の処理 その他の処理 →アクションゲームなどに向いている 今回のプログラムの特徴 時間の経過を調べる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 青緑 : :