Re: はじめまして。こんなことできますか?


[コメントツリー表示を見る] [発言時刻順表示を見る]

Posted by Uz on 1999/12/08 23:53:16

In Reply to: はじめまして。こんなことできますか? Posted by ゆうき on 1999/12/08 19:21:22


    > はじめまして。
    はじめまして、

    > 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を使いこなせればもっと自由が利いて楽しいですね。

    では。


記事スレッド一覧