| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Координаты курсора и кнопки |
| Автор: Marlin 3.3.2006, 10:36 |
| Такая проблема. Как можно вычислить, в определенное время находится ли курсор мыши над кнопкой по координатам с курсором мыши все ясно GetCursorPos(P:TPoint). Тем самым получаю координаты мыши. А вот с кнопкой как быть? И сравнить? |
| Автор: Guedda 3.3.2006, 10:39 | ||
А что тут делать? Обрабатываешь движение мыши по кнопке, и все.
|
| Автор: Marlin 3.3.2006, 10:50 | ||
| Нет так не пойдет. Я не использую этот обработчик. вот мой код
Добавлено @ 10:51 Что-то не пойму пользуюсь тегом, <code> </code> а результата не вижу. И кнопки редактирования у меня не отображаются |
| Автор: Guedda 3.3.2006, 10:55 |
| Используй не <code> а [соde], т.е. Квадратные скобки ставь. Ну и в чем проблема по кнопке? |
| Автор: Marlin 3.3.2006, 11:02 |
| Кнопки на форуме, которые вставляют теги - они не отображаются в браузере MOZILA если ты про эти кнопки спрашиваешь |
| Автор: remax 3.3.2006, 11:04 | ||||
???? 1) Все потомки TComponent могут посылать сообщения CMMouseEnter,CMMouseLeave во время пересечения курсором мыши границ компонента. Надо только правильно их обработать. Вручную, как у Вас, делать ничего не надо. 2) Предусмотрена стандартная обработка в виде события MouseMove, которое возникает только при перемещении мыши над компонентом! см. что написал Guedda. Добавлено @ 11:05
А отображение рисунков - включено? |
| Автор: Marlin 3.3.2006, 11:09 |
| Я итак использую такие события. Специально разбирался с компонентами "спясибо винградцам помогли". В итоге написал компонент, который обрабатывает эти события. Но дело в том, что в процедуре обработчике я использую рекурсию обновления картинок. "см. код выше" Так вот в самом обработчике мне нужно знать находится ли все еще курсор над кнопкой, если да я рекурсию использую, а если нет обработчик заканчивает свою работу |
| Автор: remax 3.3.2006, 11:15 |
| Используй логическую переменную, в которую автоматически по событиям или обработкой сообщений заноси значения: - при входе курсора мыши, по сообщению CM_MouseEnter - true - при выходе курсора мыши, по сообщению CM_MouseLeave - false И анализируй только содержимое этой переменной! |
| Автор: Marlin 3.3.2006, 11:21 |
| Вот именно, я знаю как получить координаты мыши относительно экрана, а вот кнопки не знаю |
| Автор: remax 3.3.2006, 11:24 | ||
Или используй логический цикл, внутри обработчика или оформи как отдельную процедуру. Не очень красиво и правильно в данном случае использовать рекурсивный вызов обработчика - запутанно и загаживается стек. Если курсор мыши остается над кнопкой достаточно долго - Ваша программа будет вылетать по ошибке. Нет, однозначно только логический цикл! |
| Автор: _hunter 3.3.2006, 11:24 |
| о кнопки есть Left и Top относительно экрана. дальше продолжать? |
| Автор: remax 3.3.2006, 11:26 | ||
Левый верхний угол x=Button1.left y=Button1.Top Правый нижний угол x=Button1.left+Button1.Width y=Button1.Top+Button1.Height |
| Автор: Демо 3.3.2006, 11:28 | ||||
Ясно. Держи пример.
|
| Автор: Marlin 3.3.2006, 11:32 |
| Hanter Я думал Left и Top это относительно формы за пример спасибо сейчас испробую. Добавлено @ 11:35 Спасибо все работает? Еще раз спасибо за пример |
| Автор: _hunter 3.3.2006, 12:15 |
| murlin смотря что ты понимаеш под экраном. но никто не мешает тебе приплюсовать еще и Left и Top формы... |
| Автор: Guedda 3.3.2006, 12:17 | ||
Можно сделать так:
|
| Автор: Tkashey 22.3.2007, 21:39 |
| Блин, читал читал я эту статью да так и не понял как определить координаты курсора мыши над компонентом в системе координат компонента (компонент не знает где он создан - то ли просто на форме то ли на наложеных друг на друга панелях)? (Указанные _hunter'ом методы компонентов left и top выдают координаты левого верхнего угла всё-таки в системе координат родительского компонента, а функция GetCursorPos(P) объекта Mouse в системе координат экрана) объясните пож. как решить эту проблему |
| Автор: VICTAR 22.3.2007, 22:42 | ||
Ну что-нибудь типа такого (три панели разных размеров лежат друг на друге)
Пример в атаче |
| Автор: Tkashey 22.3.2007, 23:34 | ||
| Спасибо, пример ясен а как в следующем обработчике я могу получить координаты мыши x,y? (в системе координат компонента, без использования GetWindowRect), т.е. что и куда нужно добавить?
|
| Автор: VICTAR 22.3.2007, 23:37 |
| Заходи еще |
| Автор: VICTAR 23.3.2007, 21:19 | ||||
либо так
либо так
|