Главная страница
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.044 c
9-1128852091
X-Disa
2005-10-09 14:01
2006.04.30
Движение в GLScene


3-1141994963
apl
2006-03-10 15:49
2006.04.30
FastReport 3


1-1143456131
DelphiLexx
2006-03-27 14:42
2006.04.30
C эмулировать нажатие Ctrl+A


2-1144831112
RomanH
2006-04-12 12:38
2006.04.30
IBDataSet на сервере приложений


6-1137126738
oleggar
2006-01-13 07:32
2006.04.30
HTTP Indy