TreeView и Data: что к чему???
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.96] |
|
|
ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
TreeView и Data: что к чему???
|
|
|
|
|
Считываю информацию из файла, перерабатываю её и заношу в список и масивы...
Затем по полученным данным строю дерево ![]() ![]() Var f1:textfile; filename:s50; st: string; l,j:integer; D, n:integer; Node,HNode:TTreeNode; p:p_s_type; f:Type_frames; {Вывод узла дерева} Procedure OutS(p:p_s_type;Col:integer); Var j:byte; Child:TTreeNode; Idd:String; begin j:=1; while p<>nil do begin St:=p^.name; Idd:=p^.id; Child:=TreeView1.Items.AddChildObject(Node,St,p); p:=p^.next; end; end; begin repeat //считываю из файла и преобразую в процедуре read_frm assignFile(f1,ExtractFilePath(Application.ExeName)+'Data\'+'inter.dat'); {$I-} reset(f1); {$I+} until ioresult=0; while not eof(f1) do read_frm(f1,Count[1]); closeFile(f1); TreeView1.Items.Clear; if Count[1]>0 then begin for n:=1 to Count[1] do begin St:=frames[1,n].name; p:=frames[1,n].synt; Node:=TreeView1.Items.AddObject(nil,St,pointer(frames[1,n].iddr)); HNode:=Node; OutS(p,0); end; end; end; Теперь пытаюсь из поля Data каждой ветке вытащить занесенный туда идентификатор (а то, что он туда заносится проверено...так и есть) для того, чтобы по нужному этому номеру выделить(раскрыть) нужную ветку дерева ![]() ![]() FOR i:=0 To TreeView1.Selected.Count-1 Do begin IF Integer(TreeView1.Selected.Item[i].Data) = ID Then Begin TreeView1.Selected.Item[i].Expand(False); TreeView1.Selected.Item[i].Selected:=True; TreeView1.Repaint; Exit; End; End; Пишу пока вот так..... Но проверить работу этого куска кода не могу, т.к. значение Integer(TreeView1.Selected.Item[i].Data) всегда неверное, набор цифр 42354154 и т.д. Почему мне никак невытащить значение поля Data??? |
|
Сообщ.
#2
,
|
|
|
|
var
s:string; ID:integer; вот так вот вставлять TreeView1.Items.Item[I].Data:= Pointer( ID ); а вот так вот считывать s:= IntTostr( Integer(Node.Data) ); |
|
Сообщ.
#3
,
|
|
|
|
Цитата RAdmin @ 18.08.04, 19:25 var s:string; ID:integer; вот так вот вставлять TreeView1.Items.Item[I].Data:= Pointer( ID ); а вот так вот считывать s:= IntTostr( Integer(Node.Data) ); А разве AddObject служит не для этого же...в смысле вставлять???? |
|
Сообщ.
#4
,
|
|
|
|
AddObject создаёт нод с указанной DATA, но не изменяет уже сущесвующие.
|
|
Сообщ.
#5
,
|
|
|
|
Цитата RAdmin @ 18.08.04, 19:43 AddObject создаёт нод с указанной DATA, но не изменяет уже сущесвующие. Дак я и создаю узел с указанной Data...а теперь хочу его вытащить (способ s:= IntTostr( Integer(Node.Data)); мне не подходит ....мне нужно перебрать все узлы и все Data начиная с начала до конца, вот я использую Integer(TreeView1.Selected.Item[i].Data); ....) но не получается ![]() И ещё вопрос "Почему для подчиненных узлов Child:=TreeView1.Items.AddChildObject(Node,St+Idd,pointer(idd)); значение integer(TreeView1.Selected.Data) всегда неверное, типа 9865412, а для родителя Node:=TreeView1.Items.AddObject(nil,St+IntToStr(frames[1,n].iddr),pointer(frames[1,n].iddr)); верное???? Т.е. тот идентификатор, который я и заносила.... " |
|
Сообщ.
#6
,
|
|
|
|
s:= IntTostr( Integer(Node.Data));
и Integer(TreeView1.Selected.Item[i].Data); это одно и тоже (я просто на твой код не смотрел) ------- ТУТ ВСЁ ПРАВИЛЬНО ---------- Но есть у меня сомнения насчёт AddObject (чесно признаюсь ниразу им не пользовался) где-то в этом районе ошибка. Добавлено в : Быть может попробуешь заменить AddObject на стандарный способ и применить Node := Pointer( ID ); |
|
Сообщ.
#7
,
|
|
|
|
Цитата RAdmin @ 18.08.04, 20:58 s:= IntTostr( Integer(Node.Data)); и Integer(TreeView1.Selected.Item[i].Data); это одно и тоже (я просто на твой код не смотрел) ------- ТУТ ВСЁ ПРАВИЛЬНО ---------- Но есть у меня сомнения насчёт AddObject (чесно признаюсь ниразу им не пользовался) где-то в этом районе ошибка. Добавлено в : Быть может попробуешь заменить AddObject на стандарный способ и применить Node := Pointer( ID ); Пробовала и твой способ всё равно не получается.....при попытке считать значение Data у подчиненных веток выводится всякая ерунда....если нетрудно посмотри мой код.... правда там много чего закомментировано....в том числе и все способы добавления значения Data в узле. * Смотреть надо в procedure TForm1.load_base - это загрузка дерева * в procedure TForm1.TreeRazvorot(Sender: TObject); - я пыталась выделить любой узел по ID * в procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode); я пыталась проверить соответствие значения Data в выделенных узлах Я бьюсь над решением уже весь день....не пойму что не так??? Буду благодарна за любую наводку..... Прикреплённый файл ex.ZIP (14.73 Кбайт, скачиваний: 98)
|
|
Сообщ.
#8
,
|
|
|
|
DELPHIna, пожалуйста
M Новый вопрос - новая тема. Это прежде всего, надо для успешного поиска другими участниками. |
|
Сообщ.
#9
,
|
|
|
|
Кароче вот:
Вспомни что я писал ID:integer; Data:= Pointer( ID ); а у тебя IDD это string. ![]() ![]() {Вывод узла дерева} Procedure OutS(p:p_s_type;Col:integer); Var j:byte; Child:TTreeNode; Idd:String; {FF} ff:integer; i:integer; begin j:=1; while p<>nil do begin St:=p^.name; Idd:=p^.id; {FF} ff:=StrToInt(Idd); Child:=TreeView1.Items.AddChildObject(Node,St+Idd,pointer(ff)); Добавлено в : Ну или вот на это замени ![]() ![]() Child:=TreeView1.Items.AddChildObject(Node,St+Idd,pointer(strToInt(idd))); Добавлено в : Song, вопрос не менялся |
|
Сообщ.
#10
,
|
|
|
|
Цитата RAdmin @ 18.08.04, 23:21 Кароче вот: Вспомни что я писал ID:integer; Data:= Pointer( ID ); а у тебя IDD это string. ![]() ![]() {Вывод узла дерева} Procedure OutS(p:p_s_type;Col:integer); Var j:byte; Child:TTreeNode; Idd:String; {FF} ff:integer; i:integer; begin j:=1; while p<>nil do begin St:=p^.name; Idd:=p^.id; {FF} ff:=StrToInt(Idd); Child:=TreeView1.Items.AddChildObject(Node,St+Idd,pointer(ff)); Добавлено в : Ну или вот на это замени ![]() ![]() Child:=TreeView1.Items.AddChildObject(Node,St+Idd,pointer(strToInt(idd))); Добавлено в : Song, вопрос не менялся Неужели всё было так просто.....пару символов....а столько мучений Спасибо за помощь..... (просто столько эмоций....что надо пар выпустить....) |
|
Сообщ.
#11
,
|
|
|
|
Почему нельзя просто:
![]() ![]() Child:=TreeView1.Items.AddChildObject(Node,St+Idd, Pointer(p^.id)); ..... id := Integer(Node.Data); |
|
Сообщ.
#12
,
|
|
|
|
Цитата Dynamic @ 20.08.04, 10:57 Почему нельзя просто: ![]() ![]() Child:=TreeView1.Items.AddChildObject(Node,St+Idd, Pointer(p^.id)); ..... id := Integer(Node.Data); можно и так....(в принципе так и было....только я упустила из виду самое важное Pointer...прописать перед p^.id... и получалось следовательно неправильно) ... Я так и сделала, как Вы пишете...и всё работает.... Вот, что значит невнимательность..... |