Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];

Вниз

Список(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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.043 c
15-1182871267
oldman
2007-06-26 19:21
2007.07.29
Ну... поскольку недавно сбрил бороду и усы...


2-1182701381
AlinaK
2007-06-24 20:09
2007.07.29
Проблема с русскими буквами в RaveReports


2-1183582802
snowkam
2007-07-05 01:00
2007.07.29
баннер


10-1134827475
TStas
2005-12-17 16:51
2007.07.29
Левое выравнивание в ячейке экселя


2-1183447174
delphino
2007-07-03 11:19
2007.07.29
Почему может долго грузится программа?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский