如何得到image 的wm_mouseleave 事件(50分)

  • 主题发起人 主题发起人 chshanghai
  • 开始时间 开始时间
C

chshanghai

Unregistered / Unconfirmed
GUEST, unregistred user!
[?]
D6中的label 有这个事件但image 没有这个这个事件,
现在我想在image 得到这个事件.
怎么做 最好有代码

先谢谢各位了
 
难道没人遇到过吗
 
条条大路通罗马!你可以把Image周围的Form(或其它控件)的OnMouseMove事件当做Image的OnMouseLeave事件来处理!
 
那样太累人了吧
我的image周围有几十个控件呢要我写......#$(#)?
我发现delphi6 中的label 中有这个事件,
它是怎样实现的呢, ;而且好像windows 没有这个事件
 
还有mouseleave 和mouseenter怎么用,
我发现这两个事件好象不行
 
一般情况下Image周围不是Form就是Panel,其它控件不会和Image放的很近,所以一般
情况下你只要写Form或Panel的OnMouseMove事件就行了(写一个就行),要是还有其它
控件,可以把它们的OnMouseMove事件指向Form的OnMouseMove事件。我想你不会连指
向也懒地动手吧?:)
 
首先,响应的消息应该是cm_mouseleave,
至于如何首先,自己看看vcl源码就知道了,你也可以自己改vcl源码,
如果你真的看懂了。
 
onMouseMove事件是经常发生的。应该编写一个新Timage构件。
如下:
unit image1;

interface

uses
; Windows, Messages, SysUtils, Classes, Controls, ExtCtrls;

type
; TNewimage = class(TImage)
; private
; ; FOnMouseLeave: TNotifyEvent;
; ; FOnMouseEnter: TNotifyEvent;
; ; { Private declarations }
; protected
; ; { Protected declarations }
; public
; ; { Public declarations }
; published
; ; procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
; ; procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
; ; property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
; ; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
; ; { Published declarations }
; end;

procedure Register;

implementation

procedure Register;
begin
//请自己修改
;RegisterComponents('Samples', [TNewimage]);
end;

{ timage1 }

procedure TNewimage.CMMouseEnter(var Message: TMessage);
begin
; inherited;
; if Assigned(FOnMouseEnter) then
; ; FOnMouseEnter(Self);
end;

procedure TNewimage.CMMouseLeave(var Message: TMessage);
begin
; inherited;
; if Assigned(FOnMouseLeave) then
; ; FOnMouseLeave(Self);
end;

end.
 
偷懒的办法,在Image上面盖上一个透明的Label吧.
 
tata说得可以,
 
to tata
你说的我知道了谢谢了
我想知道是的如何能拦截此消息,
并知道是image发出的
不要写一个控件类
 
Timage不是TWinControl的子孙类,所以它没有句柄。
它的消息依靠于它的容器:TForm或Tpanel。你可以在
它的容器的消息里处理。
 
多人接受答案了。
 
后退
顶部