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

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

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

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

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

Сообщение VAshot »

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

Код: Выделить всё

DatasourceServiceTest.OnDataChange:=DatasourceServiceTestDataChange;


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

Везде в примерах по делфи следующее:

Код: Выделить всё

procedure TForm1.FormCreate(Sender: TObject); 
 begin
 button1.OnClick := Click;
 end;
Аватара пользователя
Alexx2000
постоялец
Сообщения: 491
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи
Контактная информация:

Сообщение Alexx2000 »

Попробуйте так:

Код: Выделить всё

DatasourceServiceTest.OnDataChange:=@DatasourceServiceTestDataChange; 
ViTality
постоялец
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Сообщение ViTality »

скорей всего нужно так

Код: Выделить всё

DatasourceServiceTest.OnDataChange:=@DatasourceServiceTestDataChange;
Аватара пользователя
VAshot
постоялец
Сообщения: 128
Зарегистрирован: 01.11.2007 11:31:21
Откуда: Пермь

Сообщение VAshot »

Спасибо. Это особенность FPC такая?
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Да, и это более логично, чем сделано в дельфине
там глядя на конструкция сразу нельзя скзать, что это - присваивание оператороной переменной адреса функции или присваивание переменно значения исполнения функции.
Но в режиме совместимости с дельфином FPC разрешает присваивание без @.
Bupyc
постоялец
Сообщения: 137
Зарегистрирован: 29.08.2007 18:22:42

Сообщение Bupyc »

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

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

Код: Выделить всё

 Filer.DefineBinaryProperty('Description',
                               {$IFDEF FPC}@{$ENDIF}ReadDescription,
                               {$IFDEF FPC}@{$ENDIF}WriteDescription,
                               fDescList.Count > 0);
v-t-l
энтузиаст
Сообщения: 745
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

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

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

Код: Выделить всё

 Filer.DefineBinaryProperty('Description',
                               {$IFDEF FPC}@{$ENDIF}ReadDescription,
                               {$IFDEF FPC}@{$ENDIF}WriteDescription,
                               fDescList.Count > 0);


Проще было бы один раз написать

Код: Выделить всё

{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF}
Ответить