Hogyan lehet fenntartani egy listát

Hogyan lehet fenntartani egy listát

Most nem emlékszem, hogyan kell tartani egy listát a komponens tárgyakat. Minden tárgyak örökösök TPersistent, de nem azonos típusú - TCollection nem működik. Ha valaki már megtette, mondd el, mi a legjobb. Maga a lista most TObjectList nem tették közzé tulajdon.

cm.
TPersistent.DefineProperties ()
TPersistent.DefineProperty ()
TPersistent.DefineBinaryProperty ()
TWriter.WriteListBegin / End
TReader.ReadListBegin / End

Igen láttam, de nem járt ötlet - ez lenne Property - nem probléma. És ez a szülő objektum TCollectionItem - és ne nyomja az ő objektumok listáját. Lásd valamit TComponent tenni?

Köszönöm a segítséget WriteList.


> Tulajdon lenne - nem probléma


> Listája létesítményeihez ne nyomja

ez az oka. cm. TReader.ReadCollection, TWriter.WriteCollection

ReadCollection egy segítő módszer, melyet a többi olvasó módszerek olvasni a címkézett gyűjtemény értékét a jelenlegi olvasó pozíció. ReadCollection végigmegy db gyűjteménye, hogy minden egyes elem egy gyűjtemény területén lehetőséget patak ki annak tulajdonságait. Ez a módszer nem írja ki a tételek számát és a gyűjtemény indexek, mert a felhasználó hozzáadhat vagy törölhet elemeket.

Azt jelenti, hogy nem emel kifogást CollectionItem és nincs tulajdonságai Objects. Most csak nézd:
eljárás TWriter.WriteCollection (Érték: TCollection);
var
I: integer;
OldAncestor: TPersistent;
kezdődik
OldAncestor: = ős;
Ős: = nil;
megpróbál
WriteValue (vaCollection);
ha az érték <> nulla, akkor
az I: = 0 Value.Count - 1 do
kezdődik
WriteListBegin;
WriteProperties (Value.Items [I]);
WriteListEnd;
végén;
WriteListEnd;
végül
Ős: = OldAncestor;
végén;
végén;
Van egy kissé eltérő mechanizmus - Van tárgyak különböző osztályok. Ő teszi a boot hozzáadása, majd ReadProperties. Akkor ez a trükk nem fog működni.


> CollectionItem nem egy tárgy

mivel „nem emel kifogást.” azonos TPersistent örököse.

Ezért, miközben a gyűjtemény egyes elem lesz az úgynevezett módszer avstomaticheski DefineProperties, ami felübírálható minden származtatott osztály TCollectionItem.

Valamint -. ha a példány az örökös TCollectionItem akar megőrizve magát, és mentse a saját listák vagy mezők (a Kutch-ve saját CB-B), akkor ő nem is azonos módon!

Nem abban az értelemben, Comp. Nos, ez nem számít.
Nem kell menteni TCollectionItem, ez nem probléma, de a probléma az, hogy tartalmaz, és tartalmaz egy listát a különböző tárgyak TPersistent örökösök (ami mellesleg lehet hosszabbítani külső csomag plugin-ok). Módszer WritePersistentObject ott, így valószínűleg meg kell örökölni mindent TComponent és írjon WriteComponent listát.


> Tartalmaz egy listát a különböző tárgyak TPersistent örökösök
>

mindegyikről akkor szabadon „kézzel” ok DefineProperties ().
És jól mindegyik maga fogja írni / olvasni az egyéni Holy Island

De objektumként építik az olvasás? Meg kell azt is tudni a kategóriájában. Ismét kézzel zavart. A lista osztályok előre nem ismert. Az osztály definíciója TCollection (Nem volt még üzletek úgy tűnik, hogy megosszák) és TComponent veszi a listából a regisztrált osztályok.


> Meg kell azt is tudni az osztályban

rögzítésekor adatfolyam van tárolva a legelső osztály nevét kommunikációs CMV


> Ismét kézzel zavart

Nincs más eszközökkel - toluo „kézzel”, ha egyszer meghatározásra viselkedés tartós másolatok-ra, ha hívja a módszer DefineProperties ()


> Osztályok jegyzéke előre nem ismert

teszik, hogy ő volt ismert
az egyes osztályok a lista nyilvántartásba
különben a probléma (a formájában, hogy hogyan tervezik meg) megoldhatatlan


> TComponent veszi a listából a regisztrált osztályok

semmi nem akadályozza meg az osztály nyilvántartásba.
ha csak ott volt a nyilatkozata.

Tehát ebben az esetben én is könnyebben nem örökölni TPersistent, hanem TComponent. Azt írja a nevét az osztály. DefineProperties nekem, hanem szükség van - ezek az osztályok viszont tartalmaznak adatokat.

> Semmi nem akadályozza meg az osztály nyilvántartásba.
Ez kötelező.

általában - igen
TComponent örököseként több megkönnyítése rutinmunka
De a regisztráció természetesen szükség van, de már nem az osztály, és az alkatrész (TRegisterComponent [s])

közelről, hogy még TComponent.GetChildren ()
A Min-ve egészen ésszerű alternatíva, hogy lemondanak a gyűjtemények javára Holy Island lista TComponent.Components [] - ismét csökkenést munkában. TComponent szer már végrehajtja lista (és menedzsment) az alkatrészek, amelyeket a tulajdonos, ez nem bűn a használata)

TMyObject = osztály (TComponent)
.
védett
eljárás GetChildren (Proc: TGetChildProc); felülbírálhatja;
.
végén;
.
eljárás TMyObject.GetChildren (Proc: TGetChildProc);
var
i: integer;
kezdődik
i: = 0 ComponentCount - 1 do
Proc (komponensek [i]);
végén;

Ennek eredményeként, miközben / helyreállítását összetevője minden „gyermek” lesz mentve / visszaállt automatikusan

Tisztában vagyok. Már megtettem, de ezúttal a szerkezet ilyen komponens - Dokumentum (szintén komponens) - A dokumentum az adatokat (az örökös) - Adatok Root (Collection) - Adatok blokkok (CollectionItems) - Az adatok mezők (a TComponent látszólag) - ingatlan adatai . És mindez káosz kell menteni.

Memória: 0,75 MB
Idő: 0,061 c

Kapcsolódó cikkek