Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14490261
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:47:27

下载本文示例代码
p>  BorlandDelphi以其强大的功能及和高效的可 视化开发环境为广大程序设计员所青睐。尤其是它封装了WINDOWSAPI函数,能方便地利 用WINDOWS资源,大大加快了程序开发速度。   在平时的计算机操作中,中文输入是不可避免的。 使用者可能喜欢不同的中文输入法(inputmethodeditor,简称IME),这就不得不经常点击 任务栏中的中文图标或用CTRL Space,CTRL Shift热键切换,初学者用起来很不方便。针对 这一问题,可以在开发软件时,在程序中设置用户喜欢的中文输入法,方便用户的使用。Delphi 中只有少数控件如TEdit支持IME,而且该功能不强,不能在运行时更改输入法。   笔者通过实践和摸索,查找了相关的IME资料,利 用了WINDOWSAPI函数,实现了IME的功能。   常用函数有: API函数:BOOLImmSimulateHotKey (HWNDhWnd,DWORDdwHotKeyID);//模拟热键 其中Hwnd为程序窗口的句柄,dwHotHKeyID 为模拟的热键,若成功则返回True HKLGetKeyboardLayout(DWORDdwLayout); //获得当前键盘状态 BOOLImmIsIME(HKLhKL); //判断当前是否处于中文输入状态,若是则返回True 自定义函数: 打开相应输入法:OpenIme(imename:string), 例OpenIme(全拼输入法); 关闭中文输入法:CloseIme; 以下是一个简单的例子,仅起参考作用。 使用时uses中加上imm 具体的实现方法及源代码如下: unitUnit1; interface uses Windows,Messages,SysUtils,Classes, Graphics,Controls,Forms,Dialogs, StdCtrls,Buttons,imm; type TForm1=class(TForm) ComboBox1:TComboBox; BitBtn1:TBitBtn; BitBtn2:TBitBtn; BitBtn3:TBitBtn; procedureFormShow(Sender:TObject); procedureOpenIme(imename:string); procedurecloseIme; procedureComboBox1Change(Sender:TObject); procedureBitBtn1Click(Sender:TObject); procedureBitBtn2Click(Sender:TObject); procedureBitBtn3Click(Sender:TObject); private {Privatedeclarations} public {Publicdeclarations} end; var Form1:TForm1; implementation {$R*.DFM} procedureTForm1.FormShow(Sender:TObject); var j:integer; begin forj:=0toscreen.imes.count-1do begin ComBoBox1.Items.Add(screen.Imes.strings[j]); //获取系统中已安装的中文输入法 end; end; procedureTform1.OpenIme(imename:string); var I:integer; myhkl:hkl; begin ifImeNamethen begin ifScreen.Imes.Count0then begin I:=scr .Imes.indexof(imename); ifI>=0then myhkl:=hkl(screen.Imes.objects[i]); activatekeyboardlayout(myhkl, KLF_ACTIVATE);//设置相应的输入法 end; end; end; procedureTForm1.closeime; var myhkl:hkl; begin myhkl:=GetKeyBoardLayOut(0); ifImmIsIME(myhkl)then //判断是否在中文状态,若是则关闭它 immsimulateHotkey(handle, IME_CHotKey_IME_NonIME_Toggle); end; procedureTForm1.ComboBox1Change(Sender:TObject); begin OpenIme(ComboBox1.Text); end; procedureTForm1.BitBtn1Click(Sender:TObject); begin immsimulateHotkey(handle, IME_CHotKey_shape_Toggle);//切换半角和全角模式 end; procedureTForm1.BitBtn2Click(Sender:TObject); begin immsimulateHotkey(handle, IME_CHotKey_symbol_Toggle); //切换中文标点模式和英文标点模式 end; procedureTForm1.BitBtn3Click(Sender:TObject); begin closeime; end; end.   本程序在Delphi3.0/4.0下通过。 p>  BorlandDelphi以其强大的功能及和高效的可 视化开发环境为广大程序设计员所青睐。尤其是它封装了WINDOWSAPI函数,能方便地利 用WINDOWS资源,大大加快了程序开发速度。   在平时的计算机操作中,中文输入是不可避免的。 使用者可能喜欢不同的中文输入法(inputmethodeditor,简称IME),这就不得不经常点击 任务栏中的中文图标或用CTRL Space,CTRL Shift热键切换,初学者用起来很不方便。针对 这一问题,可以在开发软件时,在程序中设置用户喜欢的中文输入法,方便用户的使用。Delphi 中只有少数控件如TEdit支持IME,而且该功能不强,不能在运行时更改输入法。   笔者通过实践和摸索,查找了相关的IME资料,利 用了WINDOWSAPI函数,实现了IME的功能。   常用函数有: API函数:BOOLImmSimulateHotKey (HWNDhWnd,DWORDdwHotKeyID);//模拟热键 其中Hwnd为程序窗口的句柄,dwHotHKeyID 为模拟的热键,若成功则返回True HKLGetKeyboardLayout(DWORDdwLayout); //获得当前键盘状态 BOOLImmIsIME(HKLhKL); //判断当前是否处于中文输入状态,若是则返回True 自定义函数: 打开相应输入法:OpenIme(imename:string), 例OpenIme(全拼输入法); 关闭中文输入法:CloseIme; 以下是一个简单的例子,仅起参考作用。 使用时uses中加上imm 具体的实现方法及源代码如下: unitUnit1; interface uses Windows,Messages,SysUtils,Classes, Graphics,Controls,Forms,Dialogs, StdCtrls,Buttons,imm; type TForm1=class(TForm) ComboBox1:TComboBox; BitBtn1:TBitBtn; BitBtn2:TBitBtn; BitBtn3:TBitBtn; procedureFormShow(Sender:TObject); procedureOpenIme(imename:string); procedurecloseIme; procedureComboBox1Change(Sender:TObject); procedureBitBtn1Click(Sender:TObject); procedureBitBtn2Click(Sender:TObject); procedureBitBtn3Click(Sender:TObject); private {Privatedeclarations} public {Publicdeclarations} end; var Form1:TForm1; implementation {$R*.DFM} procedureTForm1.FormShow(Sender:TObject); var j:integer; begin forj:=0toscreen.imes.count-1do begin ComBoBox1.Items.Add(screen.Imes.strings[j]); //获取系统中已安装的中文输入法 end; end; procedureTform1.OpenIme(imename:string); var I:integer; myhkl:hkl; begin ifImeNamethen begin ifScreen.Imes.Count0then begin I:=scr .Imes.indexof(imename); ifI>=0then myhkl:=hkl(screen.Imes.objects[i]); activatekeyboardlayout(myhkl, KLF_ACTIVATE);//设置相应的输入法 end; end; end; procedureTForm1.closeime; var myhkl:hkl; begin myhkl:=GetKeyBoardLayOut(0); ifImmIsIME(myhkl)then //判断是否在中文状态,若是则关闭它 immsimulateHotkey(handle, IME_CHotKey_IME_NonIME_Toggle); end; procedureTForm1.ComboBox1Change(Sender:TObject); begin OpenIme(ComboBox1.Text); end; procedureTForm1.BitBtn1Click(Sender:TObject); begin immsimulateHotkey(handle, IME_CHotKey_shape_Toggle);//切换半角和全角模式 end; procedureTForm1.BitBtn2Click(Sender:TObject); begin immsimulateHotkey(handle, IME_CHotKey_symbol_Toggle); //切换中文标点模式和英文标点模式 end; procedureTForm1.BitBtn3Click(Sender:TObject); begin closeime; end; end.   本程序在Delphi3.0/4.0下通过。 下载本文示例代码


Delphi下编程实现中文输入Delphi下编程实现中文输入Delphi下编程实现中文输入Delphi下编程实现中文输入Delphi下编程实现中文输入Delphi下编程实现中文输入Delphi下编程实现中文输入Delphi下编程实现中文输入Delphi下编程实现中文输入Delphi下编程实现中文输入Delphi下编程实现中文输入Delphi下编程实现中文输入Delphi下编程实现中文输入Delphi下编程实现中文输入Delphi下编程实现中文输入
阅读(300) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~