在用输入法输入汉字时,我们可以用快捷键:ctrl+. 来转换标点符号的中英两中状态,我想在程序中通过虚拟按键的方法来实现,现在我通过api已经实现了,代码如下:procedure TFinput.RadioButton7Click(Sender: TObject);
var
h: HIMC;
fdwConversion,
fdwSentence: DWord;
begin
h := ImmGetContext(Handle);
if h <> 0 then
if ImmGetConversionStatus(h, fdwConversion, fdwSentence) then
ImmSetConversionStatus(h, (IME_CMODE_SYMBOL), fdwSentence);
listbox1.OnClick(listbox1);end;procedure TFinput.RadioButton8Click(Sender: TObject);
var
h: HIMC;
fdwConversion,
fdwSentence: DWord;
begin
h := ImmGetContext(Handle);
if h <> 0 then
if ImmGetConversionStatus(h, fdwConversion, fdwSentence) then
ImmSetConversionStatus(h, fdwConversion and (not IME_CMODE_SYMBOL), fdwSentence);
listbox1.OnClick(listbox1);
end;但用上面的代码来做,有一个问题我不知该怎么办,也就是用上面的代码来控制标点符号中英状态的时候,我原来已经设定好的全半角(就是输入法工具条中满圆和月牙形状态的那个)状态又会牵连,不知该怎办,请求帮助
var
h: HIMC;
fdwConversion,
fdwSentence: DWord;
begin
h := ImmGetContext(Handle);
if h <> 0 then
if ImmGetConversionStatus(h, fdwConversion, fdwSentence) then
ImmSetConversionStatus(h, (IME_CMODE_SYMBOL), fdwSentence);
listbox1.OnClick(listbox1);end;procedure TFinput.RadioButton8Click(Sender: TObject);
var
h: HIMC;
fdwConversion,
fdwSentence: DWord;
begin
h := ImmGetContext(Handle);
if h <> 0 then
if ImmGetConversionStatus(h, fdwConversion, fdwSentence) then
ImmSetConversionStatus(h, fdwConversion and (not IME_CMODE_SYMBOL), fdwSentence);
listbox1.OnClick(listbox1);
end;但用上面的代码来做,有一个问题我不知该怎么办,也就是用上面的代码来控制标点符号中英状态的时候,我原来已经设定好的全半角(就是输入法工具条中满圆和月牙形状态的那个)状态又会牵连,不知该怎办,请求帮助
解决方案 »
- 像苍蝇般恶心的英巴卡迪诺北京办
- longword 型变量怎样才能变成integer,我是用getdiskfreespace取磁盘剩余空间后得到longword后不知道怎么处理
- 在sql一表中再插入其它表内某一字段的方法
- 大虾们,帮一个忙了,判断变量是否赋值的函数是什么,谁告诉我!我在线等待!
- 如何在一个线程内延时一段时间
- QuickReport 的问题
- @@怎么在进销存中实现多账套,是执行存储过程吗?在线等待.....@@
- Delphi6的Indy控件组中哪个控件可直接支持网络文件传送?
- 怎么得到数组的长度?
- ***汉字和图形的旋转还不完善***
- WebBrowser中比较棘手的问题(自动登录),请各位指点,一定高分
- 怎样用程序添加dxDBGrid的column?
procedure apply;
var
h: HIMC;
fdwConversion,
fdwSentence: DWord;
begin
with finput do
begin
h := ImmGetContext(Handle);
if h <> 0 then
begin
if ImmGetConversionStatus(h, fdwConversion, fdwSentence) then
begin
//中文+全角+英文标点
if rbzw.Checked and rbqj.Checked and rbfhyw.Checked then
begin
ImmSetConversionStatus(h, 2057, fdwSentence);
end;
//中文+半角+中文标点
if rbzw.Checked and rbbj.Checked and rbfhzw.Checked then
begin
ImmSetConversionStatus(h, 3073, fdwSentence);
end;
//中文+全角+中文标点
if rbzw.Checked and rbqj.Checked and rbfhzw.Checked then
begin
ImmSetConversionStatus(h, 3081, fdwSentence);
end;
//中文+半角+英文标点
if rbzw.Checked and rbbj.Checked and rbfhyw.Checked then
begin
ImmSetConversionStatus(h, 2049, fdwSentence);
end;
//英文+全角+英文标点
if rbyw.Checked and rbqj.Checked and rbfhyw.Checked then
begin
ImmSetConversionStatus(h, 8, fdwSentence);
end;
//英文+半角+中文标点
if rbyw.Checked and rbbj.Checked and rbfhzw.Checked then
begin
ImmSetConversionStatus(h, 1024, fdwSentence);
end;
//英文+全角+中文标点
if rbyw.Checked and rbqj.Checked and rbfhzw.Checked then
begin
ImmSetConversionStatus(h, 1032, fdwSentence);
end;
//英文+半角+英文标点
if rbyw.Checked and rbbj.Checked and rbfhyw.Checked then
begin
ImmSetConversionStatus(h, 0, fdwSentence);
end;
end;
end;
end;
end;
谢谢两位支持,问题已经被我自己解决了,该结贴了,分给两位平分了,希望小弟以后遇到了什么难题,请多多帮忙!