VB 如何取得输入法的输入状态

贝隆 2009-07-17 07:57:41
我正在做一个模拟键盘,现遇到一个问题,我在使用拼音输入法时,有时需要退格,
当我把中文输入浮动框中所有的字符都删除完毕时,如果继续点击退格键,按道理
说就该删除接受输入的文本框中的内容了,为了实现这个功能,我就必须知道中文
输入浮动框中字符的个数,但我怎么才能取得浮动框中还有几个字符呢?


希望大家给我帮助,软键盘我试着做了好久,有空就做一些,今天来了写兴趣 呵呵!
...全文
476 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
贝隆 2009-07-24
  • 打赏
  • 举报
回复
顶上去
tzwsoho 2009-07-22
  • 打赏
  • 举报
回复
我的代码就算可以也不是全局可用的。。。。只能在自己的程序上面用。。。全局的还需要修改下。。
但是如何修改我暂时还没时间仔细研究,星期六日再看下~~~
贝隆 2009-07-22
  • 打赏
  • 举报
回复
哦,拼音加加还是可以用,现在头痛的是紫光。
贝隆 2009-07-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tzwsoho 的回复:]
给LZ个代码,可以获取正在输入的拼音(就是那个浮动框的内容),先划两个文本框,一个输入文字的,叫txtSrc,另外一个显示正在输入的内容,叫txtPY,再画一个TIMER,叫tmrGetPY,然后下面是代码:

VB codeOptionExplicit'By TZWSOHOPrivateConst GCS_COMPSTRAsLong=&H8Private DeclareFunction ImmGetContext Lib"imm32.dll" (ByVal hWndAsLong)AsLongPrivate DeclareFunction ImmReleaseContext Lib"imm32.dll" (ByVal hWndAsLong, ByVal hIMCAsLong)AsLongPrivate DeclareFunction ImmGetCompositionString Lib"imm32.dll" Alias"ImmGetCompositionStringA" (ByVal hIMCAsLong, ByVal dwAsLong, ByRef lpvAs Any, ByVal dw2AsLong)AsLongPrivateSub Form_Load()
Move (Screen.Width- Width)\2, (Screen.Height- Height)\2End SubPrivateSub tmrGetPY_Timer()Dim hIMCAsLong, BufSizeAsLong, Buf()AsByte
hIMC= ImmGetContext(hWnd)
BufSize= ImmGetCompositionString(hIMC, GCS_COMPSTR, ByVal0&,0)If BufSize>0ThenReDim Buf(BufSize-1)If ImmGetCompositionString(hIMC, GCS_COMPSTR, Buf(0), BufSize)Then
txtPY.Text= StrConv(Buf, vbUnicode)EndIfEndIfCall ImmReleaseContext(hWnd, hIMC)End SubPrivateSub txtPY_GotFocus()
txtSrc.SetFocusEnd Sub

XP+智能ABC5.22测试通过!
[/Quote]

郁闷啊,紫光拼音的输入法你这个代码就不行,但拼音加加就可以。
贝隆 2009-07-21
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 veron_04 的回复:]
沉的太快了。顶上去
[/Quote]

liguicd 2009-07-21
  • 打赏
  • 举报
回复
不懂,帮顶
贝隆 2009-07-21
  • 打赏
  • 举报
回复
沉的太快了。顶上去
贝隆 2009-07-20
  • 打赏
  • 举报
回复
顶上去
贝隆 2009-07-19
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 pctgl 的回复:]
直接向接受输入法的文本框发送退格键就行了吧
用那么麻烦吗?

输入法的拼音显示框的字符也是先由文本框接收到的
[/Quote]

这个应该不对吧?!我调试的时候不是你所说的情况,输入法的状态可以由系统函数:IMEStatus取得。
PctGL 2009-07-19
  • 打赏
  • 举报
回复
我做过一点输入法的应用,我记得是,取输入法状态有个api一句就可以了
PctGL 2009-07-19
  • 打赏
  • 举报
回复
直接向接受输入法的文本框发送退格键就行了吧
用那么麻烦吗?

输入法的拼音显示框的字符也是先由文本框接收到的
贝隆 2009-07-19
  • 打赏
  • 举报
回复
谢谢,继续渴求帮助!
dingyanwei 2009-07-19
  • 打赏
  • 举报
回复
友情帮顶。
孤独剑_LPZ 2009-07-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xbin_2009 的回复:]
用个计数变量,当每个字开始输入时,记录鼠标在软键盘上的有效单击次数(若单击在a~z上加1,单击在退格键上则减1,其他键酌情处理...)
[/Quote]
我想不出还有什么好办法,只得帮顶
贝隆 2009-07-18
  • 打赏
  • 举报
回复
拜谢!!!
贝隆 2009-07-18
  • 打赏
  • 举报
回复
自己顶上去
tzwsoho 2009-07-18
  • 打赏
  • 举报
回复
哦。。还有一点忘记了。。。我的TIMER INTERVAL属性是10。。。其实我估计用子类化可能效果更好~~~~
嘻嘻。。。这个东东貌似配合下一些KB Recorder能做个XE的东东。。。。。
tzwsoho 2009-07-18
  • 打赏
  • 举报
回复
给LZ个代码,可以获取正在输入的拼音(就是那个浮动框的内容),先划两个文本框,一个输入文字的,叫txtSrc,另外一个显示正在输入的内容,叫txtPY,再画一个TIMER,叫tmrGetPY,然后下面是代码:

Option Explicit
'By TZWSOHO
Private Const GCS_COMPSTR As Long = &H8

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 ImmGetCompositionString Lib "imm32.dll" Alias "ImmGetCompositionStringA" (ByVal hIMC As Long, ByVal dw As Long, ByRef lpv As Any, ByVal dw2 As Long) As Long

Private Sub Form_Load()
Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
End Sub

Private Sub tmrGetPY_Timer()
Dim hIMC As Long, BufSize As Long, Buf() As Byte
hIMC = ImmGetContext(hWnd)
BufSize = ImmGetCompositionString(hIMC, GCS_COMPSTR, ByVal 0&, 0)
If BufSize > 0 Then
ReDim Buf(BufSize - 1)
If ImmGetCompositionString(hIMC, GCS_COMPSTR, Buf(0), BufSize) Then
txtPY.Text = StrConv(Buf, vbUnicode)
End If
End If
Call ImmReleaseContext(hWnd, hIMC)
End Sub

Private Sub txtPY_GotFocus()
txtSrc.SetFocus
End Sub


XP+智能ABC5.22测试通过!
贝隆 2009-07-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xbin_2009 的回复:]
用个计数变量,当每个字开始输入时,记录鼠标在软键盘上的有效单击次数(若单击在a~z上加1,单击在退格键上则减1,其他键酌情处理...)
[/Quote]

计数器的办法我用过了,感觉要逻辑十分严密,不然就可能出错,比较麻烦,不是最好的解决办法

那有什么办法可以取得这个中文互动窗口的句柄?当它存在时我向它发送退格消息,当它不存在时我就向文本框发送退格消息即可。

key_Event我也用了,但不同的情况使用不同,key_event必须对有焦点的对象才有用,有些对象你无法很好的设置焦点。
波导终结者 2009-07-18
  • 打赏
  • 举报
回复
用key_event模拟相应按键的按下不就行了
加载更多回复(7)

1,485

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