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

6

我正在使用Delphi 7。 我想要在PageControl的空白区域上(即最后一个选项卡右侧)响应鼠标左键单击事件。 我该怎么做?带有pagecontrol的表单


当发生点击时,我想制作一个选项卡。 - Prog1020
1
你最好在那里画一个加号,否则用户怎么发现它呢?如果他们误点了那里,新的标签页出现,他们不会感到恼火吗? - David Heffernan
不,一切正常,我会在双击发生时创建选项卡。加号暂时还不需要。就像Notepad++中的操作一样。 - Prog1020
我是Notepad++的超级重度用户。每天我会使用它几个小时。我不知道双击可以打开一个新标签页。除了这个快捷键,如果你不提供其他的替代方式,我相信你们会遇到可发现性的问题。 - David Heffernan
1个回答

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;

然后,控件的OnMouseDown事件将被触发。当然,在修改消息返回值之前,您可以测试区域,此示例仅用于展示它如何工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接