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

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

Перевод фокуса [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 для того, где был фокус до тыкания


Наверх

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