|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.08.2012, 02:26 | #1 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
клик мышкой мимо окна
То самое событие, когда мышка была нажата за пределами окна.
интернет на такой запрос отвечает байками про WM_ACTIVATE, мол, это сообщение посылается, когда окно теряет фокус. А если мы кликнем мышкой мимо окна, то оно, ведь, по логике теряет фокус, правильно? т.е. этому окну будет послано сообщение WM_ACTIVATE. есть наследник TCustomControl, в нем описываю процедуру: Код:
т.к. эта процедура не запускается вообще. Т.е. не приходит сообщения WM_ACTIVATE, куда не тыкай - в окно, мимо окна... а вопрос такой: как зафиксировать событие, когда мышка была нажата мимо конкретного окна? |
13.08.2012, 02:42 | #2 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Хех, какая у вас странная логика. Если юзер кинул мышку мимо окна, то WM_ACTIVATe летит в того, кому его кинули, а не тому, кому собирались кинуть.
Делайте хук на тыки мышкой и проверяйте, попал или нет юзер в область вашего окна или нет. |
13.08.2012, 07:46 | #3 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
если окно/контрол(!) потеряли фокус, то они получают WM_KILLFOCUS.
если вы хотите сделать типа как у SPy++ выбор окна, то там немного иначе. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
13.08.2012, 08:41 | #4 | ||
Форумчанин
Регистрация: 01.06.2009
Сообщений: 108
|
Цитата:
WM_ACTIVATE: Цитата:
|
||
13.08.2012, 15:21 | #5 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
моя логика как раз соответствует тому, что написал volvo877:
сообщение посылается обоим окнам - которое получает фокус и которое теряет фокус... хотя я тут подумал, даже ЭТО не совсем то что нужно... кстати с формой такое получалось - WA_INACTIVE, событие происходило, когда кликал мимо формы, а вот с наследником TCustomControl не прокатывает - процедура, назначенная на WM_ACTIVATE не запускается вообще, куда не тыкай. пример того, чего пытаюсь добиться - выпадающий список. если список открыт, то любое нажатие мышкой вне этого списка приведет к его закрытию. сразу скажу, мне не нужен именно список, мне нужен сам механизм. попробовал WM_KILLFOCUS... это сообщение приходит, когда фокус с моего контрола переходит на другой контрол. например, если попытаюсь нажать кнопку. но по форме, например, спокойно можно долбить мышкой и ничего не произойдет. клик мышкой по форме, почему-то не переносит на нее фокус... хук на мышку и сравнение - это неплохо, но это уже вмешательство в работу винды, да и больше смахивает на "костыль", или я ошибаюсь? а хочется сделать "по-хорошему", т.е. без изврата. как это, например, сделано в стандартном выпадающем списке? Последний раз редактировалось xrob; 13.08.2012 в 15:31. |
13.08.2012, 15:48 | #6 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
13.08.2012, 16:15 | #7 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
CM_CANCELMODE...
то, что доктор прописал! если фокус на моем контроле и мышка нажата мимо него - бинго, получает это сообщение! единственный минус - клик мимо программы не приводит к этому событию... но в остальном - то что нужно! =) |
13.08.2012, 16:30 | #8 | ||
Форумчанин
Регистрация: 01.06.2009
Сообщений: 108
|
Цитата:
Цитата:
|
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
клик мышкой при определенном событии | legenda1 | Общие вопросы Delphi | 6 | 01.02.2012 03:21 |
TreeView клик мышкой | Slukka | C# (си шарп) | 1 | 28.05.2011 00:35 |
Как отследить был ли клик мышкой в приложении? | MyLastHit | Общие вопросы Delphi | 3 | 20.12.2010 18:23 |
Выбор окна мышкой | Altera | Win Api | 5 | 19.05.2010 01:49 |
Клик мимо итема(Item) в ShellListView | zallza | Общие вопросы Delphi | 2 | 11.05.2010 15:22 |