6

私は Delphi 7 を使用しています。Pag​​eControl の空きスペース (最後に表示されたタブよりも右側の領域) のクリック (左) に反応したいと考えています。どうやってやるの?ページコントロールのあるフォーム

4

1 に答える 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イベントが発生します。もちろん、メッセージの戻り値を変更する前にリージョンをテストすることもできます。この例は、それがどのように機能するかを示すためだけのものです。

于 2013-01-11T17:32:52.823 に答える