Главная страница
    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.042 c
15-1183549445
antonn
2007-07-04 15:44
2007.07.29
опять про html вопрос%)


15-1182946667
IMHO
2007-06-27 16:17
2007.07.29
Вопрос начальникам отделов программирования


15-1183375146
White Barsik
2007-07-02 15:19
2007.07.29
LHA библиотека


11-1166279345
NeeDiGeo
2006-12-16 17:29
2007.07.29
Добавление формы в уже существующий проект KOL_MCK


15-1182975866
c0deRR
2007-06-28 00:24
2007.07.29
Вот значит у меня с одним человеком есть на пару web проект





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский