![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перевод фокуса [D5, Win95/98]
Grizli © (2002-10-25 09:08:00)Совсем запарил.
Долбаный TWinControl, какое он обрабатывает сообщение когда я переношу фокус на другой контрол мышью.
CM_Exit, WM_KillFocus, WM_Activate работают тоько при использовании клавиатуры (TAB, стрелки...).
Nick N A (2002-10-30 08:21:00) [1]напиши
TYourControl=class(TWinControl)
private
Procedure OnMouseLeave(Var MSG:TMessage); message Wm_MouseLeave;
и нажми Ctrl+Shift+C
Grizli (2002-10-30 08:07:00) [2]Все разобрался. Сам был виноват, а ошибка заключалась вот в чем (если кому интересно):
как написал Alex4444444444 "esli, konechno, focus dejstvitel"no byl".
я при LButtonDown отсылал SendMessage(Handle, WM_SETFOCUS, 0, 0 ), ну вроде бы срабатывало но не совсем,
при клике на другом контроле KillFocus`а уже не было.
А решение оказалось проще легкого надо было вместо сообщения спользовать метод SetFocus , и все сразу заработало как надо.
Всем спасибо за помощь осбенно Alex`у за верный совет, и KSergey`у за самый длинный ответ.
Игорь Шевченко (2002-10-28 09:20:00) [3]Еще можно обрабатывать сообщение WM_ACTIVATE :-)
KSergey (2002-10-27 13:51:00) [4]> Grizli © (27.10.02 11:14)
Вообще-то, после такого "подробнейшего объяснения" хочется ответить в духе Подгорецкого: "В 17 строку с низу".
В книге С.Холзер "Visual C++. Учебный курс" (прошу прощения у дельфистов за употребление ненормативной лексики) утверждается следующее: "При потере фокуса программа получает сообщение WM_KILLFOCUS, а при получении - WM_SETFOCUS". Соответственно в их обработчики и предлагается вставить эти ф-ции. Обрабатываются эти сообщения в главном окне (сужу по приведенному в книге примеру). Сам не проверял.
PS: блин, ответ получился длинее "подробного" вопроса. Хорошо ли?
Grizli (2002-10-27 11:14:00) [5]Извеняюсь за неточный вопрос.
Попробую объяснить подробней:
дело в том что я никак не въеду куда мне вставить функции ShowCaret и HideCaret.
Alex4444444444 (2002-10-27 11:09:00) [6]AFAIK, CM_Enter i CM_EXit ne prohodyat, kogda focus uhodit v drugoe prilozhenie. WM_KILLFOCUS prohodit vsegda (esli, konechno, focus dejstvitel"no byl i deystvitel"no ushel!)
Nick N A (2002-10-27 08:28:00) [7]Wm_MouseLeave
Wm_MouseHover
Игорь Шевченко (2002-10-25 09:55:00) [8]CM_Enter, WM_SetFocus для того, куда тыкаешь мышью.
CM_Exit, WM_KillFocus для того, где был фокус до тыкания