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.
TList
5
563
Vastaukset
- Delphiguru
"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.- 1 4 + 1 8
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. - Delphiguru
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. - Kahvipapua
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
- Delphikoodari..
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;
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Asiakkaalle ei myyty energiajuomaa - tuomio tuli syrjinnästä
Vaikka oli ilmeisesti täysi-ikäinen. Tosin ei lapsiakaan saisi syrjiä, koska oppivat helposti itsekin syrjimään, jos koh422778Miksi aina pitää kilpailla parhaudesta?
Mua ärsyttää se, että kaikki kilpailut ja visailut keskittyvöt aina siihen, kuka on paras missäkin. Tänäkin aamuna tuli622137Pakkoruotsista luopumalla kymmenien miljoonien säästöt
Pakkoruotsin opiskelun kustannuksista ei ole juurikaan tehty kustannusselvityksiä, mutta joidenkin arvioiden mukaan siit521976- 911814
Luterilaisen kirkon koko kastekaava on väärä
Uudessa testamentissa on kaksi täysin ristiriidassa olevaa kastekäskyä Matt 28:19 ja Ap. t. 2:38. Matteuksen evankeluimi411624Kerro minulle
Miksi teit niinkuin teit? Miksi kielsit tunteesi minua kohtaan. Miksi et halunnut että tiedän oikeasti mitä tunnet. Etkö641255Seksuaalinen ahdistelu, naisten vähättely ja törkeä käytös naisia kohtaan kukkii rakennustyömailla
Tällainen lienee ihan tavallisista kaikilla "äijävaltaisilla" työpaikoilla. Kaikki miesvaltaiset alat eivät ole toksise1251195Miten Yxäri iskettiin?
Voisin tässä unta odotellessani kertoa, miten mieheni lähestyi minua. Tunsimme entuudestaan. Hän kyseli minulta aina j1661175Kristinuskossa Isän ja Pojan ja Pyhän Hengen nimessä
Jeesuksen kehoitus kastamiseksi Isän ja Pojan ja PH:n nimeen. Matt 28:19: "Menkää siis ja tehkää kaikki kansat minun3781125Rakkaalle J miehelle.
Hitto mulla on sua ikävä. Haluisin heti nyt tulla sun syliin ja suudella sua.ja, ja ja... Hirveä ikävä.641113