![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Как мне обрабатывать сообщение WM_LBUTTONDOWN по нажатию на кнопке? Т.е. нужно определить на какой кнопке была нажата левая кнопка мыши, попробовал так:
не работает, где hButton это хендл кнопки |
|||
|
||||
| Sunvas |
|
||||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: нет Всего: 89 |
Создать наследника и в нем ловить это сообщение.
А не проще ли воспользовать событием onmouseup/onmousedow? Там в переменной Button храниться такая инфа. -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
||||
|
|||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Я на одном API делаю, без VCL
|
|||
|
||||
| ArtemRubtsov |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 12.11.2006 Репутация: нет Всего: нет |
можно координаты компонентов брать на форме и исходя из этого сделать вывод где была нажата кнопка
но лучше всего создать обработчика onmousedown для кнопки Если есть кнопка (пусть даже созданная при старте приложения) значит у нее есть onmousedown по умолчанию, просто нужно его описать и будет счастье а еще у кнопки есть OnClick :) Это сообщение отредактировал(а) ArtemRubtsov - 24.11.2006, 04:51 |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
обрабатывай не WM_LBUTTONDOWN, а WM_COMMAND. В lParam будет хэндл кнопки
-------------------- Обижено школьников: 8 |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Почитал про WM_COMMAND, там про клавиши ускорителя, что это? И про пункты меню...
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
гарячие комбинации
а еще там про контролы, например кнопки Добавлено @ 10:38 если HIWORD(wParam)>1 то это точно контрол. Но можно просто сравнить HWND(lParam) с хэндлом кнопки и если совпадает - вызвать твой обработчик -------------------- Обижено школьников: 8 |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
А если нужно еще WM_LBUTTONUP обрабатывать?
Добавлено @ 10:58 А еще попробовал я WM_COMMAND обрабатывать, у меня почему-то он срабатывает на двойном щелчке мыши а не на одном.. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
вот так вроде должно устроить
Это сообщение отредактировал(а) bems - 24.11.2006, 11:37 -------------------- Обижено школьников: 8 |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Я так и сделал с WM_COMMAND...
Да, мне именно нажатие и отпускание обрабатывать нужно... |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
отредактировал сообщение, теперь вроде то что надо
Добавлено @ 11:43 WM_COMMAND можно и выкинуть -------------------- Обижено школьников: 8 |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Спасибо большое!
|
|||
|
||||
| BUGOR |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 12.3.2006 Репутация: 2 Всего: 16 |
Тебе координаты мыши в момент клика известны? Известны. Тогда юзай WindowFromPoint, он вернёт нэндл объекта над которым находится курсор.
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
В родительском окне координаты не известны - WM_LBUTTONDOWN приходит кнопке, а не родителю.
Если пользоваться GetCursorPos то нужно знать хотя бы момент нажатия -------------------- Обижено школьников: 8 |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Кстати насчет WindowFromPoint, она определяет хендл любого окна, даже чужого? А есть какаянибудь типа этой функции, которая определяет хендл только в моем приложении, а если в точке находится чужое окно, то например вернет 0?
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
вот
-------------------- Обижено школьников: 8 |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Спасибо еще раз большое!!!
|
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
В главной процедуре обрабатываю сообщение WM_NCHITTEST,
И не доходит сообщение WM_LBUTTONDOWN до кнопки, сделав его обработку сабклассингом... Что делать? |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
вероятно это потому что ты не вызываешь DefWindowProc. В каких случаях вызывать, а в каких - нет, зависит от того, какого ты хочешь добиться эффекта. Например если ты не хочешь, чтобы окно перетаскивалось за кнопку, то Result := HTCAPTION делай только если курсор не на кнопке, а в противном случае result:=DefWindowProc(...
не очень понятно, как должно по твоему себя вести окно... -------------------- Обижено школьников: 8 |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
если начинаешь строить из себя заголовок окна, то смотри WM_NCLBUTTONDOWN и WM_ENTERSIZEMOVE
-------------------- Обижено школьников: 8 |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Дело в том что сообщение WM_LBUTTONDOWN вообще не доходит до кнопки, т.е. она не нажимается...
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
что такое Window и hWindow? если Result := HTCAPTION может произойти и при нажатии на кнопку, то этого и следует ожидать - вместь нажатия окно начнет перетаскиваться. А если по остальному коду выходит, что кнопка исключена в этой ситуации, то нужно предусмотреть для нее вызов DefWindowProc -------------------- Обижено школьников: 8 |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Window: HWND это первый парамент WindowProc, а hWindow это хендл главного окна
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
не воспроизводится. Может проблема в чем-то другом? дай больше кода
-------------------- Обижено школьников: 8 |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Я разобрался что было не так.. Я сабклассинг делал чуть-чуть неправильно...
|
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |