Реализация отображения иерархического каталога на DELPHI
Реализация отображения иерархического каталога на DELPHI
Реализация отображения иерархического каталога на DELPHI Пример: {структура itemrec хранит информацию об узле дерева для отображения на форме. Каждый узел дерева node у treeview имеет указатель на структуру node.data. имена полей itemrec соответствуют именам полей таблицы tree.} pitemrec = ^itemrec; itemrec = record parent: string; id: string; name: string; legatees: integer; end; procedure ttree.tvtreeexpanding(sender: tobject; node: ttreenode; var allowexpansion: boolean); begin getexpandingitems(node); end; procedure ttree.getexpandingitems(var node: ttreenode); var newnode: ttreenode; r: pitemrec; begin // Для корневых узлов родитель - '0', для других - хранится // в записи itemrec, указатель на которую - node.data if node = nil then qrytree.parambyname('parentid').asstring := '0' else begin node.selected := true; r := node.data; qrytree.parambyname('parentid').asstring := r.id; // удаляются потомки узла, чтобы при добавлении узлов // из запроса потомки не дублировались node.deletechildren; end; qrytree.open; // в цикле при раскрытии узла к текущему узлу добавляются потомки while not qrytree.eof do begin newnode := tvtree.items.addchildobject( tvtree.selected, trim(qrytree.fieldbyname('descr').asstring), nil); // При добавлении узла резервируется память под данные этого узла new(r); newnode.data := r; r.parent := qrytree.fieldbyname('parentid').asstring; r.id := qrytree.fieldbyname('id').asstring; r.name := trim(qrytree.fieldbyname('descr').asstring); r.legatees := qrytree.fieldbyname('isfolder').asinteger; // если число потомков > 0 , у узла имеется плюсик(+). newnode.haschildren := r.legatees = 1; qrytree.next; end; // нарисовали потомков узла - закроем запрос :-) qrytree.close; end; procedure ttree.formcreate(sender: tobject); var canbeexpanded: boolean; begin canbeexpanded := false; // при открытии формы раскрываем узлы, относящиеся только к корню (nil). tvtreeexpanding(self, nil, canbeexpanded); end; best regards, dnico. Источник: http://www.sql.ru/