• ベストアンサー

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

VB6.0でタイピングゲームを作る事は可能でしょうか? もし可能であれば、ボタンをキー配列分用意しないといけませんが、押すキー(アルファベット)によって、ボタンを判別させることは可能でしょうか? 例えば、ボタンを一つ用意し、以下のプログラムでアルファベットのAが押された時に通るようにしたい場合はどうすればよいのでしょうか? Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer) End Sub

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

  • ベストアンサー
  • kakusuke
  • ベストアンサー率36% (95/259)
回答No.5

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 というのを ステップ実行して動きを確かめてみてはどうでしょう?

その他の回答 (4)

  • tak2003
  • ベストアンサー率32% (174/540)
回答No.4

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

  • www15
  • ベストアンサー率54% (6/11)
回答No.3

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

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.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」と表示できる。 参考になれば。

  • guruguru2
  • ベストアンサー率29% (39/132)
回答No.1

Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer) 'Aだったら If KeyCode = vbKeyA Then '主処理 End If End Sub となりますかね。(^^) でもこれだと コマンドボタンの上にフォーカスが来ているときじゃないと反応しないのでタイピングを作成するなら Form_KeyDown のほうが良いかもしれません。

関連するQ&A

  • VB6.0 KeyDownイベントの対応

    VB6.0を使ってプログラム中ですが、下記の  Command10_KeyDown で、複合キー「 Ctrl + ↓」 だとイベント KeyDown を受信できるのですが、単純な キー「↓」だと、イベント KeyDown を受信でず、他のボタンにフォーカスが移ってしまいます。 Comman10_GotFocus に何か対応策を入れて、単純な キー「↓」のイベント KeyDown を受信する方法はないでしょうか? Private Sub Command10_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 40 Then execsub001() End If End Sub Private Sub Commnad10_Click() execsub001() End Sub Private Sub Comman10_GotFocus() 上記問題への対応策を此処に記述したい End If Private Sub execsub110() 内容は省略 End Sub

  • access2003 KeyDown の意味

    access2003です。 あるフォームのイベントプロシジャーの中に     Private sub btn_×_KeyDown(KeyCode As Integer, Shift As Integer) というのがありました。 この「 KeyDown」というのは、どういう操作が行われたときに実行されるのでしょうか。 「btn_×」というボタンにフォーカスがあるときにEnterキーが押されたときと思って いいのでしょうか。 よろしくお願いします。

  • エクセルBVAのフォーム式のKeyCode~の意味がわかりません

    エクセルBVAです Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyDown Then KeyCode = 0 End If End Sub ヘルプをみると キーを押したとき、およびキーを離したときに続いて発生します。KeyDown イベントはキーを押すと発生し、KeyUp イベントはキーを離すと発生します。 キーってenterのことですかね? なら、 If KeyCode = vbKeyDown Then KeyCode = 0 End If で、KeyCodeを0ににするってどういうことでしょうか?

  • Keydownイベントについて

    VB6.0について質問です。 FormでKeydownイベントが動きません。 どのような原因が考えられますか? コードは以下のように記述しています。 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case vbKeyF8 cmd_F8.Value = True Case vbKeyF9 cmd_close.Value = True End Select End Sub

  • ExcelのVBでタイピングゲームもどきを製作中なのですが・・・

    はじめまして。 ExcelのVBでタイピングゲームもどきを作っているのですが、 どうしてもうまくできません。 いろいろ調べたのですが、解決できませんでした。 まだ途中なのですがこれができないと先に勧めません。 Sheet2からランダムに文章を選び表示し、 入力した文字が正しければ文字を下のテキストボックスに 落していくみたいな感じに作ろうとしています。 解決方法、直したほうがいいとこがりましたら回答のほう お願いします。 まるまるプログラムを変えたほうがいいような感じのときは どのようなプログラムにしたらいいのかお願いします。 Private Sub CommandButton1_Click() Dim n As Long Dim k As Long Dim L As Variant Dim X As Long Dim O As Variant Dim WrkRow As Long Dim WrkCol As Long Dim WrkRange As Variant With Sheets("Sheet2") WrkRow = .Cells(Rows.Count, 1).End(xlUp).Row WrkCol = .Cells(1, Columns.Count).End(xlToLeft).Column WrkRange = .Range("A1").Resize(WrkRow, WrkCol) End With L = "" TextBox1 = "" Randomize n = Int(Rnd() * 10) k = n + 1 TextBox1 = WrkRange(k, 1) TextBox2 = WrkRange(k, 2) O = k L = WrkRange(k, 2) X = 0 End Sub Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _ ByVal shift As Integer) If X > 6 Then Exit Sub KC = KeyCode If Chr(KC) = X Then X = X + 1 TextBox2 = Right(L, 7 - X) TextBox3 = Left(L, X) End If End Sub

  • VB2008でPictureBoxをキーボードを使って動かしたい

    VBを始めたばかりの初心者です。 VB2008を使ってPictureBoxに取り込んだイラストをキーボードを使って自由に動かしたいと思っています。 今作ったものの問題点 1.現状、全く同時に→と↑のキーを押せば右上に動きます。  また、→キーを押してイラストが右に動いているときに、↑キーを押すと上に動きます。  これを右上に動くようにする方法が知りたいのです。 2.キーを押し続けてイラストを動かし続けようとすると、一回動いて止まってから動き続けるという風になってしまいます。  これを止まらずに動くようにしたいのです。 ちなみにこれ↓が今のソースコードです。 Public Class Form1 Private Sub form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Up Then PictureBox1.Top = PictureBox1.Top - 10 End If End Sub Private Sub form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Down Then PictureBox1.Top = PictureBox1.Top + 10 End If End Sub Private Sub form1_KeyLeft(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Left Then PictureBox1.Left = PictureBox1.Left - 10 End If End Sub Private Sub form1_KeyRight(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Right Then PictureBox1.Left = PictureBox1.Left + 10 End If End Sub End Class これ↑を実行する場合は、デザインにPictureBoxを表示してください。PictureBoxに入れるイラストは適当なものを入れてください。 よろしくお願いします。

  • 新規レコードへ移動しない

    Access2010を使用しています。 サブフォームからメインフォームの「登録」ボタンプロシージャをCallした時、メイン・サブフォーム共に新規レコードへ移動しなくて困っています。 具体的には、サブフォームにフォーカスがある時に「F12」を押すと画面の入力項目の内容刃そのままでメインフォームの「注文番号」テキストボックスにフォーカスが移動します。 メインフォームにフォーカスがあるか、マウスで「F12」をクリックすると画面の入力項目がクリアされて新規レコードへ移動します。 コードは以下の内容が記述してあります。 ーーーーーサブフォーム----- Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case 123 Call Me.Parent.Form_KeyDown(KeyCode, Shift) KeyCode = 0 End Select End Sub -----メインフォーム----- Public Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case 123 Call 登録_Click KeyCode = 0 End Select End Sub Private Sub 登録_Click() DoCmd.GoToRecord , , acNewRec Me.注文番号.SetFocus End Sub

  • VB6 Form内のDragDrop

    VB6でForm内にCommandButtonがいくつか有ります。 各CommandButtonはClickするとShellオブジェクトでファイルを開く様になっています。 やりたいことは 2つのCommandButton間をDragDrop?によりCaptionを入れ替えたいです。 (CommandButton間をマウスDragDropでCaption名入れ替え) MouseDownとDragDropイベントで何とかなると思いましたがうまくいきません。 Dim dd As Integer Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbLeftButton Then dd = 1 'CommandボタンNo, End If End Sub Private Sub Command2_DragDrop(Source As Control, X As Single, Y As Single) Dim cn As String cn = Command2.Caption Command2.Caption = Controls("Command" & dd).Caption Controls("Command" & dd).Caption = cn End Sub CommandButtonプロパティでDragModeを自動にするとShellオブジェクトでファイルが開かないし サイトで調べたところファイルの移動やコマンド自体の移動などで分かりませんでした。 ご教授お願い致します。

  • 特定のキーを入力すると、visible=falseからtrueになるよ

    特定のキーを入力すると、visible=falseからtrueになるようにコーディングしたいのですがうまくいきません。次のようにalt+F12でFrameを表示させたいのですが全く反応しません。何故でしょう。 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case vbKeyF12 If Shift = vbAltMask Then Frame2.Visible = True End If End Select End Sub アドバイス願いますm(_ _)m

  • ファンクションキーで命令を実行させたい

    よろしくお願いします。 ACCESS2000を使用しています。 ファンクションキーで命令を実行したく、下記のコマンドを書いて実行しましたが動作しません。 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Me.メインsub.Form.SetFocus Select Case KeyCode Case vbKeyF5 Me.btn帰社.SetFocus Call btn帰社_Click Case Else KeyCode = 0 End Select End Sub Private Sub Form_Load() Me.KeyPreview = True End Sub フォームプロパティのキーボードイベント取得は「はい」で設定してあります。 2週間位、いろいろやってみましたがうまくいきません。はまっています。回答・ヒントをよろしくお願いします。

専門家に質問してみよう