Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Обработка событий в наследуемом компоненте


Автор: Dayana 26.12.2005, 12:27
Привет всем!
1000 лет не задавала, а также не отвечала на вопросы. Но вот вдруг созрело... пока задать...
Давно не наследовала компоненты... стормозила по страшному.... а надо срочно...

Наследую компонент, в частности от TwwDBGrid. Мне нужно, чтобы на событие OnColWidthChanged выполнялся мой код. Ну и понятно код пользователя smile . Определяю свой метод для данного события, например MyColWidthChanged. Событие пользователя запоминаю в SaveColWidthChanged.
код1
Код

...
  if Assigned(OnColWidthChanged) then
    SaveColWidthChanged:= OnColWidthChanged;
  OnColWidthChanged := MyColWidthChanged;
....

код 2
И в методе MyColWidthChanged пишу свой код и вызываю событие пользователя:
Код

procedure TMyGrid.MyColWidthChanged(Sender: TObject; Column: Integer);
begin
  if Assigned(SaveColWidthChanged) then
    SaveColWidthChanged(Sender, Column);
  ---  мой код  ----
end;


Вопрос: где можно перекрыть событие пользователя и заменить его своим? Т.е. выполнить код1. Если выполняю на Create, то здесь событие пользователя еще не видно. Т.е. на обработчике еще nil. А где тогда видно?

Спасибо!

Автор: _hunter 26.12.2005, 12:31
при наследовании перекрывают не On а Do. т.е. в нем выполняем свой код и делаем
if Assigned(OnColWidthChanged) then
OnColWidthChanged(...) -- вызов пользовательского обработчика

Автор: Dayana 26.12.2005, 12:49
_hunter, все бы хорошо, но у данного события нет Do. Обработчик вызывается в MouseUp. Но если я перекрываю MouseUp, то плохо работает, в частности грид меняет высоту заголовка, короче глючит. Если посмотреть сорсы, то на самом деле обраотчик события вызывается в середине метода. А когда я перекрываю MouseUp, то свой код могу выполнить либо перед inherited, либо после. Т.е. не там, где на самом деле выполняется событие. Все хорошо работает, когда именно перекрываю событие.
Добавлено @ 12:50
В любом случае, вопрос открытый, в какой момент события компонента получают свои обработчики, определенные пользователем?

Автор: _hunter 26.12.2005, 13:11
значит нужно перекрывать MouseUp и перенести его код в свой класс...

Автор: Dayana 26.12.2005, 13:15
_hunter, да, спасибо, похоже другого выхода нет...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)