Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.29;
Скачать: CL | DM;

Вниз

TreeView   Найти похожие ветки 

 
hyper_omsk ©   (2004-02-16 06:13) [0]

Вопрос:
Подскажите пожалуйста как сделать
Есть таблица
090000000000000 Драгметаллы
090100000000000 Золото
080000000000000 Запасные части
(всего около 2000)
надо это в TreeView загнать
чтоб выгледило так
+Драгметаллы
-Золото
+Запасные части

количество вложений будет достигать 15 конкреетнее количества цифр

Буду благодарен за ответы


 
Maxud ©   (2004-02-16 08:35) [1]

var node: TTreeNode;
begin
TreeNode1.Items.BeginUpdate;
node := TreeNode1.Add(nil, "Драгметаллы");
TreeNode1.AddChild(node, "Золото");
TreeNode1.Add(nil, "Запасные части");
TreeNode1.Items.EndUpdate;
end;


 
Maxud ©   (2004-02-16 08:37) [2]

Т.е., вместо TreeNode1 я имел ввиду TreeView1.


 
NAlexey ©   (2004-02-16 08:38) [3]

>Maxud © (16.02.04 08:35) [1]
Автор же сказал, что 2000 позиции в таблице. Т.е следуя приведенной логике, необходимо написать еще 1997 строк в эту процедуру?


 
Maxud ©   (2004-02-16 08:43) [4]


> NAlexey © (16.02.04 08:38) [3]

Из вопроса непонятно, как определять, что будет узлом, что листом. Возможно по этим кодам 090000000000000, но по -любому нужна ф-ция определения уровня элемента таблицы. Тогда можно делать циклы.


 
NAlexey ©   (2004-02-16 08:47) [5]

>Maxud © (16.02.04 08:43) [4]
Вот вот, данные на основе которых происходит заполнение дерева должны обладать иерархией. Что в данных служит признаком принадлежности папа-дети? Из чисел не ясно как автор это выясняет, прежде всего необходимо определиться с этим. Затем, скорее всего придется парсить эти числа, выбира поуровнево, сначала родителей, потом детей.


 
TUser ©   (2004-02-16 10:38) [6]

Вообще, если можно эту цифрь записать не в 10-ной системе, а в двоичной, получится намного проще. А в кокретно данном примере надо при добавлении каждого нового чего-нибудь проверять его принадлежность к сужествующим нодам.
По-моему проще всего сделать inttostr и дальше посимвольно искать ноды. Только в строчку дабавить нужное количество нулей. Типа Видим 9 - ищем на верхнем уровне нод с таким индексом. Если не нашли - добавляеем. Если нашли - дальше ищем среди его сынишек. Вот так.


 
KilkennyCat ©   (2004-02-16 10:58) [7]

я делал так:
поскольку уже какая-то база есть, то написать обработчик списка, который грамотно табы вставит. а потом его грузить в дерево.
Охренительно удобно отслеживаются ошибки. Да и вообще, просто с текстом работать проще. А с этим делфийским деревом с ума сойдешь, если конечно не КОЛ... КОЛовское дерево - зе бест!


 
hyper_omsk ©   (2004-02-16 12:22) [8]

TUser, мне твоя идея нравится, что еще хорошего не надо переводить в string это уже string так как таблица LongInteger не берет эту разрядность.
вот я так и делал ищу если нет то пишу новый нод но всё равно чтото у меня не получается. Посмотри что я придумал может что подправишь

