Главная страница
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.019 c
1-1179760981
TStas
2007-05-21 19:23
2007.07.29
Что нужно писать в rs файле, чтобы засунуть звук в ресурс?


2-1183357283
Aibio
2007-07-02 10:21
2007.07.29
работа с MSSQL2000


15-1183125482
Piter
2007-06-29 17:58
2007.07.29
Регулярные выражения


2-1183376845
wesaaaa
2007-07-02 15:47
2007.07.29
Какая есть компонент-кнопка


2-1183537724
Qzzma
2007-07-04 12:28
2007.07.29
Как открывать файлы приложениями используемыми Windows?