Решено: проблема с "message LM_KILLFOCUS"

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Решено: проблема с "message LM_KILLFOCUS"

Сообщение RomanS » 12.11.2010 15:46:37

Здравствуйте!
Хочу добавить в компонент реакцию на потерю фокуса, делаю новый компонент с наследованием, но
у меня возникла проблема с установкой у процедур событий message.
Дело в том, что в родительском компоненте уже реализована процедура на потерю фокуса, и как только я в своем компоненте определяю процедуру
Код: Выделить всё
    procedure WMKillFocus(var Message: TLMKillFocus); message LM_KILLFOCUS;

то в родительском компоненте аналогичная процедура перестает вызываться...

Набросал небольшой тестовый пример с наследованием для TEdit (см. ниже), и выяснил следующее:
если классы описаны в одном модуле, то события по message отрабатывают у всех дочерних классах, как только я разнес классы по разным ютинам, события вызываются только у классов определенных в самом верхнем юните...

Мне нужна помощь, посоветуйте, что делать????

OC Win SP3, FPC 2.5.1 SVN 16327, Lazarus 0.9.29 SVN 28184
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось RomanS 12.11.2010 17:20:18, всего редактировалось 1 раз.
RomanS
новенький
 
Сообщения: 33
Зарегистрирован: 10.12.2007 10:08:24

Re: Проблема с "message LM_KILLFOCUS"

Сообщение Maxizar » 12.11.2010 16:58:02

Ответ банален и прост: замените
Код: Выделить всё
  TMyEdit2 = Class(TEdit)
  private
    procedure WMKillFocus(var Message: TLMKillFocus); message LM_KILLFOCUS;
  end;

на код:
Код: Выделить всё
  TMyEdit2 = Class(TEdit)
  protected
    procedure WMKillFocus(var Message: TLMKillFocus); message LM_KILLFOCUS;
  end;

Если не видете разницу подскажу я заменил private на protected - которые влияют на область видимости процедур, методов, свойств. protected - позволяет наследникам обращение к методам и перегружать их. При замене у меня ваш код работает так как вы задумали идет перехват всех событий. Так что более подробнее вернитесь к изучению области видимости в классах...
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Решено: Проблема с "message LM_KILLFOCUS"

Сообщение RomanS » 12.11.2010 17:19:53

огромное спасибо :!:
век живи, век учись...
RomanS
новенький
 
Сообщения: 33
Зарегистрирован: 10.12.2007 10:08:24


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 61

Рейтинг@Mail.ru