如何判断当前鼠标是否在某个控件上(注意:有可能都个控件重合在一起)
解决方案 »
- 怎樣看sql語句,兄台。
- [散分学习]C/S开发中数据库连接信息的存储
- 在窗体创建时如何在combobox下拉单里加载数据库字段~~新手急等,送高分。
- 请问finalization是什么意思,起什么作用呀?
- 谁有InstallShield Express for Delphi6的下载地址???多谢!!!
- 求助,谁能帮我想一个方案!(关于跨平台的文件操作)
- Delphi JNI 重复创建JavaVM时失败,返回值-1
- 数据查询
- 有没有 IP Address Control 控件?
- Delphi FileWrite函数
- delphi wlanapi.dll下载
- Edit,Memo都没办法完全保存所输入的内容,怎么一回事?
var
h:HWND;
p:TPoint;
con:TControl;
begin
GetCursorPos(p);
h := WindowFromPoint(p);
if h > 0 then
begin
con := FindControl(h);
ShowMessage(con.ClassName);
//处理con
end;
end;
代码生成的EXE使用时报错。
只是组件的类型.
VCL的消息机制是全部由Application来传递的,所有的消息都要经过Application来处理
所以,只需要处理Application.OnMessage事件就可以了
具体代码可以参考下面unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;type
TForm1 = class(TForm)
Panel1: TPanel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
OldMessage: TMessageEvent;
procedure DoMessage(var Msg: TMsg; var Handled: Boolean);
function CheckMouseInRect(ControlHandle: THandle): Boolean;
end;var
Form1: TForm1;implementation{$R *.dfm}function TForm1.CheckMouseInRect(ControlHandle: THandle): Boolean;
var
r: TRect;
p: TPoint;
begin
GetWindowRect(ControlHandle,r);
GetCursorPos(p);
Result := PtInRect(r,p);
end;procedure TForm1.DoMessage(var Msg: TMsg; var Handled: Boolean);
var
c: array[0..255] of char;
begin
if Assigned(OldMessage) then
OldMessage(Msg,Handled);
if Msg.message = WM_MOUSEMOVE then
begin
if CheckMouseInRect(Panel1.Handle) then
begin
GetClassName(msg.hwnd,c,256);
ShowMessage(c);
end;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
OldMessage := Application.OnMessage;
Application.OnMessage := DoMessage;
end;end.
你这个只是组件的类型名,并不是组件的name
还有你这个只是针对整个事件处理,并不针对单个组件.
并非是获得一个名字为目的,楼主都是猩猩了,这个应该看的明白吧
你看懂我说的没有?我就是说你的获取的不过是组件的name.
我判断到鼠标在上面,我就ShowMessage了,什么都没做,弹出一个名字而已
自然获取的只不过是组件的name了,这个还要一次又一次的点出来吗?晕!我
怎么不知道获得的只是组件的名字呢,不过是一个例子罢了,至于怎么用,自然是自己扩展
各取所需,举一反三嘛,莫非我还一定要写一个完全代码?
你也该猩猩了,既然能取出鼠标当前所在控件的handle,那和你给定的handle比较一下不行吗?