如何设置系统输入法? 用户在录入数据的时候,切换了输入法,比如切换成某种中文输入法,在当前的界面中输入的时候没有问题,但如果在当前的界面中点了一个按钮弹出一个界面选择数据后,输入法就变成英文了。程序里面没有控制输入法的,怎样做才能让输入法恢复到点按钮之前的那个输入法呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不明白楼主的意思,说得明白一下,在TControl类中有两个Protected的属性,ImeName,ImeMode,你看看是不是能用这个来实现。 转贴,没找到原文出处---- 常 用 函 数 有: API函数:BOOL ImmSimulateHotKey(HWND hWnd,DWORD dwHotKeyID);//模拟热键其中Hwnd为程序窗口的句柄,dwHotHKeyID为模拟的热键,若成功则返回TrueHKL GetKeyboardLayout(DWORD dwLayout);//获得当前键盘状态BOOL ImmIsIME(HKL hKL);//判断当前是否处于中文输入状态,若是则返回True自定义函数:打开相应输入法:OpenIme(imename:string),例OpenIme('全拼输入法');关闭中文输入法:CloseIme;以下是一个简单的例子,仅起参考作用。使用时uses中加上imm 具体的实现方法及源代码如下: unit Unit1;interfaceusesWindows, Messages, SysUtils, Classes,Graphics, Controls, Forms, Dialogs,StdCtrls, Buttons,imm;typeTForm1 = class(TForm)ComboBox1: TComboBox;BitBtn1: TBitBtn;BitBtn2: TBitBtn;BitBtn3: TBitBtn;procedure FormShow(Sender: TObject);procedure OpenIme(imename:string);procedure closeIme;procedure ComboBox1Change(Sender: TObject);procedure BitBtn1Click(Sender: TObject);procedure BitBtn2Click(Sender: TObject);procedure BitBtn3Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.DFM}procedure TForm1.FormShow(Sender: TObject);varj:integer;beginfor j:=0 to screen.imes.count-1 dobeginComBoBox1.Items.Add(screen.Imes.strings[j]);//获取系统中已安装的中文输入法end;end;procedure Tform1.OpenIme(imename:string);varI:integer;myhkl:hkl;beginif ImeName<>'' thenbeginif Screen.Imes.Count<>0 thenbeginI:=screen.Imes.indexof(imename);if I>=0 then myhkl:=hkl(screen.Imes.objects[i]); activatekeyboardlayout(myhkl, KLF_ACTIVATE);//设置相应的输入法end;end; end;procedure TForm1.closeime;varmyhkl:hkl;begin myhkl:=GetKeyBoardLayOut(0); if ImmIsIME(myhkl) then //判断是否在中文状态,若是则关闭它 immsimulateHotkey(handle, IME_CHotKey_IME_NonIME_Toggle);end;procedure TForm1.ComboBox1Change(Sender: TObject);begin OpenIme(ComboBox1.Text);end;procedure TForm1.BitBtn1Click(Sender: TObject);begin immsimulateHotkey(handle, IME_CHotKey_shape_Toggle);//切换半角和全角模式end;procedure TForm1.BitBtn2Click(Sender: TObject);begin immsimulateHotkey(handle, IME_CHotKey_symbol_Toggle); //切换中文标点模式和英文标点模式end; procedure TForm1.BitBtn3Click(Sender: TObject);begin closeime;end;end. 控件的ImeMode设为imChinese;再把ImeName设为"五笔输入法"; 原因是因为两个窗体上控件的ImeMode或者ImeName不一样把控件的ImeMode都设成imDontCare,再把ImeName设为空这样切换控件或窗体的时候,就不会换输入法了如果没有程序的源代码,就只好用上面的办法自己设置 cncharles(旺仔)的 up 急切问题:TQuickRep报表控件BeforePrint事件的疑惑 哪位老兄救救我?有关sql语句的问题,特急!!! 我们公司的一个女孩,挺漂亮的,追过一段时间,但没同意。今天中午我请她吃完饭,她噗嗤一乐,对我说:傻样。大家说是不是有戏了,在线等 图片保存到数据库出现的问题? 谁能解释这是为什么? 在一个局域网中,如何取得接在网络上的主机和网络设备的IP地址、主机名、MAC地址。 这个句子用adoquery该怎么写 Update的问题? 动画按钮 难题-自动将对应的配置文件赋给窗体对应的控件 delphi入门该看哪本书? 请问当WebBrowser 相关问题,请老师们帮忙处理!!
说得明白一下,在TControl类中有两个Protected的属性,
ImeName,
ImeMode,
你看看是不是能用这个来实现。
API函数:BOOL ImmSimulateHotKey(HWND hWnd,DWORD dwHotKeyID);//模拟热键其中Hwnd为程序窗口的句柄,dwHotHKeyID为模拟的热键,若成功则返回True
HKL GetKeyboardLayout(DWORD dwLayout);//获得当前键盘状态
BOOL ImmIsIME(HKL hKL);//判断当前是否处于中文输入状态,若是则返回True自定义函数:打开相应输入法:OpenIme(imename:string),例OpenIme('全拼输入法');关闭中文输入法:CloseIme;
以下是一个简单的例子,仅起参考作用。
使用时uses中加上imm
具体的实现方法及源代码如下: unit Unit1;
interface
usesWindows, Messages, SysUtils, Classes,Graphics, Controls, Forms, Dialogs,StdCtrls, Buttons,imm;
typeTForm1 = class(TForm)ComboBox1: TComboBox;BitBtn1: TBitBtn;BitBtn2: TBitBtn;BitBtn3: TBitBtn;procedure FormShow(Sender: TObject);procedure OpenIme(imename:string);procedure closeIme;procedure ComboBox1Change(Sender: TObject);procedure BitBtn1Click(Sender: TObject);procedure BitBtn2Click(Sender: TObject);procedure BitBtn3Click(Sender: TObject);
private{ Private declarations }public{ Public declarations }end;
varForm1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormShow(Sender: TObject);varj:integer;beginfor j:=0 to screen.imes.count-1 dobeginComBoBox1.Items.Add(screen.Imes.strings[j]);//获取系统中已安装的中文输入法end;end;
procedure Tform1.OpenIme(imename:string);var
I:integer;
myhkl:hkl;
begin
if ImeName<>'' then
begin
if Screen.Imes.Count<>0 then
begin
I:=screen.Imes.indexof(imename);
if I>=0 then
myhkl:=hkl(screen.Imes.objects[i]);
activatekeyboardlayout(myhkl,
KLF_ACTIVATE);//设置相应的输入法
end;
end;
end;
procedure TForm1.closeime;varmyhkl:hkl;begin
myhkl:=GetKeyBoardLayOut(0);
if ImmIsIME(myhkl) then
//判断是否在中文状态,若是则关闭它
immsimulateHotkey(handle,
IME_CHotKey_IME_NonIME_Toggle);
end;procedure TForm1.ComboBox1Change(Sender: TObject);
begin
OpenIme(ComboBox1.Text);
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
immsimulateHotkey(handle,
IME_CHotKey_shape_Toggle);//切换半角和全角模式
end;
procedure TForm1.BitBtn2Click(Sender: TObject);begin
immsimulateHotkey(handle,
IME_CHotKey_symbol_Toggle); //切换中文标点模式和英文标点模式
end; procedure TForm1.BitBtn3Click(Sender: TObject);
begin
closeime;
end;
end.
再把ImeName设为"五笔输入法";
把控件的ImeMode都设成imDontCare,再把ImeName设为空
这样切换控件或窗体的时候,就不会换输入法了如果没有程序的源代码,就只好用上面的办法自己设置
up