TCustomControl执行键盘事件

问题描述 投票:-1回答:1

我有一个TCustomControl后代运行良好,但TCustomControl缺少代码(如命中消息或东西)来驱动键盘事件KeyDown,KeyUp等我明白TCustomControl是TWinControl的后代,所以是TForm,但我不知道是什么寻找在TForm中驱动其键盘事件。我只是看不到它。我不想在外部接受TForm的键盘事件,因此它们不能用于标准的Delphi Code。任何有真实经验的人都会听到。我已经考虑了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));
delphi delphi-7 vcl
1个回答
0
投票

删除问题中的所有代码。特别是你替换窗口过程的部分。而是根据需要简单地覆盖KeyDownKeyUpKeyPress,并在那里添加您的处理。

© www.soinside.com 2019 - 2024. All rights reserved.