在vsflexgrid的使用中,关于输入法的问题:第换一个单元格,都要重新启动输入法,有没有更好的方法?

解决方案 »

  1.   

    我的方法如下:Private Declare Function GetKeyboardLayoutList Lib "user32" (ByVal nBuff As Long, _
            lpList As Long) As Long
    Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" _
            (ByVal pwszKLID As String) As Long
    Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
    Private Declare Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal _
            hkl As Long, ByVal lpsz As String, ByVal uBufLen As Long) As Long
    Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As Long, ByVal _
            flags As Long) As Long
            
    Const IME_CONFIG_GENERAL = 1
    Const KLF_REORDER = &H8
    Const KLF_ACTIVATE = &H1Dim la(1 To 16) As Long           '输入法列表
    Dim ActIme As Long                '当前输入法
    Dim X%                            '当单前输入法数量Private Sub Form_Load()
       X = GetKeyboardLayoutList(32, la(1))
    end sub
    Private Sub vs1_AfterEdit(ByVal Row As Long, ByVal Col As long)     'vsflexgrid 控件存在输入问题? 以下为避免方法
    Dim colNumber As Long
    Dim i As Long
    Dim strName$
    strName = GetKeyboardLayout(0)
    ActivateKeyboardLayout la(1), 1
    For i = 1 To X
      If la(i) = strName Then Exit For
    Next i
    If i <> 1 Then ActivateKeyboardLayout la(1), 1 Else ActivateKeyboardLayout la(X), X
    ActivateKeyboardLayout la(i), i
    end Sub
      

  2.   

    可能是我没说清楚,问题是这样:比如说,我在第一行第一列用五笔输入"中国人"三个字,然后切换到第一行第二列,这里五笔输入法还在,但是当前输入法是英文,需要按ctrl+空格,这里才可以输入中文(我这两个单元格的数据类型都是默认的)
      

  3.   

    修改如下:Private Declare Function GetKeyboardLayoutList Lib "user32" (ByVal nBuff As Long, _
            lpList As Long) As Long
    Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" _
            (ByVal pwszKLID As String) As Long
    Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
    Private Declare Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal _
            hkl As Long, ByVal lpsz As String, ByVal uBufLen As Long) As Long
    Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As Long, ByVal _
            flags As Long) As Long
            
    Const IME_CONFIG_GENERAL = 1
    Const KLF_REORDER = &H8
    Const KLF_ACTIVATE = &H1Dim la(1 To 16) As Long           '输入法列表
    Dim ActIme As Long                '当前输入法
    Dim X%                            '当单前输入法数量Private Sub Form_Load()
       X = GetKeyboardLayoutList(32, la(1))
    end subPrivate Sub vs1_AfterEdit(ByVal Row As Long, ByVal Col As long)     'vsflexgrid 控件存在输入问题? 以下为避免方法
    Dim colNumber As Long
    Dim i As Long
    Dim strName$
    if col=1 then 
      ActivateKeyboardLayout la(1), 1
    else
      ActivateKeyboardLayout la(2), 2
    end if
    end Sub
      

  4.   

    还是不行,每次都是英文输入法,要按ctrl+空格才可以(单元格的数据类型为字符型)
      

  5.   

    一劳永逸的方法 自己再封装一个vsGrid,动手做一个控件然后按自己的要求修改功能。
      

  6.   

    我的方法应该可以的,在col 1时激活输入法列表1指定的输入法,col 2时激活输入法列表2指定的输入法, 不也就行了吗.我就是通过这方法解决这问题的.
      

  7.   

    关于vsflexgrid的问题?在线等待
    去那里下载这个控件,版本v.6.0或5.0 都可以。