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

Вниз

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

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

Наверх




Память: 0.47 MB
Время: 0.011 c
15-1144737138
Тульский
2006-04-11 10:32
2006.05.07
Лимон на подоконнике


8-1125856202
NightLord
2005-09-04 21:50
2006.05.07
Звуковые данные


3-1141962120
кораблик
2006-03-10 06:42
2006.05.07
Помогите разобраться с DBLookupComboBox


1-1143633890
Sergg
2006-03-29 16:04
2006.05.07
Выделение TTreeNode по щелчку правой кнопкой


4-1139683228
Хинт
2006-02-11 21:40
2006.05.07
OpenProcess и PROCESS_TERMINATE





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