ПредишенСледващото

Как да работим с данни (Pointer) в компонент с дървовидна структура?

процедура TreeView_OnDeletion (Sender: TObject; възел: TTreeNode)
започвам
# XA0; StrDispose (Node.Data);

Аз съм експериментирал на ток, който е в този дух. Но не оре.
Виж, че не е така.

процедура TForm1.Button1Click (Sender: TObject);
започвам
# XA0; form1.TreeView1.Items.Add (нула, edit1.Text);
приключи;

процедура TForm1.Button2Click (Sender: TObject);
започвам
# XA0; form1.TreeView1.Items.AddChild (form1.TreeView1.Selected, "документ");
# XA0; form1.TreeView1.Items [2] .Data: = strnew ( "C: \\ 1.TXT");
приключи;

процедура TForm1.TreeView1Click (Sender: TObject);
започвам
# XA0; shellapi.ShellExecute (application.Handle, "отворен", form1.TreeView1.Items [1] .Data, нула, нула, sw_show);
приключи;

Предмети на стойност започва индексиране? # XA0; :)

Общи съображения относно кода: кодът е пълна, но. # XA0; съжалявам.


> Индексиране Елементите с започва на стойност? # XA0; :)

Разбирам. Вината е моя :) индексиране от нулата.


> Общи съображения от кода: кодът е пълна, но

Но аз не разбирам себе си малко работа с този имот технология (т.е. данни). Моля, кажете ми как да го използвате, за да работи правилно?

може, всички горе-долу?

Node: = TreeView1.Items.AddChild (TreeView1.Selected, "документ");
Node.Data:=strnew("C:\\1.txt ");

все още е добре да се провери TreeView1.Selected до нула, ако бутонът не е изрично забранено


> Но аз не разбирам малко от работата по технология с това
> Имоти (т.е. данни). Моля, кажете ми как да го използвате
> Работи правилно?

Но как да работят. Данни - това е просто една показалка. Може да показва това, което искаш. На обекта към линията на структурата и т.н.
Работа - да се създаде "нещо", за да получите указател към това "нещо", да се равнява този индекс Data собственост, след като тя става ненужна - премахнете "нещо".

Намерих грешките си, да го оправи, и тя работи.


процедура TForm1.Button1Click (Sender: TObject);
започвам
# XA0; form1.TreeView1.Items.Add (нула, edit1.Text);
приключи;

процедура TForm1.Button2Click (Sender: TObject);
започвам
# XA0; form1.TreeView1.Items.AddChild (form1.TreeView1.Selected, "документ");
# XA0; form1.TreeView1.Items [0] .Data: = strnew ( "C: \\ 1.TXT");
приключи;

процедура TForm1.Button3Click (Sender: TObject);
започвам
# XA0; shellapi.ShellExecute (application.Handle, "отворен", form1.TreeView1.Items [0] .Data, нула, нула, sw_show);
приключи;

Едва сега аз не разбирам как всичко това е съхранен във файл и след това да качите за по-нататъшна работа.
Можете да използвате потока?


> Може да използва потока?

И може да тече. И дори се нуждаят.

Разбрах, двете възли за съхранение на данни и техните стойности на данни в отделен файл. Той изглежда да се работи.


Var
FS: TFileStream; // Feed
SL: TStringList; # XA0; // stringlist да изтеглите
I: цяло число; # XA0; # XA0; # XA0; # XA0; // да се движи в една линия
започвам
FS: = TFileStream.Create ( "C: \ proverka.dat", fmCreate); // създаден.
SL: = TStringList.Create; // постави.
опитвам
# XA0; TreeView1.SaveToStream (FS); # XA0; // премине през целия списък и веднъж във файла
# XA0; защото: = 0 до treeview1.Items.Count - 1 направи
# XA0; # XA0; SL.Add (PChar (treeview1.Items [Ь] .Data)); // стойност може да се настрои свойства възел.
# XA0; SL.SaveToStream (FS);
накрая
# XA0; SL.Free; # XA0; // ще се затвори.
# XA0; FS.Free;
приключи;

Ако дървото е сравнително малък, а след това тя ще слезе


> Ако дървото е сравнително малък, а след това тя ще слезе

Смятам да има едно дърво на около 500 вписвания.

