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

Вниз

Оповещение об изменении свойства   Найти похожие ветки 

 
Priest ©   (2005-11-01 12:22) [0]

У меня есть компонент, содержащий внутри себя коллекцию. Элемент коллекции содержит свойства Name:String и Value:Variant. Другой компонент должен ссылаться на конкретный элемент коллекции. Чтобы сделать возможность задания своства в DesignTime, я сделал 2 свойтсво. Первое ссылается на 1-й компонент, а второе содержит имя Name того элемента, который необходимо использовать...Но данное решение имее недостаток, связаный с удалением элемента коллекции. При удалении необходимо оповестить второй компонент....Как быть. Может я с самого начала сделал неверно с 2-я свойствами?


 
Igorek ©   (2005-11-01 12:50) [1]


> При удалении необходимо оповестить второй компонент....Как
> быть.

Notification.

> Может я с самого начала сделал неверно с 2-я свойствами?

Очень может быть что плохой дизайн, хотя пока ничего угрожающего.
Варианты:
- сделать коллекцию отдельным компонентом
- слить эти два компонента в один
- сделать одно св-во + редактор в виде выпадающего списка (заполняешь значениями перебирая все доступные компоненты с коллекциями и для каждого перебирая елементы коллекции);

Это зависит от конкретного случая. Но полюбому рассмотри несколько альтернатив.


 
Priest ©   (2005-11-01 13:17) [2]

>>Notification.

Только для компонентов, а у меня элемент коллекции

- сделать коллекцию отдельным компонентом
Так и есть

- слить эти два компонента в один

Нельзя. Один из них не мой...А делать вложеный смысла пока не вижу

сделать одно св-во + редактор в виде выпадающего списка (заполняешь значениями перебирая все доступные компоненты с коллекциями и для каждого перебирая елементы коллекции);

А как сделать чтобы элементы кооллекции можно было выбирать...А то сделал свойство тип, которого является элементом колекции, а в выпадающем спике не появляется..... Помогите примером


 
Юрий Зотов ©   (2005-11-01 16:41) [3]

Уточните: классы элемента коллекции, самой коллекции и содержащего ее компонента - не Ваши?


 
Priest ©   (2005-11-01 16:52) [4]

Не мои. Есть компонент. У него внутри есть коллекция. Я хочу в своём компоненте ссылаться на элемент той коллекции. Я сделал свойство, типом которого является тип элемента той колекции. Но в инспекторе объектов не отображаются значения. Поэтому я сделал 2 свойства. В первом сохраняю ссылку на компонент, в кот. есть колекция. А во втором свойстве сохраняю имя элемента коллекции. У элемента колекции есть свойство Name.
Вот примерный код

type
 TXXColectionItem = class(TColectionItem)
 private
   FName: string;
   FValue: Variant;
 published
   property Name: string read FName write FName;
   property Value: Variant read FValue write FValue;
 end;

 TXXColection = class(TColection)
 end;

 TXXComponent = class(TComponent)
 private
   FXXCollection: TXXColection;
 published
   property XXCollection: TXXColection read FXXCollection write FXXCollection;
 end;

 TMyComponent = class(TComponent)
 private
  // FXXColectionItem: TXXColectionItem;
   FXXComponent: TXXComponent;
   FXXItemName: string;
 public
 published
   //Не появляется выпадающий список, поэтому закоментарил
  // property XXColectionItem: TXXColectionItem read FXXColectionItem write
  //     FXXColectionItem;
   property XXComponent: TXXComponent read FXXComponent write FXXComponent;
   //Здесь я храню TXXColectionItem.Name
   property XXItemName: string read FXXItemName write FXXItemName;
 end;

Хотелось бы более элегантный код


 
Igorek ©   (2005-11-01 17:11) [5]


> >>Notification.
>
> Только для компонентов, а у меня элемент коллекции

Иначе по правильному никак не получится - компонент чужой и не обязан уведомлять когда у него внутри меняется какая-то коллекция. И у тебя будет битая ссылка. А в общем случае определить, что она битая невозможно. Т.е. тот компонент не рассчитан на такое использование его коллекции. Иначе он бы давал соотв. интерфейс - напр. давал возможность подписки чужого callback метода для уведомления удаления элемента коллекции.

Можно конечно городить подпорки - например время от времени (или при использовании ссылки) проверять тот компонент - есть ли в коллекции такой элемент... Но это уже не гуд.


 
Priest ©   (2005-11-01 17:25) [6]

>>Igorek
Ладно, а как сделать редактор для свойства
property XXColectionItem: TXXColectionItem
Чтобы можно было выбрать доступные элементы коллекции?


 
Priest ©   (2005-11-02 13:15) [7]

Так как всё таки сделать редактор для элемента?



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

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

Наверх




Память: 0.49 MB
Время: 0.03 c
1-1143486404
Shnaider
2006-03-27 23:06
2006.05.07
Загрузка dll вместе с windows


2-1145467202
Niko
2006-04-19 21:20
2006.05.07
Что быстрее?


15-1144891320
dyd
2006-04-13 05:22
2006.05.07
Рецепт бодрости :)


4-1140074397
leonidus
2006-02-16 10:19
2006.05.07
Не получается скомпилировать dll с хуком


2-1145516103
Zaq123
2006-04-20 10:55
2006.05.07
Проблема с записью в файл.