我写了一个类:
TXXHintWindow = class(THintWindow)我查了一下,THintWindow是从TComponent派生出来的,TComponent支持Click事件,我想让我的TXXHintWindow也支持Click操作,应该怎么做啊?(就是那个类里面应该怎么写)我的最终目的,就是让Hint窗口支持一些本来不具备的事件。
TXXHintWindow = class(THintWindow)我查了一下,THintWindow是从TComponent派生出来的,TComponent支持Click事件,我想让我的TXXHintWindow也支持Click操作,应该怎么做啊?(就是那个类里面应该怎么写)我的最终目的,就是让Hint窗口支持一些本来不具备的事件。
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.
begin
Message.Result := HTTRANSPARENT;
end;THintWindow把该消息处理了,鼠标消息全屏蔽掉了.
重新处理该消息就OK了.
Message.Result := HTCLIENT;
就可以了。
private
procedure CMHitTest(var Message: TCMHitTest); message CM_HITTEST;procedure TXXWindow.WMNCHitTest(var Message: TWMNCHitTest);
begin
Message.Result := HTNOWHERE;
end;
private
procedure CMHitTest(var Message: TCMHitTest); message CM_HITTEST;procedure TXXWindow.WMNCHitTest(var Message: TWMNCHitTest);
begin
Message.Result := HTCLIENT;
end;不好意思.不记的是哪个了...