procedure TForm1.Button1Click(Sender: TObject);
begin
table1.First;
While not table1.EOF do
begin
extstrtomas(Table1.FieldByName("KOD").AsString);// здесь я стринг разбил на цыфры и в массив получилось вместо 090000000000000 - 0,9,0,0,0,0,0,0,0,0,0,0,0,0,0
if mas[2]<>masold[2] then TreeView1.Items.Add(nil,Table1.FieldByName("VID").AsString) else
if mas[3]<>masold[3] then TreeView1.Items.Addchild(TreeView1.items.Item[0],Table1.FieldByName("VID").AsString) else
if mas[4]<>masold[4] then TreeView1.Items.Addchild(TreeView1.items.Item[1],Table1.FieldByName("VID").AsString) else
if mas[5]<>masold[5] then TreeView1.Items.Addchild(TreeView1.items.Item[2],Table1.FieldByName("VID").AsString) else
if mas[6]<>masold[6] then TreeView1.Items.Addchild(TreeView1.items.Item[3],Table1.FieldByName("VID").AsString) else
if mas[7]<>masold[7] then TreeView1.Items.Addchild(TreeView1.items.Item[4],Table1.FieldByName("VID").AsString) else
if mas[8]<>masold[8] then TreeView1.Items.Addchild(TreeView1.items.Item[5],Table1.FieldByName("VID").AsString) else
if mas[9]<>masold[9] then TreeView1.Items.Addchild(TreeView1.items.Item[6],Table1.FieldByName("VID").AsString) else
if mas[10]<>masold[10] then TreeView1.Items.Addchild(TreeView1.items.Item[7],Table1.FieldByName("VID").AsString) else
if mas[11]<>masold[11] then TreeView1.Items.Addchild(TreeView1.items.Item[8],Table1.FieldByName("VID").AsString) else
if mas[12]<>masold[12] then TreeView1.Items.Addchild(TreeView1.items.Item[9],Table1.FieldByName("VID").AsString) else
if mas[13]<>masold[13] then TreeView1.Items.Addchild(TreeView1.items.Item[10],Table1.FieldByName("VID").AsString) else
if mas[14]<>masold[14] then TreeView1.Items.Addchild(TreeView1.items.Item[11],Table1.FieldByName("VID").AsString) else
TreeView1.Items.Addchild(TreeView1.Items.Item[12] ,Table1.FieldByName("VID").AsString);
extstrtomasold(Table1.FieldByName("KOD").AsString);//здесь делаю тоже разбиение сохраняю в массив masold для сравнение
Table1.Next;
end;
end;

что то я с этим TreeView затупил конкретно


 
TUser ©   (2004-02-16 12:48) [9]

node:=// сюда записываем начальный нод
for i:=1 to length(s) do begin // s = 090000000...
Здесь пробежать все чайлды node"а.
if найден тот, которому приписан s[i] then node:=то, что нашли
else node:=addChiled(node);
end;


 
hyper_omsk ©   (2004-02-16 13:00) [10]

TUser можно попадробнее
node-?
if найден тот-?


 
[lamer]Barmaglot ©   (2004-02-16 13:20) [11]

Вы объясните Вам шашечки или доехать?

Если нужен качественный алгоритм, то слушай меня...

1. Зачем тебе добавлять данные в TreeView, если они у тебя уже где-то храняться. просто сообщи системе, что ты собираешься поддерживать данные сам. Конкретнее смотри TV_Item, в параметре
pszText -> LPSTR_TEXTCALLBACK. этим ты сократишь потребляемую память. (рекомендация не моя, microsoft"овская)
2. Что бы не жрать дополнительную память и ресурсы на поддержку ненужных нод, можно обрабатывать сообщение TVN_ITEMEXPANDING, TVN_ITEMEXPANDED, и заполнять TreeView данными по требованию в момент развертывания или свертывания.


 
NAlexey ©   (2004-02-16 14:08) [12]

>[lamer]Barmaglot © (16.02.04 13:20) [11]
Ты это серьезно? А это ты видел? - hyper_omsk © (16.02.04 12:22) [8]



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

Текущий архив: 2004.02.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
3-93791
Zilog
2004-02-03 16:01
2004.02.29
Как создать таблицу, с полем автоинкрмента??


8-94033
Вера
2003-10-29 11:35
2004.02.29
Image


6-94064
gep
2003-12-24 05:55
2004.02.29
Прямое кабельное соединение


4-94242
volser
2003-11-06 12:23
2004.02.29
Hook мыши


14-94154
xMan
2004-02-08 12:17
2004.02.29
Помогите установить WinXP Pro на Win98