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
546
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
SDP jo 100 % suositumpi kuin persut
Kertoo Hesarin uusin kannatuskysely. Demareiden kannatus on miltei tuplat verrattuna persuihinl. Suomen kansa ei selväst27814573Valtavasti suomalaisia asunnottomina, mutta ei yhtään somalia
tai muuta kehitysmaalaista. Mites tässä näin kävi? Tiedän hyvin, että esim. somaleita lentää ulos mm. Hekan asunnoista,1554058PS ylivoimainen nousija myös HS:n gallupissa, SDP laskee taas
https://www.verkkouutiset.fi/a/hs-gallup-sdpn-suosio-laskee-ps-nousussa/#0a7d2507 Ylivoimainen viime kuukausien nousija1303831Kovia syytöksiä Stefan Thermaninsta.
Jättänyt taas maksamatta kohuliikemies, hupparit ja muita ostamiaan tavaroita. On soiteltu liikkeestä ja Stefan iskenyt1701728Totuuspuolueen johtaja Jaana "prinsessa Leia" Kavonius on vangittu
Kavonius määrättiin jo keväällä 2024 poissaolevana vangittavaksi todennäköisin syin epäiltynä 13 vainoamisesta ja 24 kun4101715En minä kyllä enää odota sinua
Olet siellä sen harmaan kanssa. Niin, annoit minun nähdä lämpimät tunteesi siitä huolimatta. Se merkitsi kyllä paljon. O351659Jos joku luulee että kaikki käy
Sanon vain tämän. Minun kanssani ei neuvotella. Minun kanssani eletään tasavertaisesti. Jos se on liikaa, niin ovi rinn491346Ei ole rohkeutta tulla jututtamaan
Voidaan me nähdä ja tervehtiä, sitäkin harvoin, mutta iso kynnys on edes mennä lähelle ja kysyä kuulumisia. Ymmärrät var81111Sakin hivutus - ilmiö
Miten tuollainen tuollainen ilmiö kuin ”sakin hivutus” syntyy? Mitä syitä ilmiön syntymiseen tarvitaan? Onko sakissa jok631099Joka kolmas työtön on työkyvytön
Viime vuonna työnhakuvelvoitteen ulkopuolella oli noin kolmannes työttömistä työnhakijoista. Huhheijaa, mihin suomalais1211096