Главная страница
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.016 c
14-4043
саша2
2003-09-16 10:11
2003.10.02
где форум?


6-4029
IBSN
2003-08-01 19:52
2003.10.02
Как вывести локальное имя компьютера?


4-4159
которым
2003-07-30 03:23
2003.10.02
Как в динамически созданных пунктах PopupMenu


4-4171
Unknown user
2003-07-30 18:49
2003.10.02
Как создать DIB?


7-4145
DX_Beginner
2003-07-18 03:30
2003.10.02
Можно ли используя средства DirectX получить информацию о видео?