Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Tormoz ©   (2004-08-24 10:38:00) 

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

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

Спасибо!


VMcL   (2004-08-27 09:53:00) [1]

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

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

TTreeView.Selected
?


TUser   (2004-08-26 19:42:00) [2]

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


Юрий Зотов   (2004-08-26 16:46:00) [3]

См. GetNodeAt, GetHitTestInfoAt.


Василий   (2004-08-26 15:20:00) [4]

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


Amoeba   (2004-08-26 12:00:00) [5]

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


Юрий Зотов   (2004-08-24 16:22:00) [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;


Tormoz   (2004-08-24 15:58:00) [7]

To Inic

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

To NAlexey

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


NAlexey   (2004-08-24 14:50:00) [8]

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


inic   (2004-08-24 14:28:00) [9]

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


Tormoz   (2004-08-24 13:19:00) [10]

To Digitman

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


Digitman   (2004-08-24 12:47:00) [11]


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


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо