> はじめまして。 はじめまして、
> TreeViewにフォーカスがあたっている際にIMEモードをオフ固定に > し、フォーカスが外れたらIMEモードを元の状態にしたいと思って > いるのですが、TreeViewにはIMEモードを制御するプロパティが > ありませんよね。ということはAPIで制御することになるのかなと > 思ったのですが、実際出来るものなのでしょうか? うぅっ、こんな事出きるかなぁー、と思いながら 調べて見ると、できちゃいました。(^v^)/
'****** ここから Option Explicit
Private Declare Function ImmGetContext Lib "imm32.dll" ( _ ByVal hwnd As Long _ ) As Long
Private Declare Function ImmReleaseContext Lib "imm32.dll" ( _ ByVal hwnd As Long, _ ByVal hImc As Long _ ) As Long
Private Declare Function ImmGetConversionStatus Lib "imm32.dll" ( _ ByVal hImc As Long, _ lpdw As Long, _ lpdw2 As Long _ ) As Long
Private Declare Function ImmSetConversionStatus Lib "imm32.dll" ( _ ByVal hImc As Long, _ ByVal dw1 As Long, _ ByVal dw2 As Long _ ) As Long
Private Const IME_CMODE_ALPHANUMERIC = &H0 Private Const IME_CMODE_CHARCODE = &H20 Private Const IME_CMODE_EUDC = &H200 Private Const IME_CMODE_FULLSHAPE = &H8 Private Const IME_CMODE_HANJACONVERT = &H40 Private Const IME_CMODE_KATAKANA = &H2 Private Const IME_CMODE_LANGUAGE = &H3 Private Const IME_CMODE_NATIVE = &H1 Private Const IME_CMODE_NOCONVERSION = &H100 Private Const IME_CMODE_ROMAN = &H10 Private Const IME_CMODE_SOFTKBD = &H80 Private Const IME_CMODE_SYMBOL = &H400 Private Const IME_CMODE_CHINESE = IME_CMODE_NATIVE Private Const IME_CMODE_HANGEUL = IME_CMODE_NATIVE Private Const IME_CMODE_JAPANESE = IME_CMODE_NATIVE
Private lpdw As Long Private lpdw2 As Long
Private Sub cmdExit_Click() End End Sub
Private Sub cmdIMEoff_Click() Dim hImc As Long hImc = ImmGetContext(trvTree.hwnd) lblState(1).Caption = hImc Call ImmGetConversionStatus(hImc, lpdw, lpdw2) Call ImmSetConversionStatus(hImc, 0, 0) Call ImmReleaseContext(trvTree.hwnd, hImc) End Sub
Private Sub cmdIMEon_Click() Dim hImc As Long hImc = ImmGetContext(trvTree.hwnd) lblState(1).Caption = hImc Call ImmSetConversionStatus(hImc, lpdw, lpdw2) Call ImmReleaseContext(trvTree.hwnd, hImc) End Sub
Private Sub Form_Load() Dim dwStyle As Long With trvTree Call .Nodes.Add(, , "root", "root") Call .Nodes.Add("root", tvwChild, "child1", "child1") Call .Nodes.Add("root", tvwChild, "child2", "child2") Call .Nodes.Add("root", tvwChild, "child3", "child3") Call .Nodes.Add("root", tvwChild, "child4", "child4") End With lpdw = IME_CMODE_ROMAN + IME_CMODE_FULLSHAPE + IME_CMODE_NATIVE lpdw2 = IME_CMODE_FULLSHAPE End Sub
'******* ここまで
どうでしょうか? サンプルは VBのページの載せておきましたので、 そちらを動かして見てください。
> 「Visual Basic で プログラムを 楽しもう!!」を拝見しましたが、 > APIを使えばいろんなことができるんですね。参考になります。 APIを使いこなせればもっと自由が利いて楽しいですね。
では。
|