Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получить координаты компонента на экране


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо