Переопределение в run-time метода для события

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Переопределение в run-time метода для события

Сообщение VAshot » 06.03.2008 15:45:44

Вот не получается такая конструкция:

Код: Выделить всё
DatasourceServiceTest.OnDataChange:=DatasourceServiceTestDataChange;


ругается на несоответствие параметров.
Что не так делаю?

Везде в примерах по делфи следующее:
Код: Выделить всё
procedure TForm1.FormCreate(Sender: TObject);
begin
button1.OnClick := Click;
end;
Аватара пользователя
VAshot
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь

Сообщение Alexx2000 » 06.03.2008 15:55:35

Попробуйте так:
Код: Выделить всё
DatasourceServiceTest.OnDataChange:=@DatasourceServiceTestDataChange;
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Re: Переопределение в run-time метода для события

Сообщение ViTality » 06.03.2008 15:57:41

скорей всего нужно так
Код: Выделить всё
DatasourceServiceTest.OnDataChange:=@DatasourceServiceTestDataChange;
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Сообщение VAshot » 06.03.2008 16:09:08

Спасибо. Это особенность FPC такая?
Аватара пользователя
VAshot
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь

Сообщение alexs » 06.03.2008 16:50:51

Да, и это более логично, чем сделано в дельфине
там глядя на конструкция сразу нельзя скзать, что это - присваивание оператороной переменной адреса функции или присваивание переменно значения исполнения функции.
Но в режиме совместимости с дельфином FPC разрешает присваивание без @.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Bupyc » 06.03.2008 17:47:39

Добавлю и от себя 5 копеек :)

Столкнулся с этой фишкой, когда переводил разработку с дельфей на freepascal. У меня в программе очень активно используется механизм потокового чтения/записи экземпляров классов, наследованных от TComponent. Для того, что бы код компилился и во фрипаскале и в дельфе, пришлось в методах DefineProperties писать примерно следующее:

Код: Выделить всё
Filer.DefineBinaryProperty('Description',
                               {$IFDEF FPC}@{$ENDIF}ReadDescription,
                               {$IFDEF FPC}@{$ENDIF}WriteDescription,
                               fDescList.Count > 0);
Bupyc
постоялец
 
Сообщения: 137
Зарегистрирован: 29.08.2007 18:22:42

Сообщение v-t-l » 06.03.2008 20:47:02

Bupyc писал(а):Добавлю и от себя 5 копеек :)

Столкнулся с этой фишкой, когда переводил разработку с дельфей на freepascal. У меня в программе очень активно используется механизм потокового чтения/записи экземпляров классов, наследованных от TComponent. Для того, что бы код компилился и во фрипаскале и в дельфе, пришлось в методах DefineProperties писать примерно следующее:

Код: Выделить всё
Filer.DefineBinaryProperty('Description',
                               {$IFDEF FPC}@{$ENDIF}ReadDescription,
                               {$IFDEF FPC}@{$ENDIF}WriteDescription,
                               fDescList.Count > 0);


Проще было бы один раз написать
Код: Выделить всё
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF}
v-t-l
энтузиаст
 
Сообщения: 734
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46

Рейтинг@Mail.ru