我有一个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));
答案 0 :(得分:0)
删除问题中的所有代码。特别是你替换窗口过程的部分。而是根据需要简单地覆盖KeyDown
,KeyUp
或KeyPress
,并在那里添加您的处理。