Y позиция компонента на экране, где компонент находится над другими компонентами - PullRequest
1 голос
/ 10 апреля 2020

Я хочу получить каждое действие, особенно позицию фокуса. Я делаю код, как это, но результаты, полученные, если компонент выше других компонентов, получают неправильное значение. что не так в следующем коде?

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;

это интерфейс

enter image description here

1 Ответ

1 голос
/ 10 апреля 2020

просто измените эту строку:

P := ClientToScreen(LFocused.Position.Point);

на

P := LFocused.LocalToAbsolute(PointF(0,0));
...