今天,有个朋友问,如何去实现让一个输入控件,比如Edit中不能输入中文!而且不能让用户切换到任何其他输入法,始终保持为英文输入!群中很多人都说用 ImeCode等来控制,这个控制是没错!但是,本控制无法控制使用的过程中用户自己切换输入法的问题,此时我们应该不让用户去切换输入法!所以最终的实现方式,应该对系统的IME的消息进行拦截来达到目的,在以前做游戏中弹出窗口输入信息时,需要自己模拟输入法的信息,然后在游戏内部窗口中绘制出输入法的相关信息,那时对输入法的控制有研究过几天,而且也基本上实现了对输入法的输出信息进行捕捉和控制等!现在将那个东西开源出来,以便于大家共同探讨提高!例子如下:从图中可以看出,基本上实现了将输入法的信息截获显示在下面的Label控件中,并且有对每个Edit的输入法做相应的控制!
具体代码信息请到本人博客:
http://www.cnblogs.com/DxSoft/archive/2010/03/12/1684797.html
或者
http://blog.csdn.net/suiyunonghen/archive/2010/03/12/5375507.aspx

解决方案 »

  1.   

    呵呵,这个代码写了有差不多一年多的时间了!刚刚有个朋友问才偶然想起来,这个可能对于那些做ERP管理软件中的一些输入有些关系,于是放出来,大家相互探讨一下!不过可能要完全符合自己的需要的话,可能是需要修改的,我那个时候做他的目的主要是捕捉输入法信息,而不是控制,所以如果要教好的控制,可能还是需要修改一些的!
      

  2.   

    本帖最后由 starluck 于 2010-03-13 19:31:20 编辑
      

  3.   

    都是高人,小弟还在一直操作 SQL 数据库,面向对象了解的还不够透彻
      

  4.   

    你可以自己写一个控件,从Edit控件继承下来,在控件中对Edit.text按你的要求进行过滤,让它不能接受中文输入
      

  5.   

    LZ,俺问一下你Delphi的字体是什么可以吗?以及你用的Delphi版本,谢谢o(∩_∩)o。
      

  6.   

    不得閑 兄,請教一下:
       是否有研究,delphi中screen對象在vista以上,其ime list的count為0的狀況? 
       用IMEName也無法控制輸入法的切換。
       後來,我們繞過delphi使用Imm32.dll的方式,直接使用.net framework提供的文字服務,包裝為一個dll給delphi程序使用。    不太確定,vista以上的imm32.dll有何變化? 
      
        謝謝!
      

  7.   


    呵呵,还真没研究过呢!我还没在Vista下写过程序,一直用xp系统!具体的,可以跟踪代码跟一下!看看到底是什么原因呢!