Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передача метода класса по ссылке


Alek ©   (2011-10-29 01:06:00) 

Добрый день.

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

Command.ResultCallback := @Self.onNavigateComplete;

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


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


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

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

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


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

Спасибо.

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


DVM   (2011-10-29 22:33:00) [3]


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

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


Dimka Maslov   (2011-10-29 12:33:00) [4]

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

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


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


> Alek   (29.10.11 10:03) [2]


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

> Command.ResultCallback := @TTHreadRequestsBrowser.onNavigateComplete;

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


Anatoly Podgoretsky   (2011-10-29 10:27:00) [6]

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

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


Alek   (2011-10-29 10:03:00) [7]

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

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

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо