Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Перегрузка метода" 
V
    Опции темы
DarkProg
Дата 29.3.2012, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

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



Не могу понять как можно реализовать следующее.
В общем для понимания напишу мини-класс коорый должен выполняться.

Код

type SomeComponent=class(SomeParentComponent)
private
 functon GetStrings:TStrings ;
 procedure SetStrings(AValue:TStrings);
published
 property Strings:TStrings read GetStrings write SetStrings;
end;


Т.е. есть нечто такое.
В неком месте у этого компонета есть вот такое вот присвоение(в неком, потому что я так и не нашёл в каком, но оно есть и почему я так решил опишу далее)
Код

 TStringList(Strings).OnChange:=OnStringsChange;


С чего решил что есть, да очень просто, я пишу свой класс в котором мне тое нужно следить за изменением этого Strings и делаю это аналогичным образом
Код

 TStringList(Strings).OnChange:=OnStringsMyChange;

После такого присвоения отказываются работать некоторые вещи, которые работать должны, комментирую строчку опять работает.
Вопрос как можно сделать свою процедуру на событие OnChange и при этом так чтобы та которая присвоена ранее работала или как вызывать ранее присвоенную?


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
MetalFan
Дата 29.3.2012, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



DarkProg, запомнить "старый" OnChange перед назначением своего, затем в своем вызывать "старый".
Но это может быть чревато...


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
DarkProg
Дата 29.3.2012, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

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



Цитата(MetalFan @  29.3.2012,  17:18 Найти цитируемый пост)
DarkProg, запомнить "старый" OnChange перед назначением своего, затем в своем вызывать "старый".
Но это может быть чревато... 

Честно говоря пока писал как и рассуждаю вслух - додумался, но что-то не срабатывает... 

Помимо всего прочего там нестандартный TStringList, а немного дописанный, но привидение к другому классу - это ерунда, вытащил. ЗАписал в уазатель, но при выполнении теперь стабильная ошибка... один из указателей равен nil(указатель который в функции) и всё...

Добавлено через 11 минут и 41 секунду
Ошибка возникает при выполнении "старого" обработчика из-за того что он неправильно понимает Self, в качестве Self почему-то считается TStringList, а должен быть другой класс.
Как это можно поправить?


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
MetalFan
Дата 29.3.2012, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Цитата(DarkProg @  29.3.2012,  16:45 Найти цитируемый пост)
ЗАписал в уазатель, но при выполнении теперь стабильная ошибка... один из указателей равен nil(указатель который в функции) и всё...

Показывай код.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
DarkProg
Дата 29.3.2012, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

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



Запоминаю указатель на старый обработчик вот так
Цитата

  ParentOnChange:=nil;
  ParentOnChange:=@TADStringList(SQL).OnChange;
  TADStringList(SQL).OnChange:=OnChangeSQL;


А вызвать пытаюсь вот так, что естественно неправильно, не могу понять как правильно
Код

TMyEvent(ParentOnChange)(Command.CommandText);

Пробовал использовать как TNotifyEvent, но что-то не работает...

Я никак не могу разобраться как именно ссвязаны некоторые свойсва.


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
DarkProg
Дата 29.3.2012, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

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



Получилось... вот же намучался....
Рассказываю как делать, чтобы больше никто так не мучался.
Цитата

  TChangeSQL =  procedure(ASender: TObject) of object;

Объявляем свой тип указателей на некоторую процедуру.

Далее, я делал внутри своего класса, но в принципе параллельно где вы захотите объявить, объявляете переменную типа TChangeSQL.

Далее надо же что-то записать.
Код

  ParentOnChange:=nil;
  ParentOnChange:=TADStringList(SQL).OnChange;
  TADStringList(SQL).OnChange:=OnChangeSQL;

Тем самым сохранил старый обработчик и присовил новый.
А внутри нового обработчика пишу следующее
Код

  if (Assigned(ParentOnChange)) then
      ParentOnChange(Sender);


И счастье вот оно smile


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
MetalFan
Дата 29.3.2012, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Цитата(DarkProg @  29.3.2012,  18:56 Найти цитируемый пост)
Пробовал использовать как TNotifyEvent,

Все должно было прекрасно заработать и с TNotifyEvent.


Цитата(DarkProg @  29.3.2012,  19:23 Найти цитируемый пост)
  ParentOnChange:=nil;
  ParentOnChange:=TADStringList(SQL).OnChange;

Зачем обнилять переменную?



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
DarkProg
Дата 29.3.2012, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

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



Цитата(MetalFan @  29.3.2012,  22:27 Найти цитируемый пост)
Зачем обнилять переменную?

Да честно говоря без надобности, просто у меня почему-то изначально указатель не был равен nil, хотя после выполнения присваивания уже до лампочки что там будет. Я там кажись кое что ещё пытался сделать вот и осталось.

Цитата(MetalFan @  29.3.2012,  22:27 Найти цитируемый пост)
Все должно было прекрасно заработать и с TNotifyEvent.

Понятия не имею чего оно не заработало, хотя щас есть одно мнение, пойду попробую...

Добавлено через 3 минуты и 55 секунд
Да, действительно работает и с TNotifyEvent. Всё дело в объявлении соответствующего типа указателя. С Pointer лучше не баловаться....


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
northener
Дата 30.3.2012, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

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



Цитата(DarkProg @  29.3.2012,  23:08 Найти цитируемый пост)
Всё дело в объявлении соответствующего типа указателя.

А мне показалось, что всё дело было в "собаке, которая залезла в чужой огород".  smile 

Это сообщение отредактировал(а) northener - 30.3.2012, 01:40


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

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


 




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


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

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