![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пересчет координат [D6, Win95/98, Win2k]
Dmk © (2002-07-09 03:42:00)Подскажите пожалуйста, как можно пересчитать координаты левого верхнего угла Form1 в координаты Form2?
Нужно узнать находится ли Form1 над Form2.
Или можно узнать сколько и какие формы находятся над нужной?
Юрий Зотов (2002-07-11 03:01:00) [1]> Или можно узнать сколько и какие формы находятся над нужной?
MapWindowPoints решает проблему, но не полностью. Потому что одной точки для этой задачи недостаточно - ведь если Form1 лежит над Form2, то в рамках Form2 может находиться ЛЮБОЙ из четырех углов Form1, или даже вовсе ни одного угла. К чему тогда привязываться? Не к чему.
Проверять надо не отдельные точки, а пересечение прямоугольников окон. См. EnumWindows (или Screen.Forms, если интересуют только свои формы), GetWindowRect и IntersectRect. После завершения цикла получаем хэндлы всех окон верхнего уровня, пересекающихся с заданным окном.
Proton (2002-07-11 02:32:00) [2]The MapWindowPoints function converts (maps) a set of points from a coordinate space relative to one window to a coordinate space relative to another window.
int MapWindowPoints(
HWND hWndFrom, // handle of window to be mapped from
HWND hWndTo, // handle of window to be mapped to
LPPOINT lpPoints, // address of structure array with points to map
UINT cPoints // number of structures in array
);
Dmk (2002-07-09 21:07:00) [3]Спасибо! Попробую.
pusrg (2002-07-09 20:37:00) [4]Вообще-то если объект Child, то его координаты - это координаты относительно парента...
Для того чтобы узнать относительное положение объекта относительно другого, пользуйся ClientToScreen и ScreenToClient.
Dmk (2002-07-09 20:20:00) [5]Нужно узнать координаты у Child относительно Normal формы.
MBo (2002-07-09 06:02:00) [6]left и top форм в системе координат экрана известны, ничего пересчитывать не надо.