Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как создать TDataSetNotifyEvent в runtime 
V
    Опции темы
count
Дата 16.8.2010, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 13.7.2007

Репутация: нет
Всего: нет



Собственно вопрос:
хочется в рантайм создать обработчик события (ну например AfterEdit) и присвоить его соответсвующему event'y датасета.
соответственно - написал процедуру вида
Код

procedure procname(DataSet:Tdataset);
begin
end;


и пытаюсь ее присвоить :

Код

myDS.AfterEdit:=procname;


и это не работает...
наверное я сильно не прав с синтаксисом, но где именно?
заранее благодарен за помощь.
PM MAIL   Вверх
БелАмор
Дата 16.8.2010, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: нет
Всего: 17



Код

property AfterEdit: TDataSetNotifyEvent;
type TDataSetNotifyEvent = procedure(DataSet: TDataSet) of object;

Обратите внимание на of object
Ваш обработчик должен быть не отдельной процедурой, а методом какого-либо класса.
Смотрите ссылки:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=68289
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=50218
PM   Вверх
БелАмор
Дата 16.8.2010, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: нет
Всего: 17



Ещё пару слов...
Указатель на метод на самом деле содержит два отдельных указателя: на собственно функцию и на объект (TDataSetNotifyEvent, кстати, имеет sizeof не 4, а 8). Обычно этот момент упускается из вида, т.к. в большинстве случаев обработчик является либо методом класса формы, на которой расположен элемент управления, которому назначается событие, либо методом дата-модуля, на котором находися датасет. В этом случае всё происходит просто и естественно за счёт неявного Self, не вызывая дополнительных вопросов. Если же обработчик является методом постороннего класса, то появляются дополнительные тонкие моменты.
По этому поводу можете посмотреть ещё ссылки:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=72459
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=55213
PM   Вверх
count
Дата 17.8.2010, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 13.7.2007

Репутация: нет
Всего: нет



в общем собаку я забыл....

Код

myDS.AfterEdit:=@procname;

PM MAIL   Вверх
БелАмор
Дата 17.8.2010, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: нет
Всего: 17



Цитата(count @  17.8.2010,  09:12 Найти цитируемый пост)
в общем собаку я забыл....
myDS.AfterEdit:=@procname;

Неудачное решение...
Наводящий вопрос: у вас в процедуре параметр используется для получения ссылки на датасет, или так, для красоты?...

PM   Вверх
count
Дата 17.8.2010, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 13.7.2007

Репутация: нет
Всего: нет



да, там на основании датасета идут проверки и некоторые дополнительные действия.
(а чем неудачное то?) 
PM MAIL   Вверх
БелАмор
Дата 17.8.2010, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: нет
Всего: 17



Цитата(count @  17.8.2010,  12:19 Найти цитируемый пост)
а чем неудачное то?

Смотрите ссылки в двух первых ответах. Там много и подробно.
Если кратко, то в приведённом вами виде (не метод, а отдельная процедура) в процедуре вы получите вместо ссылки на датасет мусорную ссылку на Self, а ссылка на датасет будет идти вторым параметром, который вы не используете...

Это сообщение отредактировал(а) БелАмор - 17.8.2010, 12:45
PM   Вверх
count
Дата 17.8.2010, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 13.7.2007

Репутация: нет
Всего: нет



Да, точно. так и будет. эта процедура реально объявлена в датамодуле, поэтому проблемы в приложении не возникнет. За ссылки - спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0751 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.