当鼠标在某一控件上时,如何知道该控件的名称和类型

wufushun 2000-07-04 10:20:00
我在编程时,当鼠标经过某一些控件时,我希望它自动放大,移开后又恢复原来大小。但不知如何获得当前鼠标位置下的控件名称和类型,望各位高手不佞赐教。
...全文
200 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeah 2000-07-05
  • 打赏
  • 举报
回复
dxz_pl的代码需要同时处理MouseMove及窗体的MouseMove事件,
即在控件的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事件。具体用哪
种方法,自己斟酌吧。
dxz_pl 2000-07-05
  • 打赏
  • 举报
回复
以按钮为例:
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
ShowMessage(Button1.Name+Button1.ClassName);
end;
thinking_man 2000-07-05
  • 打赏
  • 举报
回复
另外一种方法,你可以让每个控件这样做:当鼠标进入时,放大,离开时,缩小。
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.

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