Главная страница
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.016 c
15-1182701335
koha
2007-06-24 20:08
2007.07.29
Ищу хорошую инфу по компоненту TChart


15-1183225038
@!!ex
2007-06-30 21:37
2007.07.29
Можно ли вернуть РАБОЧУЮЮ, но не совместимой с железом видюху?


15-1183140482
qoooo
2007-06-29 22:08
2007.07.29
Книга - "Delphi 5, Руководство разработчика"


15-1183449672
Inco
2007-07-03 12:01
2007.07.29
Проблема с цветом в TurboExplorer


3-1177316209
Juice
2007-04-23 12:16
2007.07.29
DBX & Oracle ошибка при коннекте