Перехват события
Вопрос таков: создается некий компонент, все равно какой, допустим TMyLabel, наследуемый от TLabel. В runtime этот компонент должен выполнять некие действия по событию допустим OnResize. Я делаю так: в конструкторе TMyLabel пишу OnResize = MyResizeHandler и все работает НО если в design-time пользователь определяет свой обработчик на это событие то нифига не работает. Билдер переопределяет обработчик уже после вызова конструктора, где я устанавливаю свой. Спрашивается как мне перехватить это событие, чем раньше после момента запуска, тем лучше? Естественно я сохраню адрес пользовательского обработчика и вызову его когда сделаю все свои дела. Не придется ли ловить виндовские сообщения типа WM_SIZE, да и не на все события бывают соответствующие сообщения.
Заранее благодарен
Цитата:
Originally posted by kelz
Доброе Вам утро/день/полярный день/полярная ночь...
Вопрос таков: создается некий компонент, все равно какой, допустим TMyLabel, наследуемый от TLabel. В runtime этот компонент должен выполнять некие действия по событию допустим OnResize. Я делаю так: в конструкторе TMyLabel пишу OnResize = MyResizeHandler и все работает НО если в design-time пользователь определяет свой обработчик на это событие то нифига не работает. Билдер переопределяет обработчик уже после вызова конструктора, где я устанавливаю свой. Спрашивается как мне перехватить это событие, чем раньше после момента запуска, тем лучше? Естественно я сохраню адрес пользовательского обработчика и вызову его когда сделаю все свои дела. Не придется ли ловить виндовские сообщения типа WM_SIZE, да и не на все события бывают соответствующие сообщения.
Заранее благодарен
Доброе Вам утро/день/полярный день/полярная ночь...
Вопрос таков: создается некий компонент, все равно какой, допустим TMyLabel, наследуемый от TLabel. В runtime этот компонент должен выполнять некие действия по событию допустим OnResize. Я делаю так: в конструкторе TMyLabel пишу OnResize = MyResizeHandler и все работает НО если в design-time пользователь определяет свой обработчик на это событие то нифига не работает. Билдер переопределяет обработчик уже после вызова конструктора, где я устанавливаю свой. Спрашивается как мне перехватить это событие, чем раньше после момента запуска, тем лучше? Естественно я сохраню адрес пользовательского обработчика и вызову его когда сделаю все свои дела. Не придется ли ловить виндовские сообщения типа WM_SIZE, да и не на все события бывают соответствующие сообщения.
Заранее благодарен
Как сабклассировать контрол см. здесь
http://forum.codenet.ru/showthread.php?s=&threadid=18908
если, что не ясно пиши...
Цитата:
Originally posted by GIZMO
Как сабклассировать контрол см. здесь
http://forum.codenet.ru/showthread.php?s=&threadid=18908
если, что не ясно пиши...
Как сабклассировать контрол см. здесь
http://forum.codenet.ru/showthread.php?s=&threadid=18908
если, что не ясно пиши...
Ну если в компоненте то лучше так:
class PACKAGE TMyLabel : public TLabel
{
protected:
void __fastcall WMSize(TWMSize* Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize)
END_MESSAGE_MAP(TComponent)
};
void __fastcall TMyLabel::WMSize(TWMSize* Message)
{
kelzHandler();
TLabel::WMSize(Message);
}
См. bcbXcw.hlp->Содержание->HandlingMessages->Overriding a message handler