鼠标光标下的识别组件不适用于 TImage 控件
Identify Component under mouse cursor does not work with TImage Control
我正在使用以下过程来识别 Delphi XE3 中鼠标下的控件。 vcl.contols
一切正常。但是,当鼠标悬停在 TImage
上时,不会返回控件名称。
procedure TMainForm.ApplicationEvents1Idle(Sender: TObject; var Done: oolean);
var
ctrl : TWinControl;
begin
ctrl := FindVCLWindow(Mouse.CursorPos);
if ctrl <> nil then begin
Label2.caption := ctrl.Name;
//do something if mouse is over TLabeledEdit
if ctrl is TLabeledEdit the begin
Caption := TLabeledEdit(ctrl).Text;
end;
end;
end;
是否有一种简单的方法来访问 TImage
的名称 - 我是否遗漏了一些非常简单的东西?
FindVCLWindow
查找 TWinControl
的后代。由于 TImage
不是 windowed 控件并且它不继承自 TWinControl
,因此 FindVCLWindow
将无法找到它。就像它将无法在其祖先中找到任何其他不具有 TWinControl
class 的控件一样。
但是,有一个类似的函数 FindDragTarget
可以 return 任何 VCL 控件,包括非 window 控件。
这个函数也在Vcl.Controls
中声明,就像FindVCLWindow
function FindDragTarget(const Pos: TPoint; AllowDisabled: Boolean): TControl;
它有额外的参数 - AllowDisabled
控制是否 return 禁用控件。
您应该按如下方式重写您的方法 - 请注意 ctrl
必须重新声明为 TControl
procedure TMainForm.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
var
ctrl : TControl;
begin
ctrl := FindDragTarget(Mouse.CursorPos, true);
if ctrl <> nil then
begin
Label2.caption := ctrl.Name;
...
end;
end;
我正在使用以下过程来识别 Delphi XE3 中鼠标下的控件。 vcl.contols
一切正常。但是,当鼠标悬停在 TImage
上时,不会返回控件名称。
procedure TMainForm.ApplicationEvents1Idle(Sender: TObject; var Done: oolean);
var
ctrl : TWinControl;
begin
ctrl := FindVCLWindow(Mouse.CursorPos);
if ctrl <> nil then begin
Label2.caption := ctrl.Name;
//do something if mouse is over TLabeledEdit
if ctrl is TLabeledEdit the begin
Caption := TLabeledEdit(ctrl).Text;
end;
end;
end;
是否有一种简单的方法来访问 TImage
的名称 - 我是否遗漏了一些非常简单的东西?
FindVCLWindow
查找 TWinControl
的后代。由于 TImage
不是 windowed 控件并且它不继承自 TWinControl
,因此 FindVCLWindow
将无法找到它。就像它将无法在其祖先中找到任何其他不具有 TWinControl
class 的控件一样。
但是,有一个类似的函数 FindDragTarget
可以 return 任何 VCL 控件,包括非 window 控件。
这个函数也在Vcl.Controls
中声明,就像FindVCLWindow
function FindDragTarget(const Pos: TPoint; AllowDisabled: Boolean): TControl;
它有额外的参数 - AllowDisabled
控制是否 return 禁用控件。
您应该按如下方式重写您的方法 - 请注意 ctrl
必须重新声明为 TControl
procedure TMainForm.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
var
ctrl : TControl;
begin
ctrl := FindDragTarget(Mouse.CursorPos, true);
if ctrl <> nil then
begin
Label2.caption := ctrl.Name;
...
end;
end;