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

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

Координаты мыши относительно TPanel [D7, XP]


Shastox ©   (2007-03-11 01:28:00) 

Здравствуйте.

Такая задачка:
На форме есть TPanel, нужно получить координаты курсора мыши относительно этой TPanle.

Ковырялся с фукциями, а точнее с их комбинациями GetCursorPosи ScreenToClient, но получались какие-то не понятные числа,а не координаты относительно панели.

Помогите,  пожалуйста.


Германн   (2007-03-12 02:54:00) [1]


> Shastox ©   (12.03.07 00:22) [11]

А про контекстную справку ты до сих пор не слышал? Т.е. ты не знаешь как получить справку находясь внутри IDE?
Я уже не говорю о CodeComplition, чтоб его!


Shastox   (2007-03-12 00:22:00) [2]


> Поэтому насчет не той справки Вы либо присочинили, либо
> смотрели ее тоже "по диагонали".

Я смотрел ее, когда использовал версию:
var
P:TPoint;
....
GetCursorPos(P);
....
ScreenToClient(p);
P.X:=P.X-Panel1.Top;
P.Y:=P.Y-Panel1.Left

А про первый параметр, я думал, что раз я его не пишу, то может он ставится автоматически как-то, т.е указывает на мою главную форму. Да, я напутал, но началось с того, что я посмотрел не в ту справку. Если бы я туду посмотрел бы сразу, то и вопросов бы не было.


Юрий Зотов   (2007-03-11 14:33:00) [3]

> Shastox ©   (11.03.07 14:22) [6]

> причина в том, что я смотрел в  Windows SDK

В приведенном Вами коде ни один вызов ScreenToClient не содержит двух параметров - везде один. Более того, вы явно вызываете метод VCL:
Panel1. ScreenToClient(p)

Поэтому насчет не той справки Вы либо присочинили, либо смотрели ее тоже "по диагонали".


Johnmen   (2007-03-11 14:30:00) [4]


> Ну и зачем гадости писать?

Это такой юмор. Не всем доступен... :)))


Johnmen   (2007-03-11 14:29:00) [5]


>  Просто причина в том, что я смотрел в  Windows SDK,

А-а-а... Лучше уж сразу в справочник юного химика...:)
Вобщем, какого .. ты в эту справку полез?


Shastox   (2007-03-11 14:28:00) [6]

Спасибо, разобрался.


Shastox   (2007-03-11 14:22:00) [7]


> Ёкарный бабай! Ты даже не удосужился почитать F1, чтобы
> сделать для себя открытие - ScreenToClient является функцией.
> ..

А ты сам смотрел в справку? Просто причина в том, что я смотрел в  Windows SDK, а там написано:

BOOL ScreenToClient(

   HWND hWnd, // window handle for source coordinates
   LPPOINT lpPoint  // address of structure containing coordinates  
  );

....
Return Values

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.


> Дык он же "ковырялся" :) А читать? Чукча не читатель!

Ну и зачем гадости писать?


Германн   (2007-03-11 02:37:00) [8]


> Johnmen ©   (11.03.07 02:23) [4]
>
> Ёкарный бабай! Ты даже не удосужился почитать F1, чтобы
> сделать для себя открытие - ScreenToClient является функцией.
> ..

Дык он же "ковырялся" :) А читать? Чукча не читатель!


Johnmen   (2007-03-11 02:23:00) [9]

Ёкарный бабай! Ты даже не удосужился почитать F1, чтобы сделать для себя открытие - ScreenToClient является функцией...


Shastox   (2007-03-11 02:06:00) [10]


> Так ты и приведи код этих "ковыряний".


Вот мой код:


var
P:TPoint;
....
GetCursorPos(P);
....
ScreenToClient(p);
P.X:=P.X-Panel1.Top;
P.Y:=P.Y-Panel1.Left;



> Используй методы TControl'а (в твоём случае это TPanel)
> - ScreenToClient и ClientToScreen.

Попробовал вот так, но все равно не получается:

var
P:TPoint;
....
GetCursorPos(P);
....
Panel1.ScreenToClient(p);


Проверяю так: ставлю курсор мыши в левый верхний угол TPanel'и - координаты должны быть близки к 0:0, но там совершенно другие числа.


Германн   (2007-03-11 01:49:00) [11]


> Ковырялся с фукциями, а точнее с их комбинациями GetCursorPos
> и ScreenToClient, но получались какие-то не понятные числа,
> а не координаты относительно панели.

Так ты и приведи код этих "ковыряний".


Johnmen   (2007-03-11 01:39:00) [12]

Используй методы TControl'а (в твоём случае это TPanel) - ScreenToClient и ClientToScreen.


Наверх

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