鼠标移动的问题(1分)

  • 主题发起人 主题发起人 wy0311
  • 开始时间 开始时间
W

wy0311

Unregistered / Unconfirmed
GUEST, unregistred user!
我应该怎么样写才能让鼠标指向Label时变换其颜色,当鼠标移开时恢复先前的颜色。
(我没分了)。
 
procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Label1.Color :=clRed;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Label1.Color :=clBtnFace;
end;
 
自己写个控件 OnMouseEnter Label.Color := Clred;
OnMouseLeave Label.Color := ClBlack;
 
ON CM MouseEnter
ON CM MouseExit
 
千雪兄:
如果不是Label而是连成一遍的SpeedButton,那不是要给每一个Speedbutton的MouseMove都加上这一句,
如果Speedbutton是动态建立的,又该怎样写呢?
有一点婆婆妈妈,对不住啦!
 
使用Windows的消息:
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
 
我曾写过一个控件,就是实现这种功能的Label。
如果有兴趣,我给你发一个。
 
能举个例子吗,或给个Windows消息的使用方法(有中文详解更好),我的学习资料上没有
 
例子来了:
unit UltraLabel;

interface

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

type
TUltraLabel = class(TLabel)
private
FTrack:boolean;
FTrackColor:Tcolor;
FstateColor:Tcolor;
Ftrackline:boolean;
Fonmouseenter:Tnotifyevent;
Fonmouseleave:Tnotifyevent;
procedure settrackcolor(value:Tcolor);
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
protected
public
constructor Create(AOwner: TComponent); override;
published
property Track:boolean read Ftrack write Ftrack;
property Trackline:boolean read Ftrackline write Ftrackline;
property Trackcolor:Tcolor read Ftrackcolor write settrackcolor;
property OnMouseEnter:Tnotifyevent read Fonmouseenter write Fonmouseenter;
property OnMouseLeave:Tnotifyevent read Fonmouseleave write Fonmouseleave;

end;

procedure Register;

implementation

constructor TUltraLabel.Create(AOwner: TComponent);
begin
inherited create(Aowner);
Fstatecolor:=font.Color;
Ftrack:=true;
Ftrackcolor:=clred;
FtrackLine:=true;
// cursor:=CrHandPoint;
end;
procedure TUltraLabel.CMMouseEnter(var Message: TMessage);
begin
if track then
begin
font.color:=Ftrackcolor;
if Ftrackline then font.Style:=[fsunderline];
end;
if assigned(Fonmouseenter)then Fonmouseenter(self);
end;
procedure TUltraLabel.CMMouseLeave(var Message: TMessage);
begin
if track then
begin
font.color:=FStatecolor;
if Ftrackline then font.Style:=[];
end;
if assigned(Fonmouseleave)then Fonmouseleave(self);

end;

procedure TultraLabel.settrackcolor(value:Tcolor);
begin
fTrackcolor:=value;
Fstatecolor:=font.Color;
Invalidate;
end;
procedure Register;
begin
RegisterComponents('Ydejun', [TUltraLabel]);
end;

end.
 
太好了,谢谢,不过我还得找一些写控件方面的资料,不然就辜负你了。


顺便问一下,他们说的那本书在什么地方
 
ydejun在吗?:
谢谢你,我已经用你的控件弄好了,而且还移植到SpeedButton上了。
不过我对Windows消息和写控件一窍不通,所以里面有一些不太理解,可以解释一下吗?
 
是呀能不能介绍一下写控件的知识
 
接受答案了.
 

Similar threads

回复
0
查看
708
不得闲
回复
0
查看
1K
不得闲
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部