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

Вниз

Вложеное свойство типа компонент   Найти похожие ветки 

 
Priest ©   (2005-10-28 10:49) [0]

Хочу сделать коллекцию, элементы которой содержат два свойство. Первое содержит класс компонента, а второе экземпляр установленного класса. При установки класса объяекта, я создаю сам объект. ПРоблема возникает в том, что из dfm строка имени класса читается позже чем сам объект...ПОэтому возникает исключение...Как правильно это сделать?


 
Юрий Зотов ©   (2005-10-28 13:37) [1]

Перенести строку выше. Свойства сохраняются (и читаются) в порядке их объявления.


 
Priest ©   (2005-10-28 14:49) [2]

Спасибо.Сделал так

TVisualizatorObject = class(TPersistent)
 private
   FClassVisualizatorName: string;
   FVisualizator: TBaseVisualizator;
   procedure SetClassVisualizatorName(const Value: string);
   procedure SetVisualizator(const Value: TBaseVisualizator);
 public
   constructor Create(aOwner: TComponent);
   destructor Destroy; override;
   procedure RefreshVizualizator;
 published
   property ClassVisualizatorName: string read FClassVisualizatorName write
     SetClassVisualizatorName;
   property Visualizator: TBaseVisualizator read FVisualizator write
     SetVisualizator;
 end;

И когда меняется свойство ClassVisualizatorName создаю объект Visualizator...
И сделал редактор свойства ClassVisualizatorName  с допустимыми классами...

А нельзя ли сделать редактор Visualizator чтобы при этом редактировались значения в виде выпадающего списка? Я делал класс производный от TClassProperty. Но у меня TVisualizatorObject  вложен в элемент коллекции и поэтому редактор свойтсва появляется, но он ReadOnly. А когда TVisualizatorObject  является типом свойсва компонента, то всё работает..Как быть?


 
Юрий Зотов ©   (2005-10-28 15:08) [3]

Если для компонента работает, а для элемента коллекции - нет, то, видимо, редактор зарегистрирован только для компонента. Надо зарегистрировать его же для элемента коллекции, тогда должно заработать.


 
Priest ©   (2005-10-28 15:19) [4]

Так я зарегистрировал...Я попробовал для свойства компонента, так работает. А когда регистрирую для свойств коллекции, то не работает. Появляется выпадающий список, я вижу все необходимые значения, но выбрать не могу, поле серое как при реад онли. Только что пробовал в DreamDesigner там всё работает как часы :(

Вот ещё вопрос.
Когда в инспекторе объектов я делаю
ClassVisualizatorName:="TMyClass1"
То у свойства Visualizator знак + появлеяется не сразу...Надо на него щёлкнуть 1 раз как бы для сворачивания, а второй раз объект появляется.
И я его открываю. Как сделать чтобы при смене ClassVisualizatorName сразу появлятся объект Visualizator.
И как сделать при присвоении ClassVisualizatorName:="" чтобы объект Visualizator закрывался, то инспектор объектов ошибку даёт


 
Юрий Зотов ©   (2005-10-28 16:58) [5]

> А когда регистрирую для свойств коллекции, то не работает
Надо регистрировать для ЭЛЕМЕНТА коллекции. Его же свойство.

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

> у свойства Visualizator знак + появлеяется не сразу...
Добавить paVolatileSubProperties и не забыть Designer.Modified.

> как сделать при присвоении ClassVisualizatorName:="" чтобы объект
> Visualizator закрывался,
Уничтожить его в методе записи свойства. Ссылку обнулить.

> то инспектор объектов ошибку даёт
Добавить paVolatileSubProperties и не забыть Designer.Modified.



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

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

Наверх




Память: 0.48 MB
Время: 0.032 c
2-1144760457
ANB
2006-04-11 17:00
2006.04.30
Как в Ворде заменить кусочек параграфа ?


2-1144825642
Сергей И.
2006-04-12 11:07
2006.04.30
автозагрузка


2-1145082227
pavlin_pah
2006-04-15 10:23
2006.04.30
Stringgrid и Scroll


2-1144911684
Сергей И
2006-04-13 11:01
2006.04.30
Помогите с событием формы


2-1144819651
Leshas
2006-04-12 09:27
2006.04.30
Обработка ошибок