Hogyan működik az adatokat (pointer) a komponens treeview

Hogyan működik adat (Pointer) a komponens TreeView?

eljárás TreeView_OnDeletion (Sender: TObject; Csomópont: TTreeNode)
kezdődik
# XA0; StrDispose (Node.Data);

Kicsit kísérleteztünk egy aktuális, hogy ebben a szellemben. De nem szántani.
Nézd, ez nem így van.

eljárás TForm1.Button1Click (Sender: TObject);
kezdődik
# XA0; form1.TreeView1.Items.Add (nulla, edit1.Text);
végén;

eljárás TForm1.Button2Click (Sender: TObject);
kezdődik
# XA0; form1.TreeView1.Items.AddChild (form1.TreeView1.Selected, "dokumentum");
# XA0; form1.TreeView1.Items [2] .data: = strnew ( "C: \\ 1.txt");
végén;

eljárás TForm1.TreeView1Click (Sender: TObject);
kezdődik
# XA0; shellapi.ShellExecute (application.Handle, "nyitott", form1.TreeView1.Items [1] .data, nulla, nulla, sw_show);
végén;

Tételek, amelyek értéke indexelés kezdődik? # XA0; :)

Általános megfontolások a kód: a kód teljes volt, de. # XA0; sajnálom.


> Jelölő db értékkel kezdődik? # XA0; :)

Értem. Az én hibám :) indexelés a semmiből.


> Általános szempontok a kód: a kód teljes volt, de

De nem értem, magamnak egy kis munka az ingatlan technológia (vagyis az adat). Kérem, mondja meg, hogyan kell használni, hogy működjön rendesen?

lehet, a so-so?

Csomópont: = TreeView1.Items.AddChild (TreeView1.Selected, "dokumentum");
Node.Data:=strnew("C:\\1.txt „);

még jó, hogy ellenőrizze TreeView1.Selected nulla volt, ha a gombot nem kifejezetten tilos


> De nem értem, egy kicsit a technológiai munkát ezzel
> Property (vagyis az adat). Kérem, mondja meg, hogyan kell használni
> Megfelelően működik?

De hogyan működik. Adat - ez csak egy mutató. Jelezheti, hogy mit akar. A tárgy, hogy a vonal a szerkezete, stb
Work - létrehozni „valamit”, hogy egy mutatót ez a „valami”, hogy kiegyenlíti az ingatlan Data index, miután szükségtelenné válik - távolítsuk el a „valami”.

Találtam hibáikból, megjavítani, és működött.


eljárás TForm1.Button1Click (Sender: TObject);
kezdődik
# XA0; form1.TreeView1.Items.Add (nulla, edit1.Text);
végén;

eljárás TForm1.Button2Click (Sender: TObject);
kezdődik
# XA0; form1.TreeView1.Items.AddChild (form1.TreeView1.Selected, "dokumentum");
# XA0; form1.TreeView1.Items [0] .data: = strnew ( "C: \\ 1.txt");
végén;

eljárás TForm1.Button3Click (Sender: TObject);
kezdődik
# XA0; shellapi.ShellExecute (application.Handle, "nyitott", form1.TreeView1.Items [0] .data, nulla, nulla, sw_show);
végén;

Csak most nem értem, hogyan ez az egész egy fájlba, majd töltse fel a további munkához.
Használhatja az áramlás?


> Lehet használni az áramlás?

És tud folyni. És még szüksége van.

Rájöttem, mind az adatok tárolása csomópontok és azok adatait értékeket egy külön fájlban. Úgy tűnik, hogy működik.


var
FS: TFileStream; // hírcsatorna
SL: TStringList; # XA0; // stringlist letölteni
i: integer; # XA0; # XA0; # XA0; # XA0; // futtatni a hurok
kezdődik
FS: = TFileStream.Create ( "c: \ proverka.dat", fmCreate); // létre.
SL: = TStringList.Create; // a.
megpróbál
# XA0; TreeView1.SaveToStream (FS); # XA0; // végigmenni a teljes listát és ha a fájlban
# XA0; i: = 0 treeview1.Items.Count - 1 do
# XA0; # XA0; SL.Add (PChar (treeview1.Items [i] .data)); // érték beállítható tulajdonságokat csomópontot.
# XA0; SL.SaveToStream (FS);
végül
# XA0; SL.Free; # XA0; // bezárja.
# XA0; FS.Free;
végén;

Ha a fa viszonylag kicsi, akkor jön le


> Ha a fa viszonylag kicsi, akkor jön le

Azt tervezzük, hogy a fa körülbelül 500 bejegyzés.

Ui Szergej, nem tudok rájönni a fordított eljárás - azaz betöltve vissza a fa tárolt értékeket egy fájlba :(

Kérem, mondja meg, hogy hol ásni tovább?

Nem értem. Srácok, akkor részletesen?

Vegye mindenütt Form1 nafig eseménykezelők, míg a rúgások nem csapott:

eljárás TForm1.Button1Click (Sender: TObject);
kezdődik
TreeView1.Items.Add (nulla, edit1.Text);
végén;

eljárás TForm1.Button2Click (Sender: TObject);
kezdődik
TreeView1.Items.AddChild (form1.TreeView1.Selected, "dokumentum");
TreeView1.Items [0] .data: = strnew ( "C: \\ 1.txt");
en

Mi nem világos?

Feltöltöttem stringlist és futtatja rajta egy hurok, olvasni az i-edik sor, hogy egy másolat (StrNew) és hozzárendelése egy mutató a copy-szám kötelező adat i-edik eleme az ugyanazon a fán.


> Mi nem világos?
>
> Letöltés stringlist és futtatja rajta egy hurok, olvasás az i-edik
> String, a másolás (StrNew), és hozzárendel egy mutatót
> Egy példányát St-woo adatok i-edik eleme az ugyanazon a fán.

Próbáltam úgy, de valami nincs rendben. A treeview lesz mindkettő, és mindez tömegben.

eljárás TForm1.Button2Click (Sender: TObject);
var
s: string;
pStr: PChar;
FS: TFileStream;
kezdődik
FS: = TFileStream.Create ( "c: \ proverka.dat", fmOpenRead);
SL: = TStringList.Create; // stringlist
megpróbál
treeview1.LoadFromStream (FS);
SL.LoadFromStream (FS);
i: = 0 SL.Count-1 do // fut egy hurok.
treeview1.Items [0] .data: = StrNew (PChar (SL [i]));
végül
SL.Free;
FS.Free;
végén;

Kedves Mester, kérem, mondja meg, hol van a hiba?
Tisztelettel

és nem tudja használni 0, és használja a változó?

Egy kell

vetka1
vetka2

Amennyiben rákattint a csomópontok a stringváltozó megjelenítendő adatok tulajdon, azaz az én például azt

date1
Date2

hiba a fenti kódot megadni.

mi van valójában az igazi kódot - senki nem fog kitalálni

Nos, én még egyszer minden megváltozott. Ahelyett, hogy a 0 azt jelenti változó, azaz, én


eljárás TForm1.Button2Click (Sender: TObject);
var
s: string;
pStr: PChar;
FS: TFileStream;
kezdődik
FS: = TFileStream.Create ( "c: \ proverka.dat", fmOpenRead);
SL: = TStringList.Create; // stringlist
megpróbál
treeview1.LoadFromStream (FS);
SL.LoadFromStream (FS);
i: = 0 SL.Count-1 do // fut egy hurok.
treeview1.Items [0] .data: = StrNew (PChar (SL [i]));
végül
SL.Free;
FS.Free;
végén;

De az eredmény nem az, amit szeretnénk. (


eljárás TForm1.Button2Click (Sender: TObject);
var
s: string;
pStr: PChar;
FS: TFileStream;
kezdődik
FS: = TFileStream.Create ( "c: \ proverka.dat", fmOpenRead);
SL: = TStringList.Create; // stringlist
megpróbál
treeview1.LoadFromStream (FS);
SL.LoadFromStream (FS);
i: = 0 SL.Count-1 do // fut egy hurok.
treeview1.Items [i] .data: = StrNew (PChar (SL [i]));
végül
SL.Free;
FS.Free;
végén;

Te nem nekem szem előtt tartva, te vagy a forrás módosítása a

treeview1.Items [i] .data: = StrNew (PChar (SL [i]));

Nos zashib. megváltozott.
letölteni.
Most jobb kijelző kódja


> Most jobb kijelző kódja

Ennyi, és kérjen.
Hogyan?

körülbelül ugyanaz, mint a boot-kód

Ez nem éri el. Masters mondd kérlek!

Te tényleg hülye vagy úgy tesz, mintha?
ugyanezt mondta


> Hozzárendelése mutatót egy példányát St-woo adatok i-edik eleme az
> fa


> Aludj feküdni

Ez azt jelenti, hogy én vagyok gyáva!
Nem megyek aludni, amíg én nem értem. Azért választottam ezt - ezért kell, hogy az utolsó!
Dolgozom ezen a projekten, félig dig most zavaros, és nem tudom, hogyan lehet kijutni, hol kell keresni a kiutat belőle.
A kód, csak egy pár sort, és egy kezdő, hogy nem mindig könnyű megtalálni és kijavítani a hibát. Gondoljunk csak bele. Azt tapasztalja, és megfordult, hogy a segítséget és tanácsot helyett hallgatni itt mindenki jobban tudja, mint bárki delphi. Ez szégyen tényleg!

Szergej, írtam minden, ahogy tanácsolta és csakúgy, mint gondolnánk.


var
s: string;
pStr: PChar;
FS: TFileStream;
kezdődik
FS: = TFileStream.Create ( "c: \ proverka.dat", fmOpenRead);
SL: = TStringList.Create; // stringlist
megpróbál
treeview1.LoadFromStream (FS);
SL.LoadFromStream (FS);
i: = 0 SL.Count-1 do // fut egy hurok.
treeview1.Items [i] .data: = StrNew (PChar (SL [i]));
végül
SL.Free;
FS.Free;

TreeView kitölti az egész fájl tartalmát, azaz a A csomópont nevét és értékeit ingatlan adatai Plus.
Nézzük újra.


i: = 0 SL.Count-1 do // egy ciklusban kezdve az első elem fut egész stringlistu.
treeview1.Items [i] .data: = StrNew (PChar (SL [i])); // itt töltse az alkatrész értékek és a hozzá adattulajdonsággá a csomópontokat.

Azt mondják, hogy van egy hiba a kódot. Egyetértek, én nem vitatkozom, mert az eredmény ugyanaz. Akkor mi a hiba, vagy valami hiányzik a kódot?

kivéve loading kód is megjelenik a kód. Itt senki sem látta.


> Van egy kijelző kódja

Azt már tudtam, az oszlopok felett.
Kérjük jelezze nekem mi a végrehajtása ezt a kódot.
Hol kezdjem, hol kell keresni, és mit kell építeni.

végrehajtás helyesnek kell lennie.
megtanulják az alapokat a programmiovaniya.
támaszkodnak a segítséget.


> Végrehajtás megfelelőnek kell lennie.
> Ismerje meg az alapokat programmiovaniya.
> Támaszkodhat HELP.


> Végrehajtás megfelelőnek kell lennie.
> Ismerje meg az alapokat programmiovaniya.
> Támaszkodhat HELP.

Nos, akkor mászni a génállomány, és hol a tényleges sorrendben bejárása facsomópontok ahogy tárolva vannak:


eljárás TTreeStrings.SaveTreeToStream (Stream: TStream);
..
kezdődik
..
# XA0; # XA0; anód: = tulajdonos [0]; // egyenértékű TreeView.Items.GetFirstNode
# XA0; # XA0, míg az anód <> nulla do
# XA0; # XA0; kezdődik
.
# XA0; # XA0; # XA0; anód: = ANode.GetNext;
# XA0; # XA0; end;
# XA0; end;
végén;

Ebből következik, hogy ha a CB-Data a csomópontok elősegítése érdekében megfelelő visszanyerését, meg kell ragaszkodni, hogy csak ilyen elkerülő eljárást.

Memória: 0,81 MB
Idő: 0.054 c

Kapcsolódó cikkek