Вниз
Скачать: CL | DM;

Класс, описывающий древовидную структуру.   Найти похожие ветки 

← →
Tormoz   (2004-08-24 10:38) [0]

Уважааемые Мастера!

Мне нужно написать класс, описывающий древовидную структуру, (идентичный TTreeView, т.е с подобными методами и свойствами), но без визуализации.
Если Кто знает ссылки по этой теме, буду признателен за информацию!

Спасибо!


← →
Digitman ©   (2004-08-24 12:47) [1]


> без визуализации


возьми обычный TTreeView, выключи у него св-во Visible - вот и всех делов ... или под "без визуализации" что-то иное подразумевается ?


← →
Tormoz   (2004-08-24 13:19) [2]

To Digitman

В настоящее время так и есть. Беда вот в чем: этот класс я использую как published свойство TDBGrid"a для описания иерархической структуры заголовков колонок (это пока, так сказать, в ходе эксперимента). Думаю, Ты согласишься, что сие есть корявость : TDBGrid и так несколько монстроидален, а тут еще такие "навесы"...
Другой разговор, что в редакторе свойств я использую TreeView.


← →
inic ©   (2004-08-24 14:28) [3]

наследуй от TCustomTreeView и убери все ненужное публичное в protected.


← →
NAlexey ©   (2004-08-24 14:50) [4]

>inic ©   (24.08.04 14:28) [3]
запарится убирать, там полно всяческого барахла. Проще свой класс написать. Опять же для каких целей. Надо ли уметь сохранять себя в поток не надо ли и проч.


← →
Tormoz   (2004-08-24 15:58) [5]

To Inic

Полность согласен с NAlexey. Поэтому и пытаюсь "свой класс написать" : опыта маловато - охота посмотреть как умные люди делают.

To NAlexey

Сохранять себя в поток надо !!!. Но это вроде понятно как делать.


← →
Юрий Зотов ©   (2004-08-24 16:22) [6]

> Tormoz (24.08.04 10:38)

type
 THeaderItem = class(TCollectionItem)
 private
   FParentItem: THeaderItem;
   ...
 end;

 THeaderItems = class(TCollection)
   ...
 end;

Собственно, для построения дерева этого уже достаточно. А для удобства и скорости работы можно еще ввести поле FChildItems - список ссылок на дочерние элементы (но возрастут затраты памяти).

type
 THeaderItems = class;
 THeaderItem = class(TCollectionItem)
 private
   FParentItem: THeaderItem;
   FChildItems: THeaderItems;
   ...
 end;

 THeaderItems = class(TCollection)
   ...
 end;


← →
Amoeba ©   (2004-08-26 12:00) [7]

Как ни странно, такой компонент существует: это TrmTreeNonView из бесплатной библиотеки rmControls
http://www.mills-enterprise.ca/delphi.htm


← →
Василий   (2004-08-26 15:20) [8]

Раз здесь собрались знатоки класса TTreeView подскажите решение.
Проблема вот в чем: у этого класса событие двойного щелчка не приписывается каждому элементу, а принадлежит всему дереву. В этом случае если я щелкаю на пустом месте, то оно срабатывает - а как мне определить, что щелчек был не на выделенном узле, а на пустом месте?


← →
Юрий Зотов ©   (2004-08-26 16:46) [9]

См. GetNodeAt, GetHitTestInfoAt.


← →
TUser ©   (2004-08-26 19:42) [10]

TTreeNode не подойдет?


← →
VMcL ©   (2004-08-27 09:53) [11]

>>Василий  (26.08.04 15:20) [8]

>а как мне определить, что щелчек был не на выделенном узле, а на пустом месте?

TTreeView.Selected
?



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.024 c
14-1122323478
mr. X
2005-07-26 00:31
2005.08.21
Вот Вы тут такие умные...


14-1122896571
Exchanger
2005-08-01 15:42
2005.08.21
Электроника, мебель, обмен ссылками, работа


14-1122828139
Fin
2005-07-31 20:42
2005.08.21
EDGE в центре Москвы.


3-1121084038
Андрей Жук
2005-07-11 16:13
2005.08.21
Иерархический запрос в Oracle


1-1122562338
Katya21
2005-07-28 18:52
2005.08.21
Java в Delphi




   Наверх