Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.10.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.013 c
14-18568
McSimm
2003-09-19 13:18
2003.10.06
Пятница


3-18245
Julie
2003-09-16 10:32
2003.10.06
SQL


1-18413
webpauk
2003-09-24 14:12
2003.10.06
создание компонента


1-18391
Александр из Минска
2003-09-22 16:10
2003.10.06
Как перехватить нажатие клавиши Delete?


7-18661
hawkins
2003-07-22 17:52
2003.10.06
Подскажите, как сделать программу доступной из командной





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский