通常,当PictureBox控件获得焦点时,会自动隐藏输入法状态窗口,如何使之不隐藏、如何在切换输入法时保留输入法状态窗口?就像TextBox那样。

解决方案 »

  1.   

    没有吧,没有隐藏啊!
    一般控件都有 IMEMode 属性中文系统只能使用 0 1 2 三个属性值0 无(缺省设置)。
      该值表明“无 IME 控制”。
      当 IMEMode 属性被设置为 0 时,可以使用 IMEStatus 函数确定当前的 IME 状态。 
    1 IME 打开。
      该数值表明 IME 已经被打开,可以输入汉字或日文字符。
      该设置仅对日文、简体汉字和繁体汉字 IME 有效。 
    2 IME 关闭。
      该模式表明 IME 被关闭,因此对象将处于英文输入模式。
      该设置仅对日文、简体汉字和繁体汉字 IME 有效。 
      

  2.   

    Form上只放一个PictureBox,然后按Ctrl+Shift键设置输入法,虽然打开了输入法,但输入法状态窗口被隐藏了,我想让它显示出来,设置IMEMode属性也无济于事。
    找了几个用PictureBox模仿TextBox的例子,但无一例外,都没有解决这个问题。请大家继续关注...
      

  3.   

    我是这么想的,不过有点问题,改改因该可以达到相似效果
    在窗体放一个picturebox
    再在这个picturebox上放一个label,设成透明,autosize
    一个textbox设成没有边界Private Sub Form_Load()
    Text1.Move Len(Label1), 0, 2, Picture1.ScaleHeight
    End SubPrivate Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Text1.Move X, 0, 2, Picture1.ScaleHeight
    End SubPrivate Sub Text1_KeyPress(KeyAscii As Integer)
    Dim str As String
    str = Chr(KeyAscii)
    Label1.Caption = Label1.Caption + str
    Text1.Text = ""
    Text1.Move Len(Label1), 0, 2, Picture1.ScaleHeight
    End Sub              ___
                 (  ">
                  )(
                 // )  [email protected]
              --//""------------
              -/------   
      

  4.   

    这样做不太好。以前我也试过另外一种方法,把Picture1的Enabled属性设为False,再用SetParent函数把它设成TextBox的子控件,然后再用LockWindowUpdate函数锁定TextBox使其不能重绘,但有时屏幕仍会出现闪烁现象。还有其它办法吗?
      

  5.   

    不知我理解的对不对,就是想把picture当成textbox使用吧?个人意见,比把textbox当成picture使用可能要困难一点
      

  6.   

    把textbox当成picture使用也很困难啊!
      

  7.   

    以前有人贴出过在picture中输入汉字的方法,参考
    '--------------------------------------------------------------
    '以下模块中
    '--------------------------------------------------------------
    Option ExplicitPrivate Declare Function CallNextHookEx Lib "user32" _
       (ByVal hHook As Long, _
        ByVal ncode As Long, _
        ByVal wParam As Long, _
        lParam As Any) As Long
        
    Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _
       (ByVal idHook As Long, _
        ByVal lpfn As Long, _
        ByVal hmod As Long, _
        ByVal dwThreadId As Long) As Long
        
    Private Declare Function UnhookWindowsHookEx Lib "user32" _
       (ByVal hHook As Long) As Long
       
    Private Declare Function GetKeyState Lib "user32" _
       (ByVal nVirtKey As Long) As Integer
       
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
       (Destination As Any, _
        Source As Any, _
        ByVal Length As Long)Private Type PKBDLLHOOKSTRUCT
        VKCode As Long
        scanCode As Long
        flags As Long
        time As Long
        dwExtraInfo As Long
    End TypePrivate Const WH_KEYBOARD_LL = 13
    Private Const HC_ACTION = 0
    Private Const WM_KEYDOWN = &H100
    Private Const VK_CONTROL = &H11
    Private Const VK_SHIFT = &H10
    Private Const VK_MULTIPLY = &H6A
    Private Const VK_ADD = &H6B
    Private Const VK_SEPARATOR = &H6C
    Private Const VK_SUBTRACT = &H6D
    Private Const VK_DECIMAL = &H6E
    Private Const VK_DIVIDE = &H6F
    Private Const VK_PRIOR = &H21
    Private Const VK_NEXT = &H22
    Private Const VK_END = &H23
    Private Const VK_HOME = &H24
    Private Const VK_LEFT = &H25
    Private Const VK_UP = &H26
    Private Const VK_DOWN = &H28
    Private Const VK_RIGHT = &H27
    Private Const VK_INSERT = &H2D
    Private Const VK_DELETE = &H2E
    Private Const VK_F1 = &H70
    Private Const VK_F12 = &H7B
    Private Const VK_NUMLOCK = &H90
    Private Const VK_NUMPAD0 = &H60
    Private Const VK_NUMPAD9 = &H69
    Private Const VK_RETURN = &HD
    Private Const VK_SPACE = &H20
    Private Const VK_TAB = &H9
    Private Const VK_ESCAPE = &H1B
    Private Const VK_BACK = &H8Private PrevHook As LongPublic Function LowLevelKeyboardProc(ByVal ncode As Long, _
                                         ByVal wParam As Long, _
                                         ByVal lParam As Long) As Long
        Dim p As PKBDLLHOOKSTRUCT
        Dim strKey As String
        
        If ncode = HC_ACTION Then
            Select Case wParam
                Case WM_KEYDOWN
                    CopyMemory p, ByVal lParam, Len(p)
                    
                    If p.VKCode > 0 And p.VKCode < &H92 Then
                        If (GetKeyState(VK_CONTROL) And &H8000) <> 0 Then
                            strKey = "{Ctrl}+"
                        End If
                        
                        If (GetKeyState(VK_SHIFT) And &H8000) <> 0 Then
                            strKey = strKey & "{Shift}+"
                        End If
                        
                        Select Case p.VKCode
                        Case VK_MULTIPLY
                            strKey = strKey & "{Multiply}"
                        Case VK_ADD
                            strKey = strKey & "{Add}"
                        Case VK_SEPARATOR
                            strKey = strKey & "{Separator}"
                        Case VK_SUBTRACT
                            strKey = strKey & "{Subtract}"
                        Case VK_DECIMAL
                            strKey = strKey & "{Decimal}"
                        Case VK_DIVIDE
                            strKey = strKey & "{Divide}"
                        Case VK_PRIOR
                            strKey = strKey & "{Prior}"
                        Case VK_NEXT
                            strKey = strKey & "{Nexe}"
                        Case VK_END
                            strKey = strKey & "{End}"
                        Case VK_HOME
                            strKey = strKey & "{Home}"
                        Case VK_LEFT
                            strKey = strKey & "{Left}"
                        Case VK_UP
                            strKey = strKey & "{Up}"
                        Case VK_DOWN
                            strKey = strKey & "{Down}"
                        Case VK_RIGHT
                            strKey = strKey & "{Right}"
                        Case VK_INSERT
                            strKey = strKey & "{Insert}"
                        Case VK_DELETE
                            strKey = strKey & "{Delete}"
                        Case VK_BACK
                            strKey = strKey & "{Back}"
                        Case VK_F1 To VK_F12
                            strKey = strKey & "F" & CStr(p.VKCode - &H70)
                        Case VK_NUMLOCK
                            strKey = strKey & "{NumLock}"
                        Case VK_NUMPAD0 To VK_NUMPAD9
                            strKey = strKey & CStr(p.VKCode - &H60)
                        Case VK_RETURN
                            strKey = strKey & "{Return}"
                        Case VK_SPACE
                            strKey = strKey & "{Space}"
                        Case VK_TAB
                            strKey = strKey & "{Tab}"
                        Case VK_ESCAPE
                            strKey = strKey & "{Escape}"
                        Case &H30 To &H39, &H41 To &H5A
                            strKey = strKey & Chr(p.VKCode)
                        Case Else
                            'do nothing
                        End Select
                        Form1.picturebox1.print strKey
                    End If
                    
                Case Else
                    'do nothing
                    
            End Select
        End If
        
        CallNextHookEx WH_KEYBOARD_LL, ncode, wParam, lParam
    End FunctionPublic Sub Hook()
        PrevHook = SetWindowsHookEx(WH_KEYBOARD_LL, _
                                    AddressOf LowLevelKeyboardProc, _
                                    App.hInstance, _
                                    0)
    End SubPublic Sub ReleaseHook()
        Call UnhookWindowsHookEx(PrevHook)
    End Sub
    '--------------------------------------------------------------
    '以下在窗体中(窗体中放一个picturebox)
    '--------------------------------------------------------------
    Private Sub Form_Load()
        Call Hook
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        Call ReleaseHook
    End Sub
      

  8.   

    把picturebox1中去掉box后好了!无法输入汉字 imemode也没用!
      

  9.   

    输入汉字不是问题,我只要显示输入法状态窗口而已,如果我没弄错,在VB版还是我第一次用了PKBDLLHOOKSTRUCT写例程。>> 在P里放一T,T隐藏,接受后清除,程序绘制在P上。
    这种做法不是我想要的,我自己做了一个表格控件,现在就是想要实现象Excel那样的效果,表格客户区并不是TextBox,但仍可显示输入法状态。