09.06.2006, 21:48 | #1 |
Чужая
|
Delphi
Подскажите как реализовать задумку
Имеется таблица (БД) TTree.db, состоит из 3 полей: ID class - key (integer), Name (alpha), Papa (integer). Имеет вид, как на рис. 1. Мне требуется: чтобы по данной таблице строилось дерево (как в проводнике в Windows) - рис. 2 - то, что мне необходимо, но это вручную прорисованно. Что для этого нужно? Предоставляю текст, который есть сейчас: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, DBTables, Grids, DBGrids, ExtCtrls, ImgList, ComCtrls, ToolWin, StdCtrls, Buttons; type TForm1 = class(TForm) DataSource1: TDataSource; DBGrid1: TDBGrid; Table1: TTable; TreeView1: TTreeView; ImageList1: TImageList; Splitter1: TSplitter; Splitter2: TSplitter; ToolBar1: TToolBar; BitBtn1: TBitBtn; BitBtn2: TBitBtn; BitBtn3: TBitBtn; BitBtn4: TBitBtn; SpeedButton1: TSpeedButton; procedure SpeedButton1Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure BitBtn4Click(Sender: TObject); procedure BitBtn3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.SpeedButton1Click(Sender: TObject); // кнопка выхода из программы begin Close; end; procedure TForm1.BitBtn1Click(Sender: TObject); // для кнопки "Добавить папку" var CaptionStr:String; NewNode:TTreeNode; begin CaptionStr:=''; if not InputQuery('Ввод имени', 'Введите заголовок папки',CaptionStr) then exit; NewNode:=TreeView1.Items.Add(TreeView1.Selected, CaptionStr); if NewNode.Parent<>nil then NewNode.ImageIndex:=1; end; procedure TForm1.BitBtn2Click(Sender: TObject); // для кнопки "Добавить подпапку" var CaptionStr:String; NewNode:TTreeNode; begin CaptionStr:=''; if not InputQuery('Ввод имени подпапки', 'Введите заголовок подпапки',CaptionStr) then exit; NewNode:=TreeView1.Items.AddChild(TreeView1.Selected, CaptionStr); if NewNode.Parent<>nil then NewNode.ImageIndex:=1; end; procedure TForm1.BitBtn4Click(Sender: TObject); // для кнопки "Редактировать заголовок" var CaptionStr:String; begin CaptionStr:=''; if not InputQuery('Ввод имени', 'Введите заголовок элемента',CaptionStr) then exit; TreeView1.Selected.Text:=CaptionStr; end; procedure TForm1.BitBtn3Click(Sender: TObject); // процедура для кнопки "Удалить" begin if TreeView1.Selected<>nil then TreeView1.Items.Delete(TreeView1.Selected); end; end.
__________________
Телефонный меланхолик. Последний раз редактировалось МункаЛунка; 13.09.2006 в 08:31. |
10.06.2006, 00:38 | #2 |
Новичок
Регистрация: 17.08.2004
Сообщений: 780
|
1. В поле "Parent" корневых узлов помещаешь 0.
2. При создании формы делаешь "select * from tree where (parent=0)" и заполняешь ими дерево. В поле lParam каждого узла (смотри структуру TVITEM) помещаешь значение ID. В поле nChildren помещаешь 1 3. При попытки разворачивания ветки (событие TVN_ITEMEXPANDING) проверяешь флаг TVS_EXPANDEDONCE узла. Если он установлен, значит узел уже разворачивался и вся информация в него записана, если нет, то пункт 4. 4. получаешь значение ID и делаешь запрос "select * from tree where (parent=id)". Если кол-во записей больше нуля вставляешь их в дерево как в пункте 1. Если ноль, то делаешь SetItem(tvitem) для узла дерева поместив в в поле nChildren 0 (плюсик напротив ветки должен исчезнуть) Общий алгоритм примерно такой. Из плюсов - не нужно при запуске перелопачивать всю таблицу. Она будет читатся кусками по мере необходимости. Нужно только проиндексировать поле "parent". И имена поле с пробелами лучше не делать. В крайнем случае назови ID_class Последний раз редактировалось COBEHOK; 10.06.2006 в 10:22. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Книжки по Delphi | CyCaHuH | Техническая библиотека | 6 | 22.11.2008 17:21 |
Delphi | Chamal | Программируем | 13 | 19.06.2007 20:47 |
Компоненты для DELPHI 7 | FATALITY | Поиск | 1 | 18.06.2007 07:27 |
Borland Delphi | PAPA_KARLO | Поиск | 19 | 28.04.2007 22:29 |
Литература в эл. виде по Delphi 7 | Leon | Программируем | 3 | 05.03.2005 23:46 |
|