我写了一个类:
TXXHintWindow = class(THintWindow)我查了一下,THintWindow是从TComponent派生出来的,TComponent支持Click事件,我想让我的TXXHintWindow也支持Click操作,应该怎么做啊?(就是那个类里面应该怎么写)我的最终目的,就是让Hint窗口支持一些本来不具备的事件。

解决方案 »

  1.   

    不对,写错了,是从TControl派生出来的。
      

  2.   

    以下是我写的代码,我故意让HintWindow盖在Button上面,如果单击HintWindow,弹出的是Button1Click而没有hintclick,是不是HintWindow是透明的?
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TXXHintWindow = class(THintWindow)
        protected
          procedure MyClick(Sender: TObject);
        public
          constructor Create(aOwner: TComponent); override;
      end;  TForm2 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementation{$R *.dfm}procedure TXXHintWindow.MyClick(Sender: TObject);
    begin
      inherited;
      ShowMessage('hintclick');
    end;constructor TXXHintWindow.Create(aOwner: TComponent);
    begin
      inherited;
      Self.OnClick := MyClick;
    end;procedure TForm2.Button1Click(Sender: TObject);
    var
      x: TXXHintWindow;
      R: TRect;
      AHint: string;
    begin
      ShowMessage('button1click');
      AHint := 'asdfsfdsfsdf';
      x := TXXHintWindow.Create(Self);
      R := x.CalcHintRect(Screen.Width, AHint, nil);
      OffsetRect(R, clienttoscreen(Point(Button1.Left, button1.Top)).x, clienttoscreen(Point(Button1.Left, button1.Top)).y);
      x.ActivateHint(R, AHint);
    end;end.
      

  3.   

    Hint没句柄吧,不能接收任何事件吧?
      

  4.   

    procedure THintWindow.WMNCHitTest(var Message: TWMNCHitTest);
    begin
      Message.Result := HTTRANSPARENT;
    end;THintWindow把该消息处理了,鼠标消息全屏蔽掉了.
    重新处理该消息就OK了.
      

  5.   

    改成
    Message.Result := HTCLIENT;
    就可以了。
      

  6.   

    TXXHintWindow = class(THintWindow)
    private
      procedure CMHitTest(var Message: TCMHitTest); message CM_HITTEST;procedure TXXWindow.WMNCHitTest(var Message: TWMNCHitTest);
    begin
      Message.Result := HTNOWHERE;
    end;
      

  7.   

    TXXHintWindow = class(THintWindow)
    private
      procedure CMHitTest(var Message: TCMHitTest); message CM_HITTEST;procedure TXXWindow.WMNCHitTest(var Message: TWMNCHitTest);
    begin
      Message.Result := HTCLIENT;
    end;不好意思.不记的是哪个了...