Главная страница
    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.071 c
3-1129040707
AlexLines
2005-10-11 18:25
2005.11.20
поиск и маркировка поисковых фраз


4-1127114536
Руслан
2005-09-19 11:22
2005.11.20
А можно ли программно из Windows


3-1128449971
Piter
2005-10-04 22:19
2005.11.20
Primary Key и Unique key


1-1130396063
VID
2005-10-27 10:54
2005.11.20
Я не могу прочитать свойство ячейки Cell.Comment.Text в Excel


14-1130228493
Ega23
2005-10-25 12:21
2005.11.20
С днем рождения! 7 октября





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