我想获得所有活动,尤其是焦点位置。我编写这样的代码,但是如果该组件位于其他组件之上,则获得的结果将获得不正确的值。以下代码中有什么不正确?
procedure TForm1.FormFocusChanged(Sender: TObject);
var
LFocused : TControl;
LFocusRect: TRectF;
P: TPointF;
begin
if Assigned(Focused) then
begin
LFocused := TControl(Focused.GetObject);
LFocusRect := LFocused.AbsoluteRect;//to get height,top,etc
P := ClientToScreen(LFocused.Position.Point);
Text1.Text := 'Y '+ P.Y.ToString;
end;
end;
这是界面
答案 0 :(得分:1)
只需更改此行:
P := ClientToScreen(LFocused.Position.Point);
到
P := LFocused.LocalToAbsolute(PointF(0,0));