为什么,每次单击dbgrid后,输入法就会变为英文输入法,而不是中文了?
解决方案 »
- Delphi中的Edit1中如何让从右往左显示和输入
- 请问怎样在fastreport中隐藏-1?参与就有分奖励
- sqlserver与delphi的问题?
- 怪事!!一模一样的程序,一个能运行另一个运行出错!!!!
- 如何实现对执行文件的动态配制,像冰河 winshell那样
- 很简单的窗体类的继承问题,只加了一个StringGrid,但很重要!
- 有谁会用Delphi写测试程序
- 如何更新monthcalendar控件的当前日期?
- 请教个解决方法
- 给高份,哪儿可以得到五笔汉字库,急!!!
- mdichildform子窗体显示如何自动隐藏主窗体的工具栏???
- FastReport预览后的内容可以直接转化成邮件的内容吗..?
在设计时,选择DBGrid的IMENAME属性动态设置:
在DBGRIDE的ENTER事件中加入下列代码
1、先获取当前屏幕上的输入法
2、设置DBGRID.IMENAME = 当前屏幕上的输入法具体代码如下:function GetCurrentIME: TImeName;
var
IMEHandle: THandle;
Idx: Integer;
begin
Result := '';
ImeHandle := GetKeyBoardLayOut(0);
for Idx := 0 to Pred(Screen.Imes.Count) do
if HKL(Screen.Imes.Objects[Idx]) = ImeHandle then
Result := Screen.Imes[Idx];
end;procedure TForm1.DBGridEnter(Sender: TObject);
begin
DBGrid.ImeName := GetCurrentIME;
end;
好像是在什么KILL事件内的,具体的我忘记了,你只有自己找一下了。
begin
if Sender is TEdit then
begin
TEdit(Sender).ImeName := Screen.DefaultIme;
Exit;
end;
if Sender is TMemo then
begin
TMemo(Sender).ImeName := Screen.DefaultIme;
Exit;
end;
if Sender is TDBGrid then
begin
TDBGrid(Sender).ImeName := Screen.DefaultIme;
Exit;
end;
......根据你的需要照上面代码加入更多的控件设置
end;procedure TForm1.FormCreate(Sender: TObject);
var
Idx: Integer;
begin
for Idx := 0 to Pred(ComponentCount) do
begin
if Components[Idx] is TEdit then
TEdit(Components[Idx]).OnEnter:= OnEnterExit;
if Sender is TMemo then
TDBGrid(Components[Idx]).OnEnter:= OnEnterExit;
if Sender is TDBGrid then
TDBGrid(Components[Idx]).OnEnter:= OnEnterExit;
......根据你的需要照上面代码加入更多的控件设置
end;
end;对于dbgrid的BUG要特别修改
你打开DBGrid单元
procedure TCustomDBGrid.WMKillFocus(var Message: TMessage);
begin
//if not SysLocale.FarEast then inherited 修改之前
if SysLocale.FarEast then inherited 修改之后
else
begin
ImeName := Screen.DefaultIme;
ImeMode := imDontCare;
inherited;
if not ((InplaceEditor <> nil) and
(HWND(Message.WParam) = InplaceEditor.Handle)) then
ActivateKeyboardLayout(Screen.DefaultKbLayout, KLF_ACTIVATE);
end;
end;重新编译DBGRID单元--》
生成新的DBGRID.dcu--》
复制到--》C:\Program Files\Borland\Delphi7\Lib 和
C:\Program Files\Borland\Delphi7\Lib\Debug
覆盖原来的。重新建一个测试界面。应该能达到你的要求了。
end;