Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

disable automatic changing of keyboard layout in DbGrids.pas in VCL

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?

like image 692
Majid Shamkhani Avatar asked Oct 09 '22 09:10

Majid Shamkhani


1 Answers

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".

like image 100
DiGi Avatar answered Oct 13 '22 11:10

DiGi