5

Delphi XE2を使用ActivateKeyboardLayout(HKL_NEXT, KLF_ACTIVATE);してペルシャ語のキーボード レイアウトをロードしていましたが、TextBox または DbGrid コントロールをクリックすると、キーボードが自動的に英語のレイアウトに変更されます。

キーボード レイアウトの自動変更を無効にするにはどうすればよいですか?

4

1 に答える 1

4

同じ問題があります。このバグは、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;

Borland/Embarcadero が継承後に「if ブロック」を追加した理由がわかりません。変更すると、キーボード レイアウトがデフォルトに戻ります。DBGrid をプロジェクトにコピーし、「if ブロック」を削除する必要がありました。

于 2012-03-18T11:54:33.207 に答える