Форум: "Компоненты";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
ВнизДля чего используется функция RegisterPropertyMapper Найти похожие ветки
← →
Priest (2005-05-24 14:38) [0]Нашён в исходниках Дельфи.....
← →
malkolinge © (2005-05-24 18:38) [1]Редактор свойств кажется для множеств
← →
Юрий Зотов © (2005-05-24 20:42) [2]> malkolinge © (24.05.05 18:38) [1]
Жень, ну елы-палы... :о)
> Priest
Есть свойство типа TA. Как зарегистрировать его редактор TAProperty для всех классов и независимо от фактического имени свойства? Элементарно, скажете Вы - и будете правы:
RegisterPropertyEditor(TypeInfo(TA), nil, "", TAProperty);
ОК, усложняем задачу. Есть свойства типов TA, TB, TC... и еще 200 штук. Все они используют один и тот же редактор. Как зарегистрировать этот редактор для всех этих свойств, всех классов и независимо от фактического имени свойства?
Ответ - написать приведенную выше строку 203 раза, меняя только параметр TypeInfo. Можно? Можно. Но некрасиво как-то, согласитесь. А если таких свойств не 203, а 203 тысячи? Что, так и писать одно и то же 203 тысячи раз?
Вот для подобных вещей и служит RegisterPropertyMapper. Например, она позволяет нам сделать свой редактор всех событий и буквально несколькими строками кода зарегистрировать его для всех событий всех классов.
Когда меняется Selection дизайнера, среда обновляет Object Inspector. При этом идет проход по всем отображаемым в нем свойствам и для каждого из них создается экзмпляр редактора. И, создавая каждый редактор, IDE смотрит, зарегистрирована ли для данного свойства callback-функция типа TPropertyMapperFunc (вот эту регистрацию и делает RegisterPropertyMapper). Если да - то она вызывается и создается экземпляр редактора того класса, который она вернула (конечно, при условии, что для данного свойства не зарегистрирован персональный редактор - иначе создается именно он).
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.015 c