![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
наследование класса
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]Чего ты хочешь добиться?