- - PR -
テキストボックスに入力された平仮名を漢字へ変換
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-03-05 18:20
現在、キーボードを使用せずに独自の入力パッドを作成し、
ペンを使って文字を入力する方法を検討しています。 (WinXP TabletPC Edition) そこで問題になるのが、漢字の入力なのですが、 テキストボックスに入力された平仮名を漢字へ変換する方法で つまずいています。 「imm32.dll」を使って出来ると思っているのですが、 全然上手く行きません。 誰かこの様なことをされた方や、サンプル等が配布されているサイトを ご存知でしたら、具体的にどのようにコーディングすれば良いか 教えていただけますでしょうか? よろしくお願いします。 |
|
投稿日時: 2003-03-05 22:28
どのようにうまく行かないのか不明ですが、通常のWindowsXPの場合、imm32.dllの以下の関数を順番に呼び出すだけです。
ImmGetContext ImmSetCompositionString ImmReleaseContext サンプルに関しては、サーチエンジンで「imm32 変換」で調べればVC++、VB6のコードがそれなりに出てくるはずです。 |
|
投稿日時: 2003-03-07 11:31
返信ありがとうござます。
immSetCompositionStringが正常の時には0以外の値を返すはずなのですが、 0が返ってしまいます。(ソースは以下の通り) インターネットでもしらべてみたのですが、結局分かりませんでした。 何か良い方法は無いでしょうか? Private Sub Command1_Click() '同じフォームにあるText1に入力した平仮名を漢字変換します。 '(最終的には変換の候補リストを取得したい) Dim hwnd As Long Dim strInput As String Dim intInputLn As Integer Debug.Print "Me.Text1.hwnd = " & Me.Text1.hwnd hwnd = ImmGetContext(Me.Text1.hwnd) strInput = Me.Text1.Text intInputLn = LenB(StrConv(strInput, vbFromUnicode)) Debug.Print "hwnd = " & hwnd Debug.Print "strInput = " & strInput Debug.Print "intInputLn = " & intInputLn Debug.Print "SCS_SETSTR = " & SCS_SETSTR Debug.Print "ImmSetCompositionString = " & ImmSetCompositionString(hwnd, SCS_SETSTR, strInput, intInputLn, vbNullString, 0) Debug.Print "ImmNotifyIME1 = " & ImmNotifyIME(hwnd, NI_COMPOSITIONSTR, CPS_CONVERT, 0) '変換実行 Debug.Print "ImmNotifyIME2 = " & ImmNotifyIME(hwnd, NI_OPENCANDIDATE, 0, 0) '変換候補リスト表示 Debug.Print "ImmReleaseContext = " & ImmReleaseContext(Me.Text1.hwnd, hwnd) End Sub |
|
投稿日時: 2003-03-07 13:46
> immSetCompositionStringが正常の時には0以外の値を返すはずなのですが、
> 0が返ってしまいます。(ソースは以下の通り) 私のコードはPanelのサブクラスでATOK12を使っていますが、成功しています。ただし、他の環境については知りません。 その上で気になった点をいくつか挙げます。 1. IMEのモードがONになっていないと0を返す。 ImeMode = ImeMode.On; 2. ImmGetContextで取得するハンドルはIntPtr型に入れるべきのはず。 3. 全角文字は2文字扱いのはず。ちなみにImmSetCompositionStringでの型はUInt32。 4. SCS_SETSTRの値は 0x0001|0x0008 。 5. 私のコードではImmSetCompositionStringで文字列を指定する際にStringではなく、System.Text.StringBuilderを使用している。 6. ATOK12では、Updateモジュールを入れないとうまく動作しなかった。 以上 [ メッセージ編集済み 編集者: 二天 編集日時 2003-03-07 16:30 ] |
1