Главная страница
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.027 c
3-44067
lats
2003-03-25 16:00
2003.04.14
Отчет в Delphi


3-44007
vlgrig1961
2003-03-25 13:40
2003.04.14
Есть что-либо похожее на Refresh в TQuery


1-44116
Shirson
2003-04-03 08:54
2003.04.14
Как определить размер блока, полученного в pByte?


4-44523
Dr. Web
2003-02-10 15:31
2003.04.14
Как програмно запустить другую программу под другим пользером


3-44056
minva74
2003-03-21 21:02
2003.04.14
Компоненты прямого доступа к SQL Server