如何重写TTabControl OnKeyDown?

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

我在表单上有一个

TTabControl
,我希望如果 tabs (选项卡标题)获得焦点,并且当用户按下 Ctrl+RightArrow 时,它将聚焦于最右侧的选项卡。遗憾的是,与
TTabControl
不同,
OnKeyDown
没有
TEdit
事件。如何实现自定义
OnKeyDown
事件?

delphi delphi-xe
1个回答
0
投票

您可以子类化 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;
© www.soinside.com 2019 - 2024. All rights reserved.