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

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

Представление информации из баз данных в виде дерева [D6, IB6.x]


Александр ©   (2007-10-16 11:15:00) 

Добрый день. Необходимо создать программу с интерфейсом наподобии Проводника, где в левом окне в виде дерева выводилось содержание таблицы БД, а при выборе конкретной ветви в правом окне выводилась информация из связной таблицы. Не получается оформить графическую часть (дерево). Подскажите, есть ли готовые компоненты и/или, если возможно, приведите пример, как релизовать эту задачу средствами Delphi. Ветви должны иметь возможность создаваться, редактироваться, удаляться. Спасибо.


Ega23   (2007-10-16 15:49:00) [1]

Женя, спасибо, дома посмотрю.


jack128_   (2007-10-16 15:44:00) [2]


> Что за зверь такой?

Достаточно известное дерево, даже с дельфей поставлялось когда то (на отдельном диске).  И по функционалу, и по скорости значительно лудше стандартного... Хотя и несколько сложнее в использовании..
http://www.soft-gems.net/index.php?option=com_content&task=view&id=12&Itemid=33


Ega23   (2007-10-16 15:20:00) [3]


> а ежели у DataLink (наследника) ввести св-во, типа текущей
> операции?


В смысле? Там же событийная модель, я могу оперировать только тем, что Borland в базовых TDataSet и TDataSource поставляет. А свои писать - некузяво как-то...


> VirtualStringTree


Что за зверь такой?


clickmaker   (2007-10-16 15:16:00) [4]


> Но по EnableControls я получаю только DataLink.DataChange.
> а вот распознать, был ли это EnableControls или простой
> Locate на уровне datalink я не могу. :(

а ежели у DataLink (наследника) ввести св-во, типа текущей операции?


jack128_   (2007-10-16 15:06:00) [5]


> парился

парься


jack128_   (2007-10-16 15:06:00) [6]

Ега, не парился, возьми VirtualStringTree и перестраивай его на каждый чих. В отличии от стандартного TreeView -  VST перестраивается мгновенно практически для любого разумного количества узлов. Тогда и не нужно будет париться.


Ega23   (2007-10-16 14:17:00) [7]

Вообще ситуация следующая:
Есть некая иерархическая структура. При старте системы каждый элемент имеет статус, допустим 1. В процессе работы этот статус может меняться в диапазоне 1..8. Мне нужно соотетсвующий StateIndex у элементов отрисовывать.
Причём меняется это дело именно у DataSrt'а. Причём изменения могут приходить пачкой, т.е. от листового элемента вверх до корня.

Если завязываться на UpdateData, то при приходе такой пачки дерево начнёт  "скакать", т.к. будет несколько Locate по НД. По-идее, такие вещи надо делать:
1. DisableControls
2. Запомнили позицию.
3. Нужное количество Locate, Edit, Post.
4. Вернулись в позицию
5. EnableControls

Но по EnableControls я получаю только DataLink.DataChange. а вот распознать, был ли это EnableControls или простой Locate на уровне datalink я не могу. :(

Решение нашёл "через задницу": если использовать в качестве DataSet TCustomADODataSet, то можно на каждый DataChange бежать по всем записям через DataLink и смотреть наличие rsModified в текущей записи. Если есть - апдейтить нужный нод. В конце цикла - CancelUpdates.
Да, получается рассинхронизация данных в дереве и в НД, но для решения данной частной задачи - пойдёт.


Ega23   (2007-10-16 14:06:00) [8]


> вернее, зачем именно момент Disable отслеживать?


Сажем так. Либо Disable, дабы в следующий раз, когда на DataChange попаду, перерисовать нужные узлы. Либо сам EnableControls ловить.

Просто дерево, в отличие от плоских представлений (DBGrid etc.) нужно полностью перестраивать каждый раз, т.к. парент мог поменяться.


clickmaker   (2007-10-16 13:50:00) [9]

вернее, зачем именно моментDisable отслеживать?


clickmaker   (2007-10-16 13:45:00) [10]


> [7] Ega23 ©   (16.10.07 12:46)

а нужно Disable/Enable именно у DS дерева отслеживать?


Ega23   (2007-10-16 13:32:00) [11]


> а свойство Control(s)Disabled(Enbled) (как-то так называется)
> как же?


И что? TDataLink НИКАКне ловит событие TDataSet.DisableControls, а на TDataSet.EnableControls приходит обычный DataChanged, и в этот момент у DataSet свойство ControlsDisabled УЖЕFalse.
Проблема действительно серьёзная.


Вася Правильный   (2007-10-16 13:11:00) [12]


> а свойство Control(s)Disabled(Enbled) (как-то так называется)
> как же?

у линка?!


Маша Шрайбер   (2007-10-16 13:05:00) [13]

>> Ega23 ©   (16.10.07 12:46) [7]
>> Основная проблема - отсутствие возможности однозначно определить на
>> уровне TDataLink момент DataSet.DisableControls или DataSet.EnableControls.

а свойство Control(s)Disabled(Enbled) (как-то так называется) как же?


Ega23   (2007-10-16 12:46:00) [14]


> С деревьями так всегда - то почки, то побеги... А то вообще
> тля налетит :)


Основная проблема - отсутствие возможности однозначно определить на уровне TDataLink момент DataSet.DisableControls или DataSet.EnableControls.


ЮЮ   (2007-10-16 12:43:00) [15]

> Да нет, каждый раз какая-то новая фигня выплывает...  :(


С деревьями так всегда - то почки, то побеги... А то вообще тля налетит :)


Ega23   (2007-10-16 12:37:00) [16]


> хобби?


Да нет, каждый раз какая-то новая фигня выплывает...  :(


Правильный Вася   (2007-10-16 12:36:00) [17]


> пишу до сих пор

хобби?
а как же рыбалка?


Ega23   (2007-10-16 12:22:00) [18]

Я своё дерево, гм... пишу до сих пор...  :)


Sergey13   (2007-10-16 11:27:00) [19]

> есть ли готовые компоненты

http://polesoft.ru/
Там в библиотеке компонент был неплохой DBTreeView. Но ставилась библиотека, помнится, со всякими заморочками из за связи ее с библиотекой RxLib, точнее с ее полесофтовским вариантом. Есть охота - поразбирайся.


Сергей М.   (2007-10-16 11:18:00) [20]


> есть ли готовые компоненты


TDBTreeView, TTreeView - для деревянной части.
TDBGrid, TGrid, TStringGrid, TListView - для всего остального.


Наверх

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