|
导读M 作 者: gss_wc(天人) 2001-04-28 10:35:05 :0 :0 [回复] [打包] [转贴] 转载: BorlandDelphi以其强大的功能及和高效的可视化... M 作 者: gss_wc(天人) 2001-04-28 10:35:05 :0 :0 [回复] [打包] [转贴] 转载: 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 usesWindows,Messages,SysUtils,Classes, Graphics,Controls,Forms,Dialogs,StdCtrls,Buttons,imm; typeTForm1=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; varForm1:TForm1; implementation {$R*.DFM} procedureTForm1.FormShow(Sender:TObject); varj:integer;beginforj: =0toscreen.imes.count- 1dobeginComBoBox1.Items.Add(screen.Imes.strings[j]); // 获取系统中已安装的中文输入法end;end; procedureTform1.OpenIme(imename:string); varI:integer;myhkl:hkl;beginifImeName<>' 'thenbeginifScreen.Imes.Count<>0thenbeginI: =screen.Imes.indexof(imename); ifI>=0thenmyhkl:=hkl(screen.Imes.objects[i]); activatekeyboardlayout(myhkl, KLF_ACTIVATE);// 设置相应的输入法end;end;end; procedureTForm1.closeime;varmyhkl:hkl;beginmyhkl: =GetKeyBoardLayOut(0);ifImmIsIME(myhkl)then // 判断是否在中文状态,若是则关闭它immsimulateHotkey(handle,IME_CHotKey_IME_NonIME_Toggle);end; procedureTForm1.ComboBox1Change(Sender:TObject); beginOpenIme(ComboBox1.Text);end; procedureTForm1.BitBtn1Click(Sender:TObject); beginimmsimulateHotkey(handle,IME_CHotKey_shape_Toggle);// 切换半角和全角模式end; procedureTForm1.BitBtn2Click(Sender:TObject); beginimmsimulateHotkey(handle,IME_CHotKey_symbol_Toggle); // 切换中文标点模式和英文标点模式end; procedureTForm1.BitBtn3Click(Sender:TObject); begincloseime;end; end. 本程序在Delphi3.0/4.0下通过。 |
温馨提示:喜欢本站的话,请收藏一下本站!