我要开发一个不可视组件,想要截获某个控件的WM_LBUTTONDOWN的消息,怎样实现,请高手们指点(急) 我想要开发一个不可视组件,想要截获一个可视控件的按件消息,要怎样实现,最好有源码请高手们指点一下。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 type TMyImage = class(TImage) privateprocedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;......implementation......procedure TMyImage.CMMouseEnter(var Message: TMessage);begin//响应清息时的代码end; 是一个非可视组件type TMultiSelectedRows = class(TComponent) private procedure wndproc(var message:Tmessage); { Private declarations } protected { Protected declarations } public Constructor Create(AOwner: TComponent); Override; destructor Destroy; override; { Public declarations } published { Published declarations } end;......constructor TMultiSelectedRows.Create(AOwner: TComponent);begin inherited Create(AOwner); FWindowHandle := AllocateHWnd(WndProc); end;destructor TMultiSelectedRows.Destroy;begin DeallocateHWnd(FWindowHandle); inherited;end;procedure TMultiSelectedRows.Notification(AComponent: TComponent; Operation: TOperation);begin inherited;end;procedure TMultiSelectedRows.wndproc(var message: Tmessage);begin //在这里怎么截不到 WM_LBUTTONDOWN 请高手们指占一下end; 用Hook抓容器不会转发消息到非激活态的控件的 截获一个可视控件的按件消息应该在可视控件里截获啊,用一个控件去截获另一个控件的消息应该用钩子技术吧。也就是Hook typeTMultiSelectedRows = class(TComponent)private procedure Mywndproc(var message:Tmessage);public Constructor Create(AOwner: TComponent); Override; destructor Destroy; override;end;...implementationvar OLDWndProc:TWndMethod; constructor TMultiSelectedRows.Create(AOwner: TWinControl);//TComponent 不行begin inherited Create(AOwner); Owner:= AOwner; OLDWndProc := AOwner.WindowProc; AOwner.WindowProc := MyWndproc;end;destructor TMultiSelectedRows.Destroy;begin (Owner as TWinControl).WindowProc := OLDWndProc; inherited;end;procedure TMultiSelectedRows.Mywndproc(var message: Tmessage);beginend; 修改下:constructor TMultiSelectedRows.Create(AOwner: TComponent );可以用TComponent 的! 类持久化传送问题 取日期字符串 关于Activex开发的问题,求高手解惑! access随机记录的问题,还有默认值的问题 DELPHI可以实现BT下载吗 在多线程里面使用dbexpress 用ole 显示WORD文档,说是“interface not supported”。 两天了还是搞不定,Writeprint() 这个API函数如何用? 关于MEMO的问题,很急!!!请进 关于FileListBox与DirectroyOutline的问题: 如何读取memo 中的一个个单词中的字母? DBGrid怎么支持鼠标中键上下移动记录?
TMyImage = class(TImage) private
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
...
...implementation
...
...procedure TMyImage.CMMouseEnter(var Message: TMessage);
begin
//响应清息时的代码
end;
type
TMultiSelectedRows = class(TComponent)
private
procedure wndproc(var message:Tmessage);
{ Private declarations }
protected
{ Protected declarations } public Constructor Create(AOwner: TComponent); Override;
destructor Destroy; override;
{ Public declarations }
published
{ Published declarations } end;...
...constructor TMultiSelectedRows.Create(AOwner: TComponent);begin
inherited Create(AOwner); FWindowHandle := AllocateHWnd(WndProc);
end;destructor TMultiSelectedRows.Destroy;
begin
DeallocateHWnd(FWindowHandle); inherited;
end;
procedure TMultiSelectedRows.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited;end;
procedure TMultiSelectedRows.wndproc(var message: Tmessage);
begin
//在这里怎么截不到 WM_LBUTTONDOWN 请高手们指占一下end;
容器不会转发消息到非激活态的控件的
用一个控件去截获另一个控件的消息应该用钩子技术吧。也就是Hook
TMultiSelectedRows = class(TComponent)
private
procedure Mywndproc(var message:Tmessage);
public
Constructor Create(AOwner: TComponent); Override;
destructor Destroy; override;
end;...implementationvar OLDWndProc:TWndMethod;
constructor TMultiSelectedRows.Create(AOwner: TWinControl);//TComponent 不行
begin
inherited Create(AOwner);
Owner:= AOwner;
OLDWndProc := AOwner.WindowProc;
AOwner.WindowProc := MyWndproc;
end;destructor TMultiSelectedRows.Destroy;
begin
(Owner as TWinControl).WindowProc := OLDWndProc;
inherited;
end;procedure TMultiSelectedRows.Mywndproc(var message: Tmessage);
beginend;
constructor TMultiSelectedRows.Create(AOwner: TComponent );可以用TComponent 的!