问题
I use ActivateKeyboardLayout(HKL_NEXT, KLF_ACTIVATE);
to load Persian keyboard layout using Delphi XE2, But sometimes I click on TextBox or DbGrid control the keyboard automatically is changed to English layout.
How can I disable automatic changing of keyboard layout?
回答1:
We have same issues. This bug appeared after upgrade from D2006 to D2010.
Issue is in 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;
I have no idea why Borland/Embarcadero added "if block" after inherited. Change causes switching keyboard layout back to default. We had to copy DBGrids to our projects and remove "if block".
来源:https://stackoverflow.com/questions/9756357/disable-automatic-changing-of-keyboard-layout-in-dbgrids-pas-in-vcl