Заполнение компонента


procedure LoadItemStringsFromTop(ListOfItems : TListOfItems);
var Counter : Integer; procedure LoadOutline(StartIndex : Integer; StartItem : TItem);
var NewIndex : Integer; begin NewIndex := MyOutline.AddChildObject(StartIndex, StartItem.Description, StartItem);
if StartItem.FirstChildItem <>
nil then LoadOutline(NewIndex,StartItem.FirstChildItem);
if StartItem.FirstSiblingItem <>
nil then LoadOutline(StartIndex,StartItem.FirstSiblingItem);
end; begin MyOutline.Clear; for Counter := 0 to ListOfItems.Count - 1 do if ListOfItems[Counter].Level = 1 then LoadOutline(0,ListOfItems[Counter]);
end;

Заполнение TOutline можно производить сверху вниз, последовательно загружая детей каждого узла (предполагается, что каждый узел знает свой узел верхнего уровня, а также своих детей). Эта информация содержится в объектах классов TListOfItems и TItem, присутствующих в листинге 13.4 (см. раздел «Компоненты TreeData» далее в этой главе).

К сожалению, в стандартной иерархической модели списки детей не ведутся — дети определяются как объекты, для которых данный объект является родителем. Если только вы не загрузите весь набор объектов в память (как TListOfItems) и не установите «родительские» связи, иерархию придется загружать снизу вверх. Другими словами, при добавлении родителя каждого объекта вам придется проверять, не был ли этот родитель загружен ранее для объекта-родственника, и если был — сообщать TOutline о том, что новый объект принадлежит данному родителю.



Содержание раздела