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
565
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
Päivän Riikka: polttoöljyn hinta räjähti
Näyttää tuo putinismi ilmenevän persuissa myös Suomen yrittäjien kampittamisena. Polttoöljy on se katalyytti, joka pitää482287Mökkejä ostellaan nyt ihan hulluna!
Tyypilliset lainamäärät on yli 500 000€ mökkejä ostellessa eli erityisesti tuollaiset miljoonamökit on nyt suomalaisten722183Helsingin yllä valopalloja
https://www.iltalehti.fi/kotimaa/a/1508be00-28c9-4156-83dc-0be5e7aa3066 "Helsingin taivaalla lensi lauantaina puolen yön1241998Perintovero 100 prosenttiin, työeläkkeet ja maataloustuet pois
Noilla eväillä lähden tasapainottamaan valtiontaloutta ja korjaamaan työntekijöiden palkkakuoppaa nostamatta työnantajie441912HÄLYYTYS!!
Ukraina se hyökkää jo Suomen maaperälle. https://www.iltalehti.fi/kotimaa/a/645b83ce-e074-4f00-8b99-245d01b38a363961735Kovasti on hävittäjiä ilmassa. Nytkö se alkoi?
Onko nyt sota ?? `Vai harjoituksiako vain? Hävittäjät pörrää kovasti.1061683Riikka runnoo: polttoöljyn hinta nousi maaliskuussa 40 prosenttia
Onko irvistelijällä sakset hävinneet, vai miksei osaa leikata polttoaineiden hintaa kansalaisten kukkarolle sopivalle ta21622Helsingin yllä lensi yöllä jotain outoa puolen yön aikaan valopalloja
Poliisi on saanut tapauksesta yhden havaintoilmoituksen. Valopalloja oli noin parikymmentä ILtalehdessä on video tapah1241514Millainen on naisellinen nainen
Nyt kun taas mennään keikkuen kesään, niin millainen nainen on naisellinen? Pukeutuminen, olemus, puhetapa, jne. Vilma n1851128Raamatullinen kaste
Seurakunnassamme kastettiin mm eräs muslimi, joka oli tullut uskoon. Hän oli ollut Suomessa viitisen vuotta. Hän oli lu53987