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

Вниз

Передача метода класса по ссылке   Найти похожие ветки 

 
Alek   (2011-10-29 01:06) [0]

Добрый день.

А как правильно передать по ссылке метод класса?

Command.ResultCallback := @Self.onNavigateComplete;

Если метод выносить за рамки класса, то все работает.


 
Alek   (2011-10-29 01:33) [1]

Спасибо.. нашел)


 
Alek   (2011-10-29 10:03) [2]

Хотя нет.. не нашел...

Думал вот так во:  
Command.ResultCallback := @TTHreadRequestsBrowser.onNavigateComplete;

Но как оказалось когда вызывается калбек и в него передается поинтер... то ссылка теряется :(.
А если все тоже самое но метод калбека вынести за рамки класса.. то все работает.


 
Anatoly Podgoretsky ©   (2011-10-29 10:27) [3]

Что такое Command.ResultCallback?
Какой прототип функции.

Вообще о чем речь?


 
_Юрий   (2011-10-29 10:49) [4]


> Alek   (29.10.11 10:03) [2]


Метод - это на самом деле две ссылки - на код и на данные.
Вы передаете только ссылку на код, данные (Self) теряются.
Это даже видно по синтаксису:

> Command.ResultCallback := @TTHreadRequestsBrowser.onNavigateComplete;

Где тут упоминание экземпляра класса? Нету.


 
Dimka Maslov ©   (2011-10-29 12:33) [5]

Если ResultCallback oбъявлен как function(...) of object c параметрами, такими же как у onNavigateComplete, то:
Command.ResultCallback := Self.onNavigateComplete

Если то нет, то надо трижды подумать, а можно ли вообще так делать.


 
DVM ©   (2011-10-29 22:33) [6]


> Alek   (29.10.11 01:06) 
> Добрый день.
>
> А как правильно передать по ссылке метод класса?
>
> Command.ResultCallback := @Self.onNavigateComplete;
>
> Если метод выносить за рамки класса, то все работает.

Если метод возможно вынести за пределы класса, но не хочется, то определи его как class function static и оставь внутри. Но это будет уже не совсем метод.


 
Alek   (2011-10-30 00:12) [7]

Спасибо.

Добавил к объявлению Command.ResultCallback вот это of object и заработало из класса.


 
Юрий Зотов ©   (2011-10-30 14:02) [8]


> Alek   (30.10.11 00:12) [7]
> Добавил к объявлению Command.ResultCallback вот это of object
> и заработало из класса.

Посмотрите в коде VCL объявление любого события. Это ведь тот же самый callback, по сути своей.

Ну и в справке то же самое глянуть не помешает, для полного понимания.



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

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

Наверх




Память: 0.48 MB
Время: 0.008 c
8-1221845751
leonidus
2008-09-19 21:35
2012.02.05
Проблема с jpg.CompressionQuality


2-1319547859
TKN
2011-10-25 17:04
2012.02.05
Многострочные заголовки DBGrid


8-1222096864
РФМ
2008-09-22 19:21
2012.02.05
Наличие картинки DBImage


2-1319626055
onyx2012
2011-10-26 14:47
2012.02.05
Групповая сортировка в cxGrid


15-1317533220
brother
2011-10-02 09:27
2012.02.05
Менеджер - экономическая игра