Как да работим с данни (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 гр
Свързани статии