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

Вниз

Список(TList) методов. Как вызвать метод?   Найти похожие ветки 

 
Kolan ©   (2007-05-20 12:24) [0]

Здравствуйте,
 Есть тип: TAttachCallBack = procedure(Subject: TSettingsManager) of object;

Я же могу хранить список таких методов? — Вроде могу.
FObserverCallBacks: TList;

 Как их помещать в список? — Вроде справился:
procedure TSettingsManager.Attach(AObserverCallBack: TAttachCallBack);
begin
 FObserverCallBacks.Add(@AObserverCallBack);
end;


А как теперь вызывать?
procedure TSettingsManager.NotifyObservers;
var
 I: Integer;
 CurrentCalback: TAttachCallBack;
begin
 for I := 0 to FObserverCallBacks.Count — 1 do
 begin
   CurrentCalback :=  TAttachCallBack(FObserverCallBacks[I]);
   CurrentCalback(Self);
 end;
end;


Получаю:
[Pascal Fatal Error] KAcousticPressureConverterGlobalSettings.pas(63): F2084 Internal Error: C4989

Так как же правильно их вызывать?


 
MBo ©   (2007-05-20 12:51) [1]

>Я же могу хранить список таких методов? — Вроде могу.
Нет, прямо так - не можешь, поскольку метод объекта - 8 байт.
См. TMethod
сюда еще глянь:
http://delphimaster.net/view/2-1179297317/


 
Kolan ©   (2007-05-20 13:28) [2]

> См. TMethod
> сюда еще глянь:

Ясно. Получается нужно знать еще и TMyClass&#133

Опишу задачу, может подругому можно&#133

Мне нужен Observer, но TConcreteObserver должен реализовавыть интерфейс IObserver.
То есть:
TConcreteObserver = class(TInterfacedObject, IObserver)

А что делать если мне надо сделать Обозревателем такой класс:
TLogManager = class(TFileStream)
Или такой
TGraphManager = class
?

Вот я и решил что в Attach передавать надо не объект а метод, может можно проще?


 
Юрий Зотов ©   (2007-05-20 15:02) [3]

А почему не сделать нормально - реазовать в TLogManager (или в его потомке) интерфейс IObserver?


 
TStas ©   (2007-05-20 15:17) [4]

x: CurrentCalback;
....

@x = TAttachCallBack(FObserverCallBacks[I]);
x(Self)


 
Kolan ©   (2007-05-20 22:53) [5]

> реазовать в TLogManager (или в его потомке) интерфейс IObserver?

А я незнаю как. TInterfacedObject и TFileStream — родители должны быть&#133 а мн. наследования нет :)
Или вы предлогаете без TInterfacedObject"а  обойтись?


 
Юрий Зотов ©   (2007-05-20 23:28) [6]

> Kolan ©   (20.05.07 22:53) [5]

Наследоваться от TFileStream, а RefCount реализовать самому, по аналогии с TInterfacedObject.



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

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

Наверх




Память: 0.48 MB
Время: 0.023 c
15-1183450467
Начинающий программист
2007-07-03 12:14
2007.07.29
Книга по Delphi


2-1182568707
Dyakon_Frost
2007-06-23 07:18
2007.07.29
Поиск дубликатов файлов


1-1179816164
leonidus
2007-05-22 10:42
2007.07.29
Как переконвертировать Color в Hex ?


2-1183374371
malor
2007-07-02 15:06
2007.07.29
Error reading MyAdvStringGrid.SearchFooter.FindNextCaption: Prope


15-1182947588
TruePunk
2007-06-27 16:33
2007.07.29
wap ресурсы