我正在使用Delphi 7。 我想对PageControl的空白区域上的单击(左)做出反应 - 在比所示的最后一个选项卡更深的区域上。我该怎么做?
答案 0 :(得分:6)
您可以在PageControl的父控件处理单击。 F.i.如果将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;
然后,控件的OnMouseDown
事件将被触发。当然,你可以在修改消息的返回值之前测试该区域,这个例子只是为了说明它是如何工作的。