投稿時間:2002/09/21(Sat) 01:13 投稿者名:NAO★
Eメール:
URL :
タイトル:コンボにIMEから日本語入力できない 【バグ報告】
【現象】 コンボボックスでオートフィル機能を実現しようとMSDNを参考に プログラムを作ったのですが、Windows XPでIMEから日本語入力しようと しても文字ができない。 Private Sub Combo1_Change() でコンボに入力された文字を調べたところ IMEからコンボに受け取った文字が後ろから渡されていた あいうえお→おえういあ
なお、オートフィル機能を利用しない場合はこの現象は起きなかった
【環境】 Windows XP VB6.0(SP5)
【原因】 調べたところ、コントロールの形状をWindows XP形式にする manifest ファイルを利用するとこの現象が起こることが判明しましたので報告します。
【対策】 manifest を利用しない (manifestファイルを削除するだけでOK)
【再現方法】 フォームにコンボコントロールを追加。 Form モジュールに記述 -----------------------------ここから 'オートフィル機能を実現する ' コンボのリスト内部を文字検索する Private Const CB_FINDSTRING = &H14C 'コンボで削除(DEL、BS)キーが押されたかどうかを調べるフラグ Private pressKey As Boolean
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _ ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ lParam As Any) As Long
Private Sub Combo1_Change() Dim iStart As Integer Dim sString As String Static iLeftOff As Integer If pressKey = True Then pressKey = False Exit Sub End If 'Combo1.SelStart の値を保持するため iStart に格納します。 iStart = Combo1.SelStart If iLeftOff <> 0 Then Combo1.SelStart = iLeftOff iStart = iLeftOff End If '入力した文字の右に文字があっても、現在入力位置で候補検索をします。 sString = CStr(Left$(Combo1.Text, iStart)) 'SendMessage は、入力した文字が候補群になかった場合、-1 を返します。 Combo1.ListIndex = SendMessage(Combo1.hwnd, CB_FINDSTRING, -1, ByVal sString)
If Combo1.ListIndex = -1 Then 'sStringには、入力した文字列が先頭から格納されています。 'iLeftOffには、入力した文字数が格納されます。 iLeftOff = Len(sString) Combo1.Text = sString End If '保持していた SelStart の値を元に戻します。 Combo1.SelStart = iStart Combo1.SelLength = Len(Combo1.Text) iLeftOff = 0 End Sub
Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyDelete Or KeyCode = vbKeyBack Then pressKey = True End If End Sub ------------------ここまで
同じディレクトリに "プログラム名.exe.manifest" というテキストファイルをつくる。 manifestファイルの中身:文字コードをUTF-8で保存:プログラム名は適時変えてください ----------------------------ここから <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.2.0" processorArchitecture="X86" name="hoehoedarkside.nao-star.test.exe" type="win32" /> <description></description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly> -------------------------ここまで
以上、デバッグでなかなか原因がつかめなかったので、ご報告まで。
|