拉撒路在光标下找到控制权

时间:2017-06-09 15:48:04

标签: cursor controls mouse lazarus

我正在使用此帖子中的以下代码。 Code from Checked Answer

我需要从几个TLabel中的一个获取鼠标光标下的Control(Label.Caption),当Label在Main From上时它工作正常。我将标签放在主窗体上的面板上,现在只能找到面板。我只希望这可以在Panel上许多标签中选择一些标签。

我尝试将标签的Z顺序更改为“带到前面”,但它没有任何区别,仍然有Panel。现在,如果它们在Panel上,我怎么能再次在光标下找到一个Label?

Lazarus似乎没有FindVCLWindow或ObjectAtPoint。

procedure TForm1.Button1Click(Sender: TObject);
var
  ctrl : TControl;
  point : TPoint;
begin
  point := Mouse.CursorPos; // Mouse pos at screen
  Dec(point.X, Left); // Adjust for window.
  Dec(point.Y, Top);
  Dec(point.Y, GetSystemMetrics(SM_CYCAPTION)); // Adjust to client area.

  ctrl := ControlAtPos(point, True, True, True);

  // I added the following
  tStr:=ctrl.Name; // DEBUG: This now shows "Panel2"
  aStr:=(ctrl as TLabel).Caption; // This used to work

end;

1 个答案:

答案 0 :(得分:2)

尝试:

procedure TForm1.Button1Click(Sender: TObject);
var
    ctrl: TControl;
    pt: TPoint;
begin
    pt := ScreenToClient(Mouse.CursorPos);
    ctrl := ControlAtPos(pt, [capfRecursive, capfAllowWinControls]);
    if Assigned(ctrl) then
        Caption := ctrl.Name
    else
        Caption := Format('%d, %d', [pt.x, pt.y]);
end;