послепис Сергей, не мога да разбера обратната процедура - т.е. зарежда обратно в стойностите на дърветата се съхраняват във файл :(

Моля, кажете ми къде да се копае по-нататък?

Не разбирам. Момчета, можете подробно?

Вземете навсякъде Form1 nafig на обработват събитие, а ритниците не се плесна:

процедура TForm1.Button1Click (Sender: TObject);
започвам
TreeView1.Items.Add (нула, edit1.Text);
приключи;

процедура TForm1.Button2Click (Sender: TObject);
започвам
TreeView1.Items.AddChild (form1.TreeView1.Selected, "документ");
TreeView1.Items [0] .Data: = strnew ( "C: \\ 1.TXT");
ен

Какво не е ясно?

Качих stringlist и стартирате чрез нея в една линия, четене-тото ред, което прави копие (StrNew) и възлагане на указател към копие бройна задължителен Data-тото елемент от едно и също дърво.


> Какво не е ясно?
>
> Изтегляне stringlist и пуснете над него в една линия, четене-тото
> String, като копие (StrNew) и определянето на показалеца
> Копие от St-уо Data-тото елемент от едно и също дърво.

Опитах се така, но нещо не е наред. В дървовидна структура получава, така и за цялата тази тълпа.

процедура TForm1.Button2Click (Sender: TObject);
Var
S: String;
pStr: PChar;
FS: TFileStream;
започвам
FS: = TFileStream.Create ( "C: \ proverka.dat", fmOpenRead);
SL: = TStringList.Create; // stringlist
опитвам
treeview1.LoadFromStream (FS);
SL.LoadFromStream (FS);
защото: = 0 до SL.Count-1 // направи тече в една линия.
treeview1.Items [0] .Data: = StrNew (PChar (SL [Ь]));
накрая
SL.Free;
FS.Free;
приключи;

Уважаеми Учителю, моля да ми кажете къде мога да има бъг?
С уважение

и не може да се използва 0, и да използвате променлива?

А трябва да има

vetka1
vetka2

Когато кликнете върху възли в променливата на низ да бъдат показани собственост на данни, т.е. в моя пример, че

Date1
Date2

грешка в горния код е посочено.

това, което имате в действителност в реално код - никой няма да се отгатне

Е, аз за пореден път всичко се промени. Вместо 0 означава променлива, т.е. аз


процедура TForm1.Button2Click (Sender: TObject);
Var
S: String;
pStr: PChar;
FS: TFileStream;
започвам
FS: = TFileStream.Create ( "C: \ proverka.dat", fmOpenRead);
SL: = TStringList.Create; // stringlist
опитвам
treeview1.LoadFromStream (FS);
SL.LoadFromStream (FS);
защото: = 0 до SL.Count-1 // направи тече в една линия.
treeview1.Items [0] .Data: = StrNew (PChar (SL [Ь]));
накрая
SL.Free;
FS.Free;
приключи;

Но резултатът не е това, което ние бихме искали. (


процедура TForm1.Button2Click (Sender: TObject);
Var
S: String;
pStr: PChar;
FS: TFileStream;
започвам
FS: = TFileStream.Create ( "C: \ proverka.dat", fmOpenRead);
SL: = TStringList.Create; // stringlist
опитвам
treeview1.LoadFromStream (FS);
SL.LoadFromStream (FS);
защото: = 0 до SL.Count-1 // направи тече в една линия.
treeview1.Items [Ь] .Data: = StrNew (PChar (SL [Ь]));
накрая
SL.Free;
FS.Free;
приключи;

Ти не си в мен ум, вие сте в източника промените

treeview1.Items [Ь] .Data: = StrNew (PChar (SL [Ь]));

Ами zashib. променило.
изтегляне.
Сега дясната код дисплей


> Сега прав код дисплей

Това е за него и да поиска.
Как?

приблизително същата като кода за зареждане

Тя не достига. Masters ми казват, моля те!

Наистина ли са глупави или се преструва?
каза същото


> Задаване на указател към копие от St-уо Data I-тия елемент
> дърво


> Заспивай лягат

Това означава, че аз съм страхливец!
Аз не отивам да спя, докато не се разбере. Избрах го, - така че трябва да бъде до последно!
Аз съм на работа по този проект, като половината копаят сега объркана и не знам как да се измъкнем къде да търсят изход от нея.
В кода, само с няколко реда, така и за начинаещи не винаги е лесно да се намери и да поправите грешката. Само си помислете. Изпитвате и се обърна към вас за помощ и съвет, а не да слушате всички тук знаете по-добре от всеки друг Делфи. Това е срам, наистина!

Сергей, аз написах целия път сте се препоръчват и както мисля.


Var
S: String;
pStr: PChar;
FS: TFileStream;
започвам
FS: = TFileStream.Create ( "C: \ proverka.dat", fmOpenRead);
SL: = TStringList.Create; // stringlist
опитвам
treeview1.LoadFromStream (FS);
SL.LoadFromStream (FS);
защото: = 0 до SL.Count-1 // направи тече в една линия.
treeview1.Items [Ь] .Data: = StrNew (PChar (SL [Ь]));
накрая
SL.Free;
FS.Free;

TreeView изпълва цялото съдържание на файла, т.е. Имената на възела и стойностите на имотите данни плюс.
Нека да погледнем отново.


защото: = 0 до SL.Count-1 // направи в един цикъл започва с първия елемент минава през всички stringlistu.
treeview1.Items [Ь] .Data: = StrNew (PChar (SL [Ь])); // пълним съставните стойности и добавяне на имот данни към възлите.

Казвате, че има грешка в кода. Съгласен съм, аз не споря, като резултатът е един и същ. Тогава каква е грешката, или нещо липсва в кода си?

с изключение на товарене код е още да се показват на кода. Тук никой не забеляза.


> Има код дисплей

Вече знаех от длъжностите по-горе.
Моля, предложете ми какво е изпълнението на този код.
Откъде да започнем, къде да търсите и какво да се изгради.

изпълнение трябва да бъде вярна.
научат основите на programmiovaniya.
разчитат на помощ.


> Изпълнението трябва да бъде вярна.
> Научете programmiovaniya основи.
> Се надява на помощ.


> Изпълнението трябва да бъде вярна.
> Научете programmiovaniya основи.
> Се надява на помощ.

Е, след това се изкачи в генетичния фонд, и да видим къде действителната реда на пресичане на дърветата възли, тъй като те се запазват:


процедура TTreeStrings.SaveTreeToStream (поток: TStream);
..
започвам
..
# XA0; # XA0; анод: = собственика [0]; // еквивалент TreeView.Items.GetFirstNode
# XA0; # XA0, докато анодът <> нула правя
# XA0; # XA0; започне
.
# XA0; # XA0; # XA0; анод: = ANode.GetNext;
# XA0; # XA0; край;
# XA0; край;
приключи;

От това следва, че ако CB-данни във възлите, за да се подпомогне правилното възстановяване, трябва да се придържаме към точно такава процедура за байпас.

Памет: 0,81 MB
Време: 0,054 гр

Свързани статии

Подкрепете проекта - споделете линка, благодаря!