TList

Miten tuota TList pitäisi käyttää (kokemusta lähinnä taulukoista)

Miten sillä tuodaan olion sisältä dataa?
Miten sillä viedään olion sisälle dataa?

Löytyisikö seimerkkiä näihin.
5581
Äänestä

Muut lukivat myös

Vastaukset 5

Vanhimmat

"Miten tuota TList pitäisi käyttää (kokemusta lähinnä taulukoista)

Miten sillä tuodaan olion sisältä dataa?
Miten ?"

siis...

TList -luokka ei ole siksi, että sillä "tuodaan olion sisältä dataa" tai "sillä viedään olion sisälle dataa".

VAAN:

TList -luokka on luokka, joka sisältää objektiviitteitä, joita siihen on tallennettu.

Siis:

var

L : TList;

begin

L := TList.Create;

try

L.Add(Objekti1);

L.Add(Objekti2);

L.Add(Objekti3);

// Tässä voi käyttää ko. listaa. Esimerkiksi:

for i := 0 to L.Count - 1 do begin

if L[i] is TEdit then TEdit(L[i]).Text := 'haloo';

if L[i] is TLabel then TLabel(L[i]).Caption := 'heippa';

if L[i] is TStrings then TStrings(L[i]).add('Uuno Turhapuro');

end;

finally

FreeAndNil(L);

end;

end;

HUOM!

Kannattaa kirjoittaa Delphin Editorissa TList, siirtää kohdistin alku- T:n kohdalle ja painaa Ctrl-F1, ja LUKEA (englanninkielinen) ohjeteksti avautuvasta ikkunasta.

Äänestä
  • Noi kysymykset oli tarkoitettu olevan vähän erillään.

    " TList -luokka ei ole siksi, että sillä "tuodaan olion sisältä dataa" tai "sillä viedään olion sisälle dataa"."


    Eli noihin kahteen viimeiseen kysymyksen
    ajatuksena on että minulla on olio johon kuuluu tuo lista.
    Miten luen sen (kokoinaisen) listan toiseen olioon.

    Ja vastaavasti miten siirrän toisesta oliosta tuollaisen listan.

    Äänestä

  • 1 4 + 1 8 kirjoitti:

    Noi kysymykset oli tarkoitettu olevan vähän erillään.

    " TList -luokka ei ole siksi, että sillä "tuodaan olion sisältä dataa" tai "sillä viedään olion sisälle dataa"."


    Eli noihin kahteen viimeiseen kysymyksen
    ajatuksena on että minulla on olio johon kuuluu tuo lista.
    Miten luen sen (kokoinaisen) listan toiseen olioon.

    Ja vastaavasti miten siirrän toisesta oliosta tuollaisen listan.

    riippuu muistinhallinnasta.

    Suomi24:n typerä forumsofta juuri tuhosi vastaukseni koska se ylitti 5000 merkkiä.

    Siis ei laskuria kirjoittamisen aikana ja lopuksi ilmoitus:

    "vastauksesi on liian pitkä"

    Kun tästä siirty toiselle välilehdelle, niin kirjoitettua tektiä ei saa takaisin mitenkään !

    Ratkaisu on periaatteessa helppo:

    Olio1.Lista.Assign(Olio2.Lista);

    missä molemmissa olioissa Lista on TList -tyyppiä.

    huomaa kuitenkin, että olet itse vastuussa oikeasta muistinhallinnasta!

    Formin omistamien käyttöliittymäkomponenttien osalta muistinhallinta on automaattista (perustuu Owner -kenttään), muuten olet siitä itse vastuussa.

    Jos muistinhallinta tuntuu hankalalta:

    http://www.justsoftwaresolutions.co.uk/delphi/using-interfaces-for-exception-safety.html

    http://edn.embarcadero.com/article/28217

    siis interface (ja TInterfacedObject) on tässä avainsana.

    Äänestä

  • Delphiguru kirjoitti:

    riippuu muistinhallinnasta.

    Suomi24:n typerä forumsofta juuri tuhosi vastaukseni koska se ylitti 5000 merkkiä.

    Siis ei laskuria kirjoittamisen aikana ja lopuksi ilmoitus:

    "vastauksesi on liian pitkä"

    Kun tästä siirty toiselle välilehdelle, niin kirjoitettua tektiä ei saa takaisin mitenkään !

    Ratkaisu on periaatteessa helppo:

    Olio1.Lista.Assign(Olio2.Lista);

    missä molemmissa olioissa Lista on TList -tyyppiä.

    huomaa kuitenkin, että olet itse vastuussa oikeasta muistinhallinnasta!

    Formin omistamien käyttöliittymäkomponenttien osalta muistinhallinta on automaattista (perustuu Owner -kenttään), muuten olet siitä itse vastuussa.

    Jos muistinhallinta tuntuu hankalalta:

    http://www.justsoftwaresolutions.co.uk/delphi/using-interfaces-for-exception-safety.html

    http://edn.embarcadero.com/article/28217

    siis interface (ja TInterfacedObject) on tässä avainsana.

    Harmi kun jää näkemättä näiden Delphi gurujen koodia

    Äänestä

  • Kahvipapua kirjoitti:

    Harmi kun jää näkemättä näiden Delphi gurujen koodia

    Eli siis TList vain säilöö kokoelman pointereita, jotka siis osoittaa olioihin tai mihin tahansa dataan, sinne siis voi "upottaa" mitä tahansa materiaalia ja käydä läpi, tosi hyödyllinen tuo TList :)

    Yksi nopeutusvinkki myös TListin köytöstä, kun se pitää käydä läpi..

    for I := 0 to lista.count-1 do
    begin
    objektiX := TObjectiX( lista.List[I] );

    if Assigned( objektiX ) then
    begin
    //.. jeps...
    end;

    end;

    Äänestä

Kommentoi aloitusta


14+18 kirjoitti:

Miten tuota TList pitäisi käyttää (kokemusta lähinnä taulukoista)

Miten sillä tuodaan olion sisältä dataa?
Miten sillä viedään olion sisälle dataa?

Löytyisikö seimerkkiä näihin.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu