Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.02;
Скачать: CL | DM;

Вниз

Помогите написать наследника класса   Найти похожие ветки 

 
Vogus   (2003-09-18 10:57) [0]

Например есть некий объект AnyComp, у него есть метод AnyComp.Doing(...); - после вызыва Doing(...) для оживления преложения отрабатывает событие OnWork (после каждой смены статуса компонента AnyComp).
Как написать наследника, который бы уже имел какие-то гарантированные действия по событию OnWork, и также можно было отслеживать измененние статуса (т.е. существовало бы какое-нибудь событие OnMyWork)?


 
Skier ©   (2003-09-18 11:05) [1]

TAnyComp = class(...)
private
FOnWork : TSomeEvent;
protected
procedure DoWork; virtual;
end;

//............

procedure TAnyComp.DoWork;
begin
if Assigned(FOnwork) then FOnWork(...)
end;

В наследнике DoWork можно будет перекрыть...

Это имеется в виду ?


 
Sandman25 ©   (2003-09-18 11:05) [2]

Обычно у AnyComp есть метод Work, который и вызывается из AnyComp.Doing.
Work описывается как виртуальный и у AnyWork он только вызывает обработчик.
А у потомка нужно будет переписать Work, чтобы он сначала делал те самые гарантированные действия, а потом вызывал Inherited.


 
Vogus   (2003-09-18 11:50) [3]

2 Skier
Все это относится к существуещему TAnyComp. Задача в том чтобы написать наследника от TAnyComp, который например по событию OnWork вы полнял, например, WriteLog(...).


TMyAnyComp = class(TAnyComp)
private
procedure MyWork(...);
public
constructor Create(AOwner: TComponent); override;
end;

constructor TMyAnyComp.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
OnWork := MyWork;
end;

procedure TMyAnyComp.MyWork(...);
begin
WriteLog(...);

....

end;



Где-то я не допираю, чтобы получился компонент делающий тоже самое что и родитель, но по методу Doing(...), писал например WriteLog(...).


 
Skier ©   (2003-09-18 12:21) [4]

>Vogus (18.09.03 11:50)
Я тебе уже всё написал...

TMyAnyComp = class(TAnyComp)
protected
procedure DoWork; override;
public
constructor Create(AOwner: TComponent); override;
end;

constructor TMyAnyComp.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
//OnWork := MyWork; //не нужно
end;

procedure TMyAnyComp.DoWork;
begin
WriteLog(...);
inherited;
//можно (в зависимости от задачи) inherited поставить перед вызовом
//WriteLog
end;


 
Vogus   (2003-09-18 14:23) [5]

Спасибо! Все дошло!



Страницы: 1 вся ветка

Текущий архив: 2003.10.02;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.019 c
4-4163
Dude
2003-07-29 17:57
2003.10.02
Послать Shortcut


7-4143
GSergei
2003-07-18 11:50
2003.10.02
Переменная среды


1-3937
Sergiy
2003-09-21 13:45
2003.10.02
Блокировка перевода времени


3-3711
Slym
2003-09-08 05:12
2003.10.02
Как на ADO заблокировать 1 запись таблицы, для монопольной записи


14-4076
Ihor Osov'yak
2003-09-15 00:22
2003.10.02
Хочу поздравить эстонцев с успешным результатом референдума.