Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > Как создать TDataSetNotifyEvent в runtime |
Автор: count 16.8.2010, 10:50 | ||||
Собственно вопрос: хочется в рантайм создать обработчик события (ну например AfterEdit) и присвоить его соответсвующему event'y датасета. соответственно - написал процедуру вида
и пытаюсь ее присвоить :
и это не работает... наверное я сильно не прав с синтаксисом, но где именно? заранее благодарен за помощь. |
Автор: БелАмор 16.8.2010, 20:53 | ||
Обратите внимание на of object Ваш обработчик должен быть не отдельной процедурой, а методом какого-либо класса. Смотрите ссылки: http://www.delphikingdom.com/asp/answer.asp?IDAnswer=68289 http://www.delphikingdom.com/asp/answer.asp?IDAnswer=50218 |
Автор: БелАмор 16.8.2010, 23:52 |
Ещё пару слов... Указатель на метод на самом деле содержит два отдельных указателя: на собственно функцию и на объект (TDataSetNotifyEvent, кстати, имеет sizeof не 4, а 8). Обычно этот момент упускается из вида, т.к. в большинстве случаев обработчик является либо методом класса формы, на которой расположен элемент управления, которому назначается событие, либо методом дата-модуля, на котором находися датасет. В этом случае всё происходит просто и естественно за счёт неявного Self, не вызывая дополнительных вопросов. Если же обработчик является методом постороннего класса, то появляются дополнительные тонкие моменты. По этому поводу можете посмотреть ещё ссылки: http://www.delphikingdom.com/asp/answer.asp?IDAnswer=72459 http://www.delphikingdom.com/asp/answer.asp?IDAnswer=55213 |
Автор: count 17.8.2010, 09:12 | ||
в общем собаку я забыл....
|
Автор: БелАмор 17.8.2010, 11:06 |
Неудачное решение... Наводящий вопрос: у вас в процедуре параметр используется для получения ссылки на датасет, или так, для красоты?... |
Автор: count 17.8.2010, 12:19 |
да, там на основании датасета идут проверки и некоторые дополнительные действия. (а чем неудачное то?) |
Автор: БелАмор 17.8.2010, 12:42 |
Смотрите ссылки в двух первых ответах. Там много и подробно. Если кратко, то в приведённом вами виде (не метод, а отдельная процедура) в процедуре вы получите вместо ссылки на датасет мусорную ссылку на Self, а ссылка на датасет будет идти вторым параметром, который вы не используете... |
Автор: count 17.8.2010, 13:28 |
Да, точно. так и будет. эта процедура реально объявлена в датамодуле, поэтому проблемы в приложении не возникнет. За ссылки - спасибо. |