如何让我的组件检测鼠标位置?
我想编写一个小组件来显示当前控制鼠标所在的位置。 当它发现所选控件时,它应该触发消息(例如)。
但我不知道该怎么做才能始终获得鼠标的位置。 这就是我所得到的:
TMouseOverControl = class(TComponent)
private
fActive: Boolean;
fControl: TWinControl;
public
constructor Create(AOwner: TComponent); override;
procedure Loaded; override;
procedure SpotIt;
published
property Active: Boolean read fActive write fActive;
property Control: TWinControl read fControl write fControl; // when mouse is over this control show me the message
end;
constructor TMouseOverControl.Create(AOwner: TComponent);
begin
// nothing interesting here
// don't have control property here - so overrided the loaded method
inherited;
end;
procedure TMouseOverControl.Loaded;
begin
inherited;
// TForm(Owner).Mo.... := SpotIt....
// what should i do to make it work?
end;
procedure TMouseOverControl.SpotIt;
begin
// IsMouseOverControl is easy to implement
// http://delphi.about.com/od/delphitips2010/qt/is-some-delphi-tcontrol-under-the-mouse.htm
if IsMouseOverControl(Control) then
ShowMessage('Yep, U got it!');
end;
有什么想法吗?
I want to write a little component which shows me on which control mouse is currently over.
When it spot the choosen control it should fire the messaage (for example).
But I don't know what should I do to form to get the position of the mouse all the time.
This is what I've got:
TMouseOverControl = class(TComponent)
private
fActive: Boolean;
fControl: TWinControl;
public
constructor Create(AOwner: TComponent); override;
procedure Loaded; override;
procedure SpotIt;
published
property Active: Boolean read fActive write fActive;
property Control: TWinControl read fControl write fControl; // when mouse is over this control show me the message
end;
constructor TMouseOverControl.Create(AOwner: TComponent);
begin
// nothing interesting here
// don't have control property here - so overrided the loaded method
inherited;
end;
procedure TMouseOverControl.Loaded;
begin
inherited;
// TForm(Owner).Mo.... := SpotIt....
// what should i do to make it work?
end;
procedure TMouseOverControl.SpotIt;
begin
// IsMouseOverControl is easy to implement
// http://delphi.about.com/od/delphitips2010/qt/is-some-delphi-tcontrol-under-the-mouse.htm
if IsMouseOverControl(Control) then
ShowMessage('Yep, U got it!');
end;
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
那么你只需要在鼠标移动时检查/更新。因此,您可以使用
TApplicationEvents
跟踪WM_MOUSEMOVE
消息。这当然可以优化,例如还可以检查 WM_MOUSELEAVE,这样您就不必在每次鼠标移动时
FindControl
。此解决方案适用于TWinControls
及其后代。编辑:使用WM_MOUSELEAVE。
Well you only need to check/update when the mouse moves. So you could track
WM_MOUSEMOVE
messages by usingTApplicationEvents
.This could certainly be optimized, e.g. by also checking for WM_MOUSELEAVE so you don't have to
FindControl
on every mouse move. This solution works forTWinControls
and descendants.Edit: Made use of WM_MOUSELEAVE.
像这样的事情怎么样:
How about something like this: