你动态创建的label没办法添加onmouseenter
不过要实现你的问题可以自己便一个过程
pravite
procedure mouseenter(sender:tobject)
label1.color:=clredlabel1.onmousemove:=moueenter;
不过要实现你的问题可以自己便一个过程
pravite
procedure mouseenter(sender:tobject)
label1.color:=clredlabel1.onmousemove:=moueenter;
等等,如果重载 CM_MOUSEENTER也许也没什么问题。还是建议你派生一个新类,我到有这样的代码,不过是tpanel,你改一下就没有问题了。
unit NewPanel;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;
type
TEnterLeave = procedure (Sender:TObject) of object;
TNewPanel = class(TPanel)
private
{ Private declarations }
FOnEnter : TEnterLeave;
FOnLeave : TEnterLeave;
procedure WMENTER (var Msg : TMessage); message CM_MOUSEENTER;
procedure WMLEAVe (var Msg : TMessage); message CM_MOUSELEAVE;
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
property OnMouseEnter : TEnterLeave read FOnEnter write FOnEnter;
property OnMouseLeave : TEnterLeave read FOnLeave write FOnLeave;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TNewPanel]);
end;
{ TNewPanel }
procedure TNewPanel.WMENTER(var Msg: TMessage);
begin
inherited;
if Assigned(FOnEnter) then FOnEnter(self);
end;procedure TNewPanel.WMLEAVe(var Msg: TMessage);
begin
inherited;
if Assigned(FOnLeave) then FOnLeave(self);
end;end.实现了两个事件,一个是onmouseenter,一个是onmouseleave。
label[i].OnMouseEnter := LableOnMouseEnter;
end;
procedure TForm1.LabelOnMouseEnter
beginend;
procedure mouseenter(sender:tobject)
...
var
L :TLabel;
begin
L := TLabel.Create(self);
L.left..
...
L.OnMouseEnter:=mouseenter
end;
procedure mouseenter(sender:tobject)
begin
TLanel(Sender).color:=clred
end;
动态创建是定义
lab[i].OnClick;=LabelClick;//自定义
procedure TForm.LabelClick(Sender: TObject);
if sender is TLabel then
begin
lab.Color :=clred;
end;
当你单击时,则变成红色。
Label.tab := i;
在以后,你可以用程序读tag的值,就可知是哪一个label了,试一试。
其实,在这儿,你只用了一个事件,但是,每个label的onMenseEnter都可以调用,不过,在动态创建时要设置它能接受焦点才可以;
更详细的如下:
pravite
procedure mouseenter(sender:tobject)
...
var
L : TLabel;
I : Integer;
Str : String;
begin
for I := 0 to 20 do
begin
Str := Label + IntToStr(I)
L := TLabel.Create(self);
L.Name := Str;
L.left..
...
L.OnMouseEnter:=mouseenter
end;
end;
procedure mouseenter(sender:tobject)
begin
TLanel(Sender).color:=clred
end;