gpt4 book ai didi

delphi - 识别鼠标光标下的组件不适用于 TImage 控件

转载 作者:行者123 更新时间:2023-12-03 15:47:39 26 4
gpt4 key购买 nike

我正在使用以下过程来识别 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不是窗口控件,并且它不继承自TWinControl,因此FindVCLWindow将无法找到它。就像它无法找到其祖先中没有 TWinControl 类的任何其他控件一样。

但是,有类似的函数 FindDragTarget 它将返回任何 VCL 控件,包括非窗口控件。

该函数也在Vcl.Controls中声明,就像FindVCLWindow

function FindDragTarget(const Pos: TPoint; AllowDisabled: Boolean): TControl;

它有额外的参数 - AllowDisabled 控制是否返回禁用的控件。

您应该按如下方式重写您的方法 - 请注意,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 - 识别鼠标光标下的组件不适用于 TImage 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45532593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com