Delphi 在VCL的DbGrids.pas中禁用键盘布局的自动更改

Delphi 在VCL的DbGrids.pas中禁用键盘布局的自动更改,delphi,delphi-xe2,keyboard-layout,Delphi,Delphi Xe2,Keyboard Layout,我使用ActivateKeyboardLayout(HKL_下一步,KLF_激活)使用Delphi XE2加载波斯键盘布局,但有时我单击TextBox或DbGrid控件,键盘会自动更改为英文布局 如何禁用键盘布局的自动更改?我们也有同样的问题。此错误在从D2006升级到D2010后出现 问题在DBGrids.pas中: procedure TCustomDBGrid.WMKillFocus(var Message: TMessage); begin ImeName := Screen.Def

我使用
ActivateKeyboardLayout(HKL_下一步,KLF_激活)
使用Delphi XE2加载波斯键盘布局,但有时我单击TextBox或DbGrid控件,键盘会自动更改为英文布局


如何禁用键盘布局的自动更改?

我们也有同样的问题。此错误在从D2006升级到D2010后出现

问题在DBGrids.pas中:

procedure TCustomDBGrid.WMKillFocus(var Message: TMessage);
begin
  ImeName := Screen.DefaultIme;
  ImeMode := imDontCare;
  inherited;
  if not ((InplaceEditor <> nil) and
    (HWND(Message.WParam) = InplaceEditor.Handle)) then
    ActivateKeyboardLayout(Screen.DefaultKbLayout, KLF_ACTIVATE);
end;
过程TCustomDBGrid.WMKillFocus(var消息:TMessage);
开始
ImeName:=Screen.DefaultIme;
ImeMode:=imDontCare;
继承;
如果不是((InplaceEditor nil)和
(HWND(Message.WParam)=InplaceEditor.Handle)然后
激活主板布局(Screen.DefaultKbLayout,KLF_激活);
结束;
我不知道为什么Borland/Embarcadero在继承后添加了“if block”。更改会导致将键盘布局切换回默认布局。我们必须将DBGrids复制到我们的项目中,并删除“if block”