(1)あるテキストボックスに「霧島」と仮名入力して漢字変換する。
(2)すると「キリシマ」と表示されると同時に、別のテキストボックスには「キリシマ」とフリガナが表示される。
(3)続けて入力したときは、さらにフリガナが後ろに付け加えられる。
…と、いったフリガナの自動表示機能をVBのテキストボックスで実現するにはどうしたらよいでしょうか。こちら(http://www.winapi-database.com/tips/15/)も良かったのですが、一度Enterキーを押すと表示部がクリアされてしまい、続けて入力したときには続けて表示されません。
http://www.winapi-database.com/tips/15/
を改修しました。
以下のようにテキストボックスを配置します。
名前も同じにしてください。
ふりがな | | txtKana | |
文字 | | txtMoji | |
| txtDummy | |
フォームの内容を以下のように記述します。
Option Explicit
Const GCS_RESULTREADSTR = &H200
Private Sub Form_Load()
Me.txtMoji.Text = ""
Me.txtKana.Text = ""
Me.txtDummy.Text = ""
Me.txtMoji.IMEMode = 1
txtDummy.Visible = False
End Sub
Private Sub txtMoji_KeyDown(KeyCode As Integer, Shift As Integer)
If Shift <> 0 Then Exit Sub
Dim hContext As Long
Dim nSize As Long
Dim A As String
Dim rc As Long
hContext = ImmGetContext(Me.hWnd)
nSize = ImmGetCompositionString(hContext, GCS_RESULTREADSTR, vbNullString, 0)
A = String(nSize, Chr(0))
rc = ImmGetCompositionString(hContext, GCS_RESULTREADSTR, A, nSize)
rc = ImmReleaseContext(Me.hWnd, hContext)
txtDummy.Text = Left(A, nSize)
End Sub
Private Sub txtDummy_Change()
txtKana.SelStart = Len(txtKana.Text)
txtKana.SelText = txtDummy.Text
txtKana.SelStart = Len(txtKana.Text)
End Sub
※標準モジュールはそのままとします。
ありがとうございます。できました。
ダミーをうまく使うのがミソのようですねー。
変数を設けて文字列を結合するようにしてみたのですが、2回同じところを通るせいか、同じフリガナが繰り返されてしまうんですよね…