こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VB6.0でタイピングゲームを作りたい

VB6.0でタイピングゲームを作る事は可能でしょうか?
もし可能であれば、ボタンをキー配列分用意しないといけませんが、押すキー(アルファベット)によって、ボタンを判別させることは可能でしょうか?

例えば、ボタンを一つ用意し、以下のプログラムでアルファベットのAが押された時に通るようにしたい場合はどうすればよいのでしょうか?

Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)

End Sub

投稿日時 - 2004-03-16 14:36:01

QNo.807209

暇なときに回答ください

質問者が選んだベストアンサー

VB6.0、5.0の
コマンドボタン、
オプションボタン、
コンボボックスなど、
VB標準のOCX(コントロール)は
KeyDown,KeyPress,KeyUpイベントにバグ?
があります。
実際、
それぞれのイベントが呼び出されないです。
Picturebox+Labelで
画面を表示し、
Private Sub Form_KeyPress(KeyAscii As Integer)
Dim intX1 As Integer
Dim intX2 As Integer
Dim intX3 As Integer
Dim intX4 As Integer
intX1 = Instr(1, _
"1234567890-^\", _
Ucase$(Chr$(KeyAscii)), _
vbTextCompare)

intX2 = Instr(1, _
"QWERTYUIOP@[", _
Ucase$(Chr$(KeyAscii)), _
vbTextCompare)

intX3 = Instr(1, _
"ASDFGHJKL;:]", _
Ucase$(Chr$(KeyAscii)), _
vbTextCompare)

intX4 = Instr(1, _
"ZXCVBNM,./", _
Ucase$(Chr$(KeyAscii)), _
vbTextCompare)

If intX1 > 0 Then
MsgBox "1行目の左から" & _
Format$(intX) & _
"個目のキーが押されました。", vbOkOnly
End If
If intX2 > 0 Then
MsgBox "2行目の左から" & _
Format$(intX) & _
"個目のキーが押されました。", vbOkOnly
End If
If intX3 > 0 Then
MsgBox "3行目の左から" & _
Format$(intX) & _
"個目のキーが押されました。", vbOkOnly
End If
If intX4 > 0 Then
MsgBox "4行目の左から" & _
Format$(intX) & _
"個目のキーが押されました。", vbOkOnly
End If
End Sub

というのを
ステップ実行して動きを確かめてみてはどうでしょう?

投稿日時 - 2004-03-18 01:36:12

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

Keycodeを取っているのでキーコードで判断されたらいかがですか?
そうしておけば65から91までしか受けつけないとか制御しやすいでしょう。
しかし、一番の難関は2文字同時に押した時とかローマ字カナ変換などの面倒な所でしょう。
ちなみに
A-Zまでを入力してEntを押すと掛かった秒数を表示するプログラムを1行で組んだ事があります。
頑張ってください。

投稿日時 - 2004-03-17 00:09:16

ANo.3

補足ですが,
私の場合,なるべくフォーム中に入れる「フォーカスを受け取れるオブジェクト」を極力減らすようにしています。例えば,フォーム中のフォーカスを受け取れるオブジェクトはPicturebox1個だけにして,そこにKeyDownを付ける。文字表示などはすべてLabelとかのフォーカスの受け取れないオブジェクトにする。とかです。
また,その「フォーカスを受け取れるオブジェクト」は,できればCommandButtonはやめたほうがいいです(Enterキーやスペースキーに反応してしまうからです)。

投稿日時 - 2004-03-16 16:33:38

ANo.2

Form上に1つコマンドボタンを貼りつけ、それをコピーしてコマンドボタンを増やす。2つ目の時に、コントロール配列にしますかと聞いてくるので「はい」。
コマンドボタンの各Captionを「a,b,c,d・・・」と設定する。
最初のコマンドボタンをダブルクリックして
Private Sub Command1_Click(Index As Integer)
s = Array("a", "b", "c", "d")
MsgBox s(Index)
End Sub
とする。
Form上の「a」のボタンをクリックすると「a」と表示できる。
参考になれば。

投稿日時 - 2004-03-16 15:15:15

ANo.1

Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)
'Aだったら
If KeyCode = vbKeyA Then
'主処理
End If
End Sub

となりますかね。(^^)
でもこれだと コマンドボタンの上にフォーカスが来ているときじゃないと反応しないのでタイピングを作成するなら Form_KeyDown のほうが良いかもしれません。

投稿日時 - 2004-03-16 14:57:19

あなたにオススメの質問