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

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

наследование класса


atmospheric ©   (2006-02-01 02:35:00) 

наследую класс, TMyImage = class(TImage)
в конструкторе пишу:
OnClick := MyImageClick;
по MyImageClick отробатываются какие то дествия XXX.

в программе создаю объект
MI[count] := TMyImage.Create(Form1);

мой объект создается и по событию OnClick я получаю XXX;

далее добовляю
MI[count].OnClick := OnMIClick;

объект создается, но я не получаю XXX.
где ошибка?
я пробовал так:
MI[count].OnClick := OnMIClick;override;
но это не помогло


ZeroDivide   (2006-02-01 13:46:00) [1]

TMyImage = class(TImage)
...
protected
procedure Click; override;
...
end;

procedure TMyImage.Click;
begin
... // собственные действия до стандартной обработки
inherited; // собственно стандартные действия
... // собственные действия после стандартной  обработки
  MyImageClick(Self); // <- Вставить сюда
end;


atmospheric   (2006-02-01 10:31:00) [2]

не пойму что-то :(
класс:

protected
procedure MyImageClick(Sender: TObject);
...
constructor TMyImage.Create(AOwner: TComponent);
begin
OnClick := MyImageClick;
...
procedure TMyImage.MyImageClick(Sender: TObject);
begin
XXX;
end;

объект

MI[count] := TMyImage.Create(Form1);
MI[count].OnClick := OnMIClick;
...
procedure TForm1.OnMIClick(Sender: TObject);
begin
;
end;

ни так:

procedure TMyImage.MyImageClick(Sender: TObject);
begin
inherited;
XXX;
end;

ни так:

procedure TMyImage.MyImageClick(Sender: TObject);
begin
XXX;
inherited;
end;

не работает :(

на это ругается:

 protected
 procedure MyImageClick(Sender: TObject); override;


ЮЮ   (2006-02-01 02:50:00) [3]


> объект создается, но я не получаю XXX.

Естественно, ты ведь заменил OnClick.


> где ошибка?

Не дело писать код наследника в пользовательских обработчиках событий.
Перекрывать надо методы объекта, в котором вызывается пользовательский обработчик:

TMyImage = class(TImage)
...
protected
 procedure Click; override;
...
end;

procedure TMyImage.Click;
begin
 ... // собственные действия до стандартной обработки
 inherited; // собственно стандартные действия
 ... // собственные действия после стандартной  обработки
end;

А вот inherited Click и вызоет пользовательский обработчик OnClick:

procedure TControl.Click;
begin
 if Assigned(FOnClick) and (Action <> nil) and (@FOnClick <> @Action.OnExecute) then
  FOnClick(Self)
 else if not (csDesigning in ComponentState) and (ActionLink <> nil) then
   ActionLink.Execute(Self)
 else if Assigned(FOnClick) then
    FOnClick(Self);
 end;


Джо   (2006-02-01 02:41:00) [4]

Чего ты хочешь добиться?


Наверх

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