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

Maj*_*ani 5 delphi keyboard-layout delphi-xe2

我使用ActivateKeyboardLayout(HKL_NEXT, KLF_ACTIVATE);Delphi XE2来加载波斯语键盘布局,但有时我点击TextBox或DbGrid控件键盘会自动更改为英文布局.

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

DiG*_*iGi 4

我们有同样的问题。这个bug是从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;
Run Code Online (Sandbox Code Playgroud)

我不知道为什么 Borland/Embarcadero 在继承后添加了“if 块”。更改会导致键盘布局切换回默认值。我们必须将 DBGrid 复制到我们的项目中并删除“if 块”。