一个简单的技巧问题(100分)

  • 主题发起人 主题发起人 向前
  • 开始时间 开始时间
什么问题?
 
对不起,是这样的,在FORM上放上一个SHAPE构件,如何让程序知道我的鼠标移到了这个构件上?还有就是怎样作才能使当我的鼠标指到该构件时,该构件能够有所动作,(即执行一段程序,p)
 
最简单的办法:
Onmousemove建立处理机制.
设置一个Flag,默认为False;
鼠标第一次进入shape的话,onmousemove事件触发,将Flag至为True;
然后进行处理...(注意屏蔽多次触发)
 
ONMOUSEMOVE是种较易实现的方法,此外,你也可以试试拦截消息。
 
如果只是对 Shape,可响应 Delphi 提供的 CM_MOUSEENTER 和 CM_MOUSELEAVE 消息,继承 TShape 做新控件,下面附有参考代码。
如果对 Form 上的任一控件都如此,没有什么好的办法。

unit MyShape;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;

type
TMyShape = class(TShape)
private
FOnMouseEnter: TNotifyEvent;
FOnMouseLeave: TNotifyEvent;

procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
published
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Croco', [TMyShape]);
end;

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

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

end.
 
时间太久,强制结束。 wjiachun
 
后退
顶部