Delphi:如何处理点击PageControl的空白区域?

Pro*_*020 6 delphi

我正在使用Delphi 7.我想对PageControl的空白区域上的单击(左)作出反应 - 在比所示的最后一个选项卡更深的区域上.我怎样才能做到这一点?使用pagecontrol表单

Ser*_*yuz 6

您可以在PageControl的父控件处理单击.如果将PageControl放置在表单上,​​则将为该指定区域调用表单的"MouseDown"事件.原因是PageControl返回HTTRANSPARENT该区域的命中测试消息,因此鼠标消息将定向到其下方的控件.

如果不是这样,您可以更改WM_NCHITTEST处理方式,例如通过子类化控件或在派生控件中:

type
  TMyPageControl = class(TPageControl)
  protected
    procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
  end;

procedure TMyPageControl.WMNCHitTest(var Message: TWMNCHitTest);
begin
  inherited;
  if Message.Result = HTTRANSPARENT then
    Message.Result := HTCLIENT;
end;
Run Code Online (Sandbox Code Playgroud)

然后,控件的OnMouseDown事件将被触发.当然,你可以在修改消息的返回值之前测试该区域,这个例子只是为了说明它是如何工作的.