• 締切済み

keycodeについて

現在、スクリーンキーボードを作っています。それに、予測機能も付けたいと思っています。今取り組んでいるプログラムは、テキストファイルにある程度の単語を入れておき、最初に"あ"と入力したら変数aに格納し、ピクチャーボックスに"あ"から始まる単語を表示します。次に"い"と入力したら、変数aは"あい"となるようにし、テキストファイルから"あい"から始まる単語を検索し表示するようにしたいと思っています。 keyの呼出は下のプログラムで行っています↓↓ private Sub Command1_Click() Call sSetSendKeys(vbKeyI, 0, 0) endif 予測機能のプログラムとしては、 Private Sub Form_KeyPress(KeyAscii As Integer) Dim i As Integer:Dim result As Integer a = a & Chr(KeyAscii) Picture1.Print a For i = 0 To 8 result = t(i) Like (a & "*") If result = True Then Picture1.Print t(i) End If Next i End Sub というプログラムを応用して作っていこうと考えています。教えていただきたいのは「Chr(Ascii)」の部分をvbkeyを使いたいのですが、「vbkeyA」と入れてみたら、値65が出てしまい、どのようなプログラムにすれば"あ"を表示させることが出来るでしょうか?よろしくお願いします。

みんなの回答

回答No.3

繰り返しになりますが。 IMEがONの場合、確定が押されないとVBにはその入力が反映されないとおもうのですが…。 あくまでも私の認識ですが、 *キーボードが押される→物理的にどのキーが押されたかは把握可能。 *IMEによる(かな・漢字などへの)変換→変換中の文字列は、IMEの預かり扱いになるため、確定するまでプログラムでは内容を把握できない。 *変換後の文字列をプログラム(テキストボックスなど)に送信。 「変換確定した文字列」はプログラムで把握可能。 あ。そうだ。ブラウザで文字を入力するときに、予測変換と似た感じで入力候補が出る場合がありますが、その場合も文字を確定しないと候補が出てきませんよね? 要するに、「予測変換」を行いたいのであれば、IME自体をプログラムから操作する必要があるんじゃないかと思うんですが…。

すると、全ての回答が全文表示されます。
回答No.2

えっと…確認なんですが、 「Private Sub Form_KeyPress(KeyAscii As Integer)」 を応用してとありますが、 そのプログラム、単体で動作確認できているのでしょうか?(特に日本語入力のとき) 「予測変換」については、どうやって実現するか見当もつかないので…。 IMEがONの場合、確定が押されないとVBにはその入力が反映されないとおもうのですが…。

mina5939
質問者

補足

そのプログラム単体では動きません。モジュールで、 Public Function sSetSendKeys~  Call keybd_event~ End Function Public Sub sKeyEventSet~   ~~~~~ End Sub 等をしています。日本語入力では得に何をしたかというのはなく、IMEをオンにするだけで、未確定状態の文字がテキストボックスにでるようになっています。文字が未確定のまま予測をしていきたいと思っています。なかなか伝わらなくてすみません。

すると、全ての回答が全文表示されます。
回答No.1

まず、vbKey~というのは、文字コードではなく、 「物理的なキーに対応した」コードです。なので、"A" と "a" では同じ値になります。 意味合い自体が違うので、単純に変換する仕組みはないはずです。必要なら、MSDNの「キーコード定数」とANSIコードを突き合わせて変換の関数を自作するとかするしかないのでは? ちなみに、私なら単純にこれでいくと思います。 private Sub Command1_Click() Call sSetSendKeys(vbKeyI, 0, 0) Call Form_KeyPress(Chr("I")) end if 素朴な疑問で、この「予測機能」のプログラムが日本語入力時にどう対応するのか(KeyPressイベントは"あい"じゃなく"ai"としか来ないのでは?)とかあるのですが…。

mina5939
質問者

補足

回答ありがとうございます。MSDNのキーコード定数とANSIコードを合わせて変換の関数を作るということはもう少し詳しく教えていただけないでしょうか。VBについてあまり詳しくないので、すみません。 予測についてなんですけど、プロパティでIMEModeを全角ひらがなにしているので"あい"と出ています。質問の時のプログラムは、KeyPressだったんですけど、実際はKeyDown(Keycode As Integer)となっています。言っていることがわけ分からなかったらすみません。

すると、全ての回答が全文表示されます。

関連するQ&A