Форум: "Основная";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
ВнизПомогите написать наследника класса Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.009 c