TCustomControl执行键盘事件



我有一个TCustomControl后代工作良好,但TCustomControl缺少代码(如点击消息或其他东西)来驱动键盘事件KeyDown, KeyUp等。我知道TCustomControl是TWinControl的后代,TForm也是,但我不知道在TForm中寻找驱动其键盘事件的东西。我就是看不出来。我不希望在外部占用TForm的键盘事件,因此它们不能在标准Delphi代码中使用。任何有实际经验的人都能听到。我考虑过CN_KEYDOWN, CN_KEYUP消息,但我不知道如何正确实现它,我认为我需要一个更包容的消息。

procedure TBaseControl.KeyBourdProc(var Message: TMessage);
begin
  try
    with Message do
    begin
      case Msg of
        WM_KEYDOWN,
        WM_SYSKEYDOWN: if DoKeyDown(TWMKey(Message)) then Exit;
        WM_CHAR: if DoKeyPress(TWMKey(Message)) then Exit;
        WM_KEYUP,
        WM_SYSKEYUP: if DoKeyUp(TWMKey(Message)) then Exit;
        CN_KEYDOWN,
        CN_CHAR, CN_SYSKEYDOWN,
        CN_SYSCHAR:
        begin
          WndProc(Message);
          Exit;
        end;
      end;
      Result := CallWindowProc(FDefKBProc, FKBHandle, Msg, WParam, LParam);
    end;
  except
    Application.HandleException(Self);
  end;
end;

但是这在我的创建中是不正确的

FDefKBProc := Pointer(GetWindowLong(FKBHandle, GWL_WNDPROC));

删除问题中的所有代码。尤其是你替换窗口程序的部分。相反,只需根据需要覆盖KeyDown, KeyUpKeyPress,并在那里添加您的处理。

最新更新