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

Вниз

Редактор компонента   Найти похожие ветки 

 
OlkaGTS ©   (2003-04-01 17:39) [0]

Уважаемые мастера!
Есть компонент, который содержит список компонентов(TCollection), который в свою очередь содержит список компонентов(тоже TCollection). Из инспектора объектов можно увидеть только первый уровень, второй не показывается.
Можно ли как-то на это повлиять, если нет то как написать свой редактор, чтобы из него можно было видеть свойства выбранных объектов.


 
Юрий Зотов ©   (2003-04-01 18:30) [1]

Вынесите внутреннюю коллекцию в свойства компонента. Примерно так.

type
TMyComponent = class(...)
private
FMyCollection: TMyCollection; // Первый уровень
function GetSecondCollection: TSecondCollection;
procedure SetSecondCollection(const Value: TSecondCollection);
...
published
property MyCollection: TMyCollection
read FMyCollection
write SetMyCollection;
property SecondCollection: TSecondCollection
read GetSecondCollection
write SetSecondCollection stored False;
end;

function TMyComponent.GetSecondCollection: TSecondCollection;
begin
Result := FMyCollection.SecondCollection
end;
procedure TMyComponent.SetSecondCollection(const Value: TSecondCollection);
begin
FMyCollection.SecondCollection.Assign(Value)
end;


 
OlkaGTS ©   (2003-04-03 10:30) [2]

Не совсем понимаю. Второй уровень сложенности зависит от индексов первого. Конструкция приблизительно такова:

Type TSMenuItem=class(TCollectionItem)
...

TSMenuItems=class(TCollection)
property Items[index: integer]: TSMenuItem
read GetItem write SetItem; default;
...

TGroupItem=class(TCollectionItem)
property MenuItems: TSMenuItems read FMenuItems;
...

TGroups=class(TCollection)
...
property Items[index: integer]: TGroupItem
read GetItem write SetItem; default;
...


TSMenu=class(TCustomPanel)
property Groups: TGroups read FGroups write SetGroups;
...

Так вот стандартными средствами я могу добавлять/убирать группы и изменять их свойства и даже видеть, что у него есть свойство MenuItems. Но при нажатии на кнопочку рядом с этим свойством ничего не происходит.


 
Юрий Зотов ©   (2003-04-03 12:05) [3]

Читаем исходный вопрос:
"Есть компонент, который содержит список компонентов(TCollection), который в свою очередь содержит список компонентов(тоже TCollection)".

Откуда следует, что вторая коллекция вживлена в САМУ первую КОЛЛЕКЦИЮ, а не в ее элементы. Исходя из этого я и отвечал.

Теперь читаем код в следующем Вашем постинге:


type
TSMenuItem=class(TCollectionItem)
...

TSMenuItems=class(TCollection)
property Items[index: integer]: TSMenuItem...
...

TGroupItem=class(TCollectionItem)
property MenuItems: TSMenuItems...


Откуда следует, что вторая коллекция вживлена в каждый ЭЛЕМЕНТ первой коллекции, а не в САМУ первую коллекцию.

Возникает вопрос - где же истина? Вероятно, стоит верить коду. Но тогда делаем вывод - если Вы хотите получить ТОЧНЫЙ ответ, то и вопрос надо формулировать ТОЧНО.

Теперь по сути.


property MenuItems: TSMenuItems read FMenuItems;


Свойство объявлено, как read-only. Естественно, редактировать его среда не позволяет. Видимо, надо так:

published
property MenuItems: TSMenuItems
read FMenuItems write SetMenuItems;

procedure TGroupItem.SetMenuItems(const Value: TSMenuItems);
begin
FMenuItems.Assign(Value)
end;

И для нормальной работы IDE надо у обеих коллекций перекрыть метод GetOwner. Во второй коллекции он должен возвращать ссылку на элемент TGroupItem (владелец этой коллекции), а в первой коллекции он должен возвращать сыылку на компонент-владелец. Либо можно наследовать коллекции от TOwnedCollection.


 
OlkaGTS ©   (2003-04-03 13:31) [4]

Все работает. Спасибо большое



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

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

Наверх




Память: 0.48 MB
Время: 0.02 c
3-43990
denary
2003-03-18 01:41
2003.04.14
анализировать код нажатой клавиши


1-44150
Filat
2003-04-02 15:52
2003.04.14
Почему не компилится проект?


1-44261
RoadStar
2003-04-02 14:31
2003.04.14
Сигнализация выхода из приложения


1-44262
BVS
2003-04-02 11:01
2003.04.14
Как запретить программе загрузку ресурсов?


14-44379
Intell
2003-03-26 08:12
2003.04.14
Высокоточный компонент Timer