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