Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.06;
Скачать: CL | DM;

Вниз

События компонента   Найти похожие ветки 

 
Alex_Raider ©   (2003-09-22 13:03) [0]

Задача:
Есть грид.
У него есть коллекция столбцов.

Хочется сделать сохранение и загрузку позиций и размеров столбцов грида.
(Коллекция принадлежащая компоненту грида).

Есть желание сделать это в своем классе-наследнике, а не в
событиях OnCreate(), Close() класса-владельца (форма).

Что посоветуете для перекрытия?
На загрузку я перекрыл Loaded().
Выгрузка на BeforeDestruction(), похоже, не работает...


 
Kosha   (2003-09-22 13:18) [1]

Сохранение и восстановления параметров грида я вызываю в форме как метод грида на OnShow и OnClose формы. Работает нормально.


 
Developerr ©   (2003-09-22 13:59) [2]

А не проще воспользоваться компонентом из RxLybrary - FormStorage. Он все сохраняет и запоминает.


 
Alex_Raider ©   (2003-09-22 14:04) [3]

нет, мне это не подходит.
Я делаю рефакторинг собственного Framework`a.

В нем важно чтобы мои custom-компоненты умели обрабатывать себя сами, без сторонних библиотек, компонентов и без написания каждый раз обработчиков owner-класса (формы), даже несмотря на то что у меня есть template-формы.

Компонент должен уметь делать это сам.
Проблема, похоже в самом гриде (я использую DbGridEh).


 
Reindeer Moss Eater ©   (2003-09-22 14:10) [4]

Лучше всего садиться на DataSource.DataSet.BeforeClose и AfterOpen.

Например сохранив адреса обработчиков уже назначенных, прописать свои и в конце своей обработки вызывать сохраненные


 
Alex_Raider ©   (2003-09-22 14:48) [5]

Идейка вообще-то неплохая, реально это внутренний

datalink.onchange

у грида.

да только по-нормальному его не "выцарапать"
из класса TDbGridEh, также как и не перехватить установку
проперти Datasource, поэтому делать нужно после загрузки формы
и перед ее разрушением.
Реально я конечно, могу поставить Class Method Hook
(как в RX), но это кривь...

Компонент-врайтеры! Ау!
Я уже сто лет не писал компонентов, мож suggest какой будет?


 
Alex_Raider ©   (2003-09-22 14:53) [6]

Сохранять адреса обработчиков низя,
кривизна это.
Хотя бы оттого, что у меня несколько раз наследуются формы.
У грида на одном уровне иерархии могут быть одни обработчики,
на другом - другие, к тому же вызывающие унаследованные.

Лучше перекрывать Doxxx - функции,
"дергающие" Onxxxx - эвенты.


 
Reindeer Moss Eater ©   (2003-09-22 15:15) [7]

У грида на одном уровне иерархии могут быть одни обработчики,
на другом - другие, к тому же вызывающие унаследованные.


Да хоть миллионное поколение наследника. Какая разница-то?
Смотрим, что мы в рантайме. Смотрим, что есть датасорс, а у него есть датасет. Если у него уже назначено BeforeClose и AfterOpen сохраняем их адреса, вешаем свои обработчики.
В них выполняем свою работу, после чего вызываем сохраненные обработчики если они были.
Все.


 
Alex_Raider ©   (2003-09-22 17:27) [8]

Разница в том, что
я не извращенец - делать обьект, который что-то "перехватывает" у других обьектов.
Вся обработка должна быть сосредоточена внутри самого обьекта.

по ключевым словам Loaded() и BeforeDestruction() сведущие люди обычно понимают что я пишу компонент - наследник.

Всё, всем спасибо, все свободны.


 
Reindeer Moss Eater ©   (2003-09-22 17:38) [9]

по ключевым словам Loaded() и BeforeDestruction() сведущие люди обычно понимают что я пишу компонент - наследник.

Сведущие люди еще допускают, что у грида наследника может не быть колонок, созданных в desigtime. И весь код приклеенный к Loaded() и BeforeDestruction() становится малополезным.
Я 10 раз переоткрою датасет грида до его уничтожения и 10 раз потеряю вручную установленную ширину колонок.


 
icWasya ©   (2003-09-22 17:54) [10]

почитай про DefineProperties - эта штука придумана для чтения/записи некоторых данных, которые нецелесообразно делять свойствами


 
Leha   (2003-09-22 18:04) [11]

Не пробовал в INI-шку?


 
Reindeer Moss Eater ©   (2003-09-23 09:48) [12]

я не извращенец - делать обьект, который что-то "перехватывает" у других обьектов.

И в чем же якобы заключается извращенство при этом?

Вся обработка должна быть сосредоточена внутри самого обьекта.

А она внутри объекта при моем способе и будет.


 
NAlexey ©   (2003-09-23 10:20) [13]

Зря стараетесь, автор уже отпустил всех своим волеизъявлением. Можем расслабиться и попить чайку. Только не забывайте делать рефреш каждые 5-6 сек. Вдруг он изъявит желание опять нас собрать.



Страницы: 1 вся ветка

Текущий архив: 2003.10.06;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
14-18556
Труп Васи Доброго
2003-09-18 15:33
2003.10.06
Передача файлов по сети


1-18381
lak
2003-09-22 15:48
2003.10.06
вычисление выражений в префиксной записи


1-18337
Slym
2003-09-22 14:00
2003.10.06
Как передать параметры в MS Script Control?


8-18491
[ARIA]Volunteer
2003-06-06 23:20
2003.10.06
Где можно загрузить DelphiX?


14-18571
iNew
2003-09-18 16:42
2003.10.06
Кто знает какую-нибудь прогу для общего тестирования системы.