我在表单上有一个
TTabControl
,我希望如果 tabs (选项卡标题)获得焦点,并且当用户按下 Ctrl+RightArrow 时,它将聚焦于最右侧的选项卡。遗憾的是,与 TTabControl
不同,OnKeyDown
没有 TEdit
事件。如何实现自定义 OnKeyDown
事件?
您可以子类化 TabControl 的
WindowProc
属性,以直接对其接收到的消息执行任何您想要的操作,例如:
type
TMyForm = class(TForm)
TabControl1: TTabControl;
...
procedure FormCreate(Sender: TObject);
...
private
OldTabWndProc: TWndMethod;
procedure MyTabWndProc(var Message: TMessage);
...
end;
procedure TMyForm.FormCreate(Sender: TObject);
begin
OldTabWndProc := TabControl1.WindowProc;
TabControl1.WindowProc := MyTabWndProc;
end;
procedure TMyForm.MyTabWndProc(var Message: TMessage);
begin
if Message.Msg = WM_KEYDOWN then
begin
...
end;
OldTabWndProc(Message);
end;