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

Вниз

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

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

Наверх




Память: 0.46 MB
Время: 0.007 c
3-44076
Jaxtor
2003-03-26 17:28
2003.04.14
sqlcode -803


3-44081
Pontic
2003-03-26 19:19
2003.04.14
Проблема с Interbase


1-44097
electric
2003-04-02 16:29
2003.04.14
Проблема в порядке найденных файлов


1-44090
Непоседа
2003-04-02 15:31
2003.04.14
Подскажите как документе Worda, через OLE перейти на закладку


1-44144
Ш-К
2003-04-03 14:27
2003.04.14
Как от даты получить день недели?





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