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

Вниз

Нужно сделать свой список компонентов в редакторе свойства   Найти похожие ветки 

 
kmi   (2005-03-14 18:18) [0]

Задача такая. Имеется редактор свойства, наследуемый от TComponentProperty. По умолчанию он создает в Инспекторе выпадающий список всех компонентов, которые могут быть значением данного свойства и которые расположены в модулях, указанных в разделе uses редактируемого модуля.
Но мне нужно из этих компонентов выбрать те, у которых свойство Tag совпадает по значению со свойством Tag данного компонента. Т.е. фактически нужно создать свой список. Как получить проверить свойство Tag у компонентов в других модулях?


 
Юрий Зотов ©   (2005-03-14 19:48) [1]

Давайте начнем с главного. Предположим, Вы задачу решили, нужный список сформирован, юзер раскрыл его и выбрал один из компонентов (назовем его C). Пока что все хорошо.

ОК, теперь юзер берет - и меняет свойство Tag у компонента C или у Вашего. Имеет полное право. А ссылка-то у Вас осталась на компонент C, она же не изменилась. Но перестала соответствовать Вашему условию отбора.

И как быть?


 
kmi   (2005-03-14 20:09) [2]

Это не принципиально. Во-первых, программа для внутреннего пользования. Во-вторых, вместо Tag я могу добавить свое свойство и заполнять его по определенным условиям.


 
Юрий Зотов ©   (2005-03-14 22:13) [3]

> kmi   (14.03.05 20:09) [2]

Свое свойство вместо Tag - это уже лучше. Но ведь и его юзер может изменить - и снова возникнет та же самая ситуация.

Значит, или нельзя давать юзеру его менять, или при его изменении компонент, у которого его изменили обязан будет оповестить все компоненты, которые на него ссылаются о том, что свойство изменено - чтобы они могли скорректировать ссылку.

Ладно, это дело Ваше, но советую этот вопрос хорошо продумать, иначе все остальное просто теряет смысл.

А делается это так - пишется и регистрируется редактор свойства, в котором callback-процедура, переданная в GetValues, подменяется своей. Вот в этой своей процедуре и накладываем нужный фильтр.


type
 TCompRefProperty = class(TComponentProperty)
 private
   FSaveStrProc: TGetStrProc;
   procedure StrProc(const S: string);
 public
   procedure GetValues(Proc: TGetStrProc); override;
 end;

procedure TCompRefProperty.GetValues(Proc: TGetStrProc);
begin
 FSaveStrProc := Proc;
 inherited GetValues(StrProc)
end;

procedure TCompRefProperty.StrProc(const S: string);
begin
 if TComponent(GetComponent(0)).Tag = Designer.GetComponent(S).Tag then
   FSaveStrProc(S)
end;


 
kmi   (2005-03-14 23:58) [4]

Спасибо, все работает прекрасно!


 
Юрий Зотов ©   (2005-03-15 00:39) [5]

> kmi   (14.03.05 23:58) [4]

Учитывая, что юзер может ввести имя компонента и вручную, нужно проверять совпадение Tag еще и в методе Set самого свойства. При несоответствии - возбуждать исключение.


 
kmi   (2005-03-15 02:58) [6]

Согласен. Это было сделано еще при создании компонента.


 
Юрий Зотов ©   (2005-03-15 03:16) [7]

> kmi   (15.03.05 02:58) [6]

И конечно, не было забыто про Notification и FreeNotification?
:о)


 
kmi   (2005-03-16 01:19) [8]

:)



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

Форум: "Компоненты";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.048 c
2-1130852396
Starcom
2005-11-01 16:39
2005.11.20
Прочитать определённую ветвь системного реестра...


14-1130139299
Nikolay M.
2005-10-24 11:34
2005.11.20
Кто-нибудь ощущает магнитные бури?


14-1130248221
вразлет
2005-10-25 17:50
2005.11.20
Краткий сетевой словарь либерального сверхчеловека


14-1130464155
Idx
2005-10-28 05:49
2005.11.20
Где взять компонент для просмотра рисунков


5-1111751604
Gennadiy
2005-03-25 14:53
2005.11.20
Проблема с созданием компонента!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский