另外一种方法,你可以让每个控件这样做:当鼠标进入时,放大,离开时,缩小。
TYPE
TBUTTON1=CLASS(TButton)
...
protected
procedure MouseEnter(var Msg:Tmessage);
message cm_mouseenter;
procedure MouseLeave(var Msg:TMessage);
message cm_mouseLeave;
end;
Tform1=class(Tform)
button1:=Tbutton1;
...
end;
...
begin
...
procedure tbutton1.mouseenter(var msg:tmessage);
begin
放大;
end;
procedure tbutton1.mouseleave(var msg:tmessage);
begin
复原;
end;
...
end.
TYPE
TBUTTON1=CLASS(TButton)
...
protected
procedure MouseEnter(var Msg:Tmessage);
message cm_mouseenter;
procedure MouseLeave(var Msg:TMessage);
message cm_mouseLeave;
end;
Tform1=class(Tform)
button1:=Tbutton1;
...
end;
...
begin
...
procedure tbutton1.mouseenter(var msg:tmessage);
begin
放大;
end;
procedure tbutton1.mouseleave(var msg:tmessage);
begin
复原;
end;
...
end.
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
ShowMessage(Button1.Name+Button1.ClassName);
end;
即在控件的MouseMove中处理放大效果,在FORM的MouseMove中处
理还原效果。至于名称、类型那根本太简单了,就像dxz_pl那样
,只不过,如果你想写一个针对不同控件类型的通用事件,那可
以使用Is、As操作符来判断,如:
procedure Tform1.CommonMouseMove(Sender:TObject;Shift:TShiftState;X,Y:Integer);
begin
if Sender is TButton then 处理按钮类型的效果
else if Sender is TEdit then 处理编辑框类型的效果
else ...
end;
当然,要有好的效果,应该像Thinking_man那样,继承一个TButton类,
并为其加入MouseEnter及MouseLeave消息,并在获取该消息时做以上处
理,如果你的控件类型太多,这个方法就太麻烦了,因为TEdit,TMemo等
继承自TWinControl的类都没有MouseEnter及MouseLeave事件。具体用哪
种方法,自己斟酌吧。