
現在、スクリーンキーボードを作っています。それに、予測機能も付けたいと思っています。今取り組んでいるプログラムは、テキストファイルにある程度の単語を入れておき、最初に"あ"と入力したら変数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が出てしまい、どのようなプログラムにすれば"あ"を表示させることが出来るでしょうか?よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
繰り返しになりますが。
IMEがONの場合、確定が押されないとVBにはその入力が反映されないとおもうのですが…。
あくまでも私の認識ですが、
*キーボードが押される→物理的にどのキーが押されたかは把握可能。
*IMEによる(かな・漢字などへの)変換→変換中の文字列は、IMEの預かり扱いになるため、確定するまでプログラムでは内容を把握できない。
*変換後の文字列をプログラム(テキストボックスなど)に送信。
「変換確定した文字列」はプログラムで把握可能。
あ。そうだ。ブラウザで文字を入力するときに、予測変換と似た感じで入力候補が出る場合がありますが、その場合も文字を確定しないと候補が出てきませんよね?
要するに、「予測変換」を行いたいのであれば、IME自体をプログラムから操作する必要があるんじゃないかと思うんですが…。
No.2
- 回答日時:
えっと…確認なんですが、
「Private Sub Form_KeyPress(KeyAscii As Integer)」
を応用してとありますが、
そのプログラム、単体で動作確認できているのでしょうか?(特に日本語入力のとき)
「予測変換」については、どうやって実現するか見当もつかないので…。
IMEがONの場合、確定が押されないとVBにはその入力が反映されないとおもうのですが…。
この回答への補足
そのプログラム単体では動きません。モジュールで、
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"としか来ないのでは?)とかあるのですが…。
この回答への補足
回答ありがとうございます。MSDNのキーコード定数とANSIコードを合わせて変換の関数を作るということはもう少し詳しく教えていただけないでしょうか。VBについてあまり詳しくないので、すみません。
予測についてなんですけど、プロパティでIMEModeを全角ひらがなにしているので"あい"と出ています。質問の時のプログラムは、KeyPressだったんですけど、実際はKeyDown(Keycode As Integer)となっています。言っていることがわけ分からなかったらすみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) vbaの計算 if elseと範囲について 6 2022/11/26 01:49
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
分を時間に変換するプログラム
-
家電製品の電力周波数を変える機械
-
Mac 乗数の入力方法
-
VB.NETをJavaに変換するツール...
-
tex 郵便記号のだしかた
-
3のつく数字と3の倍数のみを表...
-
ShijtJIS -> UTF-8 変換スピー...
-
10進数をBCDに変換する方法
-
VC++2005 CStringをshortに変換
-
なぜ通信には16進数文字列が使...
-
FortranをC++(VC++)へ変換
-
「変換不可」の正しい英語表現
-
StrConvの使い方について教えて...
-
COBOLで管理しているデータをEx...
-
Km2NetのUSB-IO、USB-Anを用い...
-
ActiveXの使い方を教えてくださ...
-
変換ソフトについて
-
keycodeについて
-
bmp→jpgに、jpg→bmpに
-
C#で漢字→ローマ字を変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
家電製品の電力周波数を変える機械
-
エクセルVBAの自動変換機能?
-
緯度、経度の 10進法と 60進法...
-
Mac 乗数の入力方法
-
C/C++→JAVAに変換するツール
-
なぜ通信には16進数文字列が使...
-
VB6からVB2010への変換について
-
10進数をBCDに変換する方法
-
画像ファイル変換(Tiff→PDF)
-
エクセルのvbaで検索ボタンを作る
-
分を時間に変換するプログラム
-
StrConvの使い方について教えて...
-
三角形を逆三角形にしたいです...
-
逆コンパイルと逆アセンブルの...
-
VB.NETをJavaに変換するツール...
-
UTF8→ShiftJISに変換したいです!
-
FortranをC++(VC++)へ変換
-
3のつく数字と3の倍数のみを表...
-
c++でmatからvectorへの変換の...
-
C#でのpngからbmpへの変換について
おすすめ情報