有没有办法在按下TCheckBox或TButton控件上的VK_LEFT键时触发OnKeyDown事件。目前,它只是选择另一个控件,但不会触发该事件。
更新
这是我使用VK_LEFT键像TAB Back一样的代码。
首先,我需要禁用某些控件(如TCheckBox、TButton等)上VK_LEFT的标准行为:
procedure TfmBase.CMDialogKey(var Message: TCMDialogKey);
begin
if Message.CharCode <> VK_LEFT then
inherited;
end;
然后,在TCheckBox、TButton等控件上,VK_LEFT键也会触发OnKeyDown事件。在该事件中,我编写了代码以选择前一个控件。当然,KeyPreview必须为true。
procedure TfmBase.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
handled: Boolean;
begin
if Key = VK_LEFT then
begin
handled := false;
TabBack(handled); //This is my function, which checks the type of the control and selects the previous control.
if handled then
Key := 0;
end;
end;
CM_CHILDKEY
会绕过CM_DIALOGKEY
的效果。但是,您需要在控件中处理它而不是表单。这肯定是可能的。然而,由于 @max 想要进行导航,我认为CM_DIALOGKEY
没有更好的解决方案。您同意吗? - David HeffernanMsg.Result
设置为0。否则,你会破坏整个表单的导航。此外,CMDialogKey
是为了让你在那里进行导航而设计的。你只需要调用SetFocus
来设置你想要导航到的控件。按照这种方式做,根本不需要处理 KeyDown! - David HeffernanTWinControl
上执行。 - David Heffernan