![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получить координаты компонента на экране
DelphiN! © (2006-02-08 08:15:00)Как получить координаты компонента (x,y) на экране(Screen), а не на родителе
DelphiN! (2006-02-08 10:16:00) [1]
> [6] MBo © (08.02.06 10:01)
Ну вот, вечно я уще трудности :) Зато мой вариант тоже работает :)
MBo (2006-02-08 10:01:00) [2]>DelphiN! © (08.02.06 08:37) [2]
>И как ей пользоваться?
procedure TForm20.Button1Click(Sender: TObject);
var
P: TPoint;
begin
P := Button1.ClientToScreen(Point(0,0));
Caption := Format('My screen coords: %d: %d', [P.X, P.Y]);
end;
TUser (2006-02-08 09:45:00) [3]Mouse.CursorPos
DelphiN! (2006-02-08 08:46:00) [4]Все, уже сам разобрался, оказалось все легко, просто не проснулся еще, не думается :)
function TForm1.GetComponentClientPos(Comp: TWinControl): TPoint;
var
Parent: TWinControl;
begin
Result.X := Comp.Left;
Result.Y := Comp.Top;
Parent := Comp.Parent;
while Parent <> nil do
begin
Result.X := Result.X+Parent.Left;
Result.Y := Result.Y+Parent.Top;
Parent := Parent.Parent;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
p: TPoint;
begin
p := GetComponentClientPos(Button1);
showmessage(inttostr(p.X)+#13#10+inttostr(p.Y));
end;
evvcom (2006-02-08 08:45:00) [5]
> Но не хотелось бы складывать все Leftы всех родителей компонента
> "вручную"
ClientToParent, только зачем? Вызывай ClientToScreen с координатами 0,0 метод своего компонента, а не родителя и не формы.
DelphiN! (2006-02-08 08:37:00) [6]
> [1] MBo © (08.02.06 08:20)
И как ей пользоваться? Я конечно могу получить координаты для отдельного компонента так x := Form1.Left+Parent.Left+Button1.Left. Но не хотелось бы складывать все Leftы всех родителей компонента "вручную", хотелось бы написать функцию вида function GetScreenComponentPos(Component: TObject): TPoint;
MBo (2006-02-08 08:20:00) [7]ClientToScreen