Newsgroup: it.comp.lang.delphi
Titolo: Un chiarimento su TList<>

Ciao a tutti ,
Premesso che ho risolto in questo modo:
type
  SRecord = record
              x: byte;
      end;
  PRecord = ^SRecord;
var
  TempList: TList;
  ARecord: PRecord;
begin
    TempList := TList.Create;
    Try
     New (ARecord);
     ARecord^.x := 200;
     TempList.Add (ARecord);
    Finally
      TempList.Free;
    End;
End.
Non comprendo, seppur vedendo in molti listati ad esempio come citato su:
http://docwiki.embarcadero.com/CodeSamples/en/Generics_Collections_TList_(Delphi)
Perch� scrivendo in questo modo:
var
  TempList: TList<SRecord>;
begin
    TempList := TList<SRecord>.Create ();
    ..........
    TempList.Free;
End.
Mi viene restituito l'errore:
[DCC Error] Test.dpr(16): E2003 Undeclared identifier: 'TList<>'
La linea 16 nel caso specifico corrisponderebbe alla dichiarazione:
  TempList: TList<SRecord>;
ed in particolare: TList appare sottolineato in rosso.
Questa scrittura dovrebbe essere equivalente a quella precedente o no? Se 
sbaglio, vi sarei grato se potresti indicarmi dove sbaglio.
Grazie ancora.
Cooper. 

Premesso che ho risolto in questo modo:
Perch� usi i record e non le classi (come ti � stato detto pi� e pi�
volte)?
Poi, non ti viene in mente che devi includere la unit in cui la classe
� dichiarata, vero?

"Andrea Laforgia" <a...@andrealaforgia.it.invalid> ha scritto nel messaggio 
news:7t1ml55vvg6u3v8fc...@4ax.com...

Io veramente l'avevo inclusa....  di solito non mi perdo in questo... in 
altre parole all'inizio ho scritto:
uses
  SysUtils, classes;
Debbo aggiungere qualche altra unit?
 

Io veramente l'avevo inclusa....
Devi usare le classi, non i record.


Devo quindi inglobare il mio record in una TCollection?  Se � questo che 
devo fare allora ok; ma quello che non capisco � (prendo dal sito che ho 
linkato prima):
var
  List: TList<Integer>;
  FoundIndex: Integer;
begin
  { Create a new List. }
  List := TList<Integer>.Create();
  { Register a notification callback. }
  List.OnNotify := ListChanged;
  { Add a few values to the list. }
  List.AddRange([5, 1, 8, 2, 9, 14, 4, 5, 1]);
end;
Nella scrittura:
  List: TList<Integer>;
E' un tipo di dato, non un record.
Se io provo a scrivere anche in questo modo, mi rimane l'errore che ho 
scritto prima. Eppure stavolta Integer � un tipo di dato intero... non � un 
record e nemmeno una classe.
La dichiarazione:
  List: TList<Integer>;
La leggo (correggimi se sbaglio) come:    Definisci LIST come una lista di 
interi (Integer); se io non voglio un Integer, ma un un record cosi 
definito:
MioRecord = Record
                           x : integer;
                        end;
e scrivo:
  List: TList<MioRecord>;
Non dovrebbe essere la stessa cosa? In questo caso io devo trattare dei 
dati... delle informazioni.
Vorrei solo capire l'errore logico mio dove sta, in tutto questo, nulla di 
pi�.
 

Non dovrebbe essere la stessa cosa? 
S�, � la stessa cosa. L'errore "undeclared identifier" dipende dal
fatto che non � inclusa la unit in cui � dichiarata la classe. 

"Andrea Laforgia" <a...@andrealaforgia.it.invalid> ha scritto nel messaggio 
news:sv3ml5hsf2ccfhusk...@4ax.com...

Scusa la mia ignoranza,  ma in questo caso la classe quale dovrebbe essere? 
Prendimi pure per imbecille.... ma per ovviare a questo errore questa classe 
quale dovrebbe essere?
Io voglio semplicemente gestire una lista, i cui elementi di questa lista 
anzich� essere semplici interi, stringhe etc, siano dei record.
Una soluzione come hai potuto vedere nel primo post l'ho trovata; ora cerco 
di capire come posso arrivare al medesimo risultato in modo pi� semplice.
Nel link che ho postato, ho trovato una forma alternativa che mi sembra di 
capire mi consente di arrivare al medesimo risultato... per� adesso mi stai 
dicendo che devo includere la unit in cui � dichiarata la classe... a questo 
punto ti chiedo quale sarebbe.
Grazie ancora.
 

punto ti chiedo quale sarebbe.
Premi F1 e lo scopri.

"Andrea Laforgia" <a...@andrealaforgia.it.invalid> ha scritto nel messaggio 
news:065ml59hqp9vgj7m8...@4ax.com...

L'ho gi� fatto prima, e mi porta alla pagina che ha per titolo: 
Classes.TList; ma io la unit: classes l'ho gi� aggiunta.
In tutta sincerit� non riesco a capire ci� a cui vuoi farmi arrivare; 
approvo indubbiamente il tuo metodo che mi induce a ragionare, ma qui 
qualcosa prescinde dal ragionamento.
Non capisco quale unit devo aggiungere oltre alla classes.
 

Don't feed the troll
A.


Lungi da me entrare in polemica, ma soltanto questo sai scrivere? E' gi� la 
seconda volta che rispondi con la stessa frase inutile.
Salvo prova contraria, questo newsgroup � aperto a tutti anche a coloro che 
sanno poco e nulla di delphi; non � solo limitato agli esperti e da nessuna 
parte � scritto che le domande devono essere necessariamente di 
problematiche complesse.
Se non vuoi rispondere a quanto ho chiesto, nessun problema nessuno ti 
obbliga a farlo; qualcun'altro lo far� al posto tuo; lo spirito del 
newsgroup � questo.
Ma � contro lo spirito del newsgroup scrivere post inutili come questo; 
oppure (con provocazione) esprimi il tuo quoziente intellettivo in questo 
modo?
Poco importa se qualcuno dice che sei un esperto di delphi; probabilmente lo 
sarai... ma altrettanto probabilmente non sei portato a relazionarti con gli 
altri in modo intelligente.
Scusa la franchezza; ma se proprio non vuoi rispondermi, ti inviterei 
caldamente a non rispondermi; e se mi vuoi rispondere ti inviterei 
caldamente a farlo con intelligenza.
Io non sono un troll (e i miei dieci anni che scrivo sui newsgroup e fra 
l'altro sempre con questo nick lo dimostrano); sinceramente poco mi importa 
se pensi che sia un troll, ognuno � libero di pensare ci� che vuole; ma 
almeno abbi l'accortezza di essere pi� umano... e quindi pi� intelligente, 
prima di etichettare qualcuno.
Detto questo, mi fermo qui; non sono solito rispondere alle provocazioni, e 
questa tua mi sembra una provocazione bella e buona.
Marcello.
 

 ha scritto :

io TList l'ho sempre conosciuto come una lista di oggetti di qualsiasi
classe. Lista che in realt� contiene puntatori a questi oggetti.
Il tempo � passato, Delphi si � evoluto mentre io no, ma credo che Andrea ti
stia dicendo che stai dimenticando
qualcosa di importante.
Io non posso verificare, altrimenti per curiosit� personale mi sarei spinto
a cercare e capire, ma Generics.Collections � forse ci� che manca ?
Magari � una bufala....boh !!
Ciao
Antonio

Non capisco quale unit devo aggiungere oltre alla classes.
Che versione di Delphi stai usando?


La 2010
 

Io non sono un troll
Okay. Tutto da dimostrare comunque. Ammetterai che scrivere "il
seguente codice d� 5 come risultato di 2+2" per poi dire "ho riaperto
Delphi ed ora, magicamente, mi d� 4" � molto vicino alla tipica
provocazione di un troll. 

"Andrea Laforgia" <a...@andrealaforgia.it.invalid> ha scritto nel messaggio 
news:q2bml5pg6tuel3vm6...@4ax.com...

Ok riconosco che non mi conosci e che poteva sembrare una trollata; ma se 
vuoi controlla pure tutti i mie post degli ultimi 10 anni... ti renderai 
conto che non sono tale.
Il fatto � questo, stavo facendo delle prove con tdatetime, perch� volevo 
capire come fosse possibile ordinare pi� date secondo un criterio; e ho 
ottenuto dei risultati sballati e la cosa mi ha lasciato perplesso e cosi ho 
scritto qui, esattamente in quell'istante. Poi ho chiuso tutte cose, e sono 
andato a sbrigare altre cose; quando sono ritornato sul problema ho 
riprovato ed effettivamente era tutto tornato alla normalit�.
Non ho capito cosa fosse successo; ma non importa.
Semplicemente ero in buona fede, non avevo motivo per scrivere una cosa per 
un altra; che vantaggio ne avrei tratto? E soprattutto che flame avrei 
potuto scatenare? Un troll di solito � colui che con qualche provocazione 
accende dei flame in un newsgroup... ma io quali flame avrei mai potuto 
accendere in questo newsgroup? Specialmente quando io stesso per primo avevo 
addirittura espresso la mia perplessit� su quello che in quel momento mi 
stava accadendo sotto gli occhi?
Se io avessi detto:
"Ehi ragazzi il mio delphi � impazzito adesso mi dice che 10 > 12 � true"
Allora capirei la vostra reazione e capirei il motivo per essere etichettato 
troll, ma io ho detto qualcosa del tipo:
"Ragazzi mi sta accadendo qualcosa di strano, delphi mi restituisce true al 
confronto 10 > 12 e non capisco perch�"
Gi� il tono � ben diverso da chi vuol trollare.  Magari non � un errore di 
delphi, per carit� io non ho mai affermato ci�; ho solo detto che avevo 
ricevuto un risultato non logico, non corretto che poi senza che facessi 
nulla � tornato tutto alla normalit�.
Io nn so, probabilmente in passato ci sono stati casi di altri soggetti che 
in una situazione simile a questa si sono comportati realmente da troll e 
posso comprendere la reazione; ma penso sia anche giusto, prima di 
etichettare una persona avere prove certe...
Io posso dimostrarlo, con tutti i post dei miei ultimi 10 anni, fra l'altro 
anche archiviati da google; ma accusare gratuitamente una persona di ci� che 
non �, non mi sembra neanche corretto; � pi� corretto essere meno impulsivi.
Ovviamente non mi riferisco a te, che hai la mia pi� sincera stima, anche se 
mi farebbe piacere che qualche volta mi piacerebbe avere delle risposte pi� 
esaustive, ma mi rendo conto che non potrei mai chiederti una cosa del 
genere perch� tu svolgi il tuo lavoro e se rispondi in questa sede lo fai di 
tua spontanea volont� e quindi non posso pretendere nulla da te oltre a 
quello che ti senti di dare spontaneamente; ma a parte questo, anche quando 
le tue risposte sono poco chiare per me, io ti ringrazio ugualmente per la 
tua risposta; perch� � sempre un aiuto che mi dai.
Diverso � quanto una persona risponde con qualcosa che non ha attinenza 
all'argomento e soprattutto tende a provocare qualcuno o a offendere 
qualcuno.
Io non mi sembra di aver mai offeso qualcuno o di aver usato toni arroganti 
con qualcuno; ho sempre espresso la mia opinione, i miei dubbi anche su cose 
banali, (e da me non  potete aspettarvi cose sofisticate ma cose banali) 
nulla di pi�.
Mi sembra di aver agito sempre nel pieno rispetto di tutti quanti, al 
contrario di qualcuno (che non sei tu naturalmente) e se cosi non � stato, 
vi sarei grato di dirmi quanto e come ho assunto un tono poco consono a una 
persona civile.
Detto questo, lascio a te la libert� di decidere come "giudicarmi".  Ti dico 
solo che io non sono un esperto di delphi, conosco un po' di pi� il pascal; 
ti dico anche che sto cercando di utilizzare il pi� possibile i nuovi 
strumenti che delphi mi mette a disposizione e che in pascal non c'erano.
Quindi la natura delle mie domande cosi banali � prevalentemente dovuto a 
questo; al fatto che voglio utilizzare nel modo migliore delphi.
Io posso scrivere il codice in tanti modi, ma ci sar� sempre una forma 
migliore, pi� elegante, pi� efficiente delle altre che solo con l'esperienza 
si acquisisce; non ho questa esperienza in delphi, ma voglio imparare; anche 
tu hai fatto esperienza; non sei nato con la conoscenza in mano; non 
arriver� certo ai tuoi livelli, ma voglio camminare anche io; e credo 
converrai con me che nessuno pu� guidare un aereo, se prima quando nasce non 
impara a camminare da 4 a 2 piedi... e poi col tempo impara anche a studiare 
gli aerei, fare le simulazioni fino ad acquisire quella competenza 
necessaria per pilotarli.
Credo che il paragone renda l'idea di ci� che voglio dire.
Cmq grazie lo stesso.
 

confronto 10 > 12 e non capisco perch�"
E' la stessa cosa.

"Andrea Laforgia" <a...@andrealaforgia.it.invalid> ha scritto nel messaggio 
news:6qeml55eovqi8coiq...@4ax.com...

Il risultato forse � lo stesso, ma il tono no. Nel primo caso si ha un tono 
arrogante, presuntuoso, e via dicendo; nel secondo caso si ha un tono piu 
modesto, piu umile.  Nel primo caso c'� una chiara malafede; nel secondo 
caso non c'� malafede.
La differenza fra un troll e una persona civile non sta in ci� che si 
comunica, ma nel modo in cui ci� che si comunica viene comunicato.
Naturalmente ihmo, naturalmente potrai dissentire, nessun problema, non 
dobbiamo per forza pensarla allo stesso modo.
Ma non perdiamo di vista il comune denominatore: siamo tutti esseri umani e 
come tale possiamo anche sbagliare...  poi chi si sente senza peccato, � in 
diritto di scagliare la prima pietra.
 

comunica, ma nel modo in cui ci� che si comunica viene comunicato.
Niente affatto. Ci sono moltissimi troll che trollano civilmente.
Anzi, mi viene da dire che sia proprio il loro punto di forza. Un
troll che trolli in maniera spudoratamente aggressiva � scovabile
facilmente. Un troll che trolli "con grazia" � pi� difficile da
individuare, perch� fa le sue sparate iperboliche da ingenuotto e
quindi si gode il trolleggio pi� a lungo. Per esempio, il fatto che tu
stia portando avanti questa discussione, nel modo in cui la stai
portando, � tipicamente da troll, per cui ignorer� il thread.

"Andrea Laforgia" <a...@andrealaforgia.it.invalid> ha scritto nel messaggio 
news:m2gml5dpe1fearnlk...@4ax.com...

Ok se questa � la tua opinione io la rispetto anche se non ho capito tutto 
il trolleggio dove sta.  Con franchezza e senza offesa posso dirti che 
secondo me dovresti essere mentalmente pi� aperto... accettando che possono 
esserci anche soggetti che sono esclusivamente in buona fede; non dovresti 
fare insomma di tutta l'erba un fascio.
Io personalmente ho posto una domanda, ad una risposta non ho insistito pi� 
di tanto... se un troll vuole divertirsi credo avrebbe perseguito il suo 
atteggiamento prendendo in giro chi rispondeva o comunque entrando nella 
polemica.
Non mi sembra di aver fatto nulla di tutto ci�.
Io non sto portando avanti questa discussione, sto solo rispondendo a delle 
affermazioni fatte. E se lo sto facendo � perch� sto rispondendo alle tue 
affermazioni e lo sto facendo in modo costruttivo, senza polemica.
Se tu vedi della polemica nelle mie risposte o vedi qualcosa di non 
costruttivo nelle mie risposte almeno dimmelo evidenziando e spiegandomi 
perch� la pensi cosi; ma solo se vuoi, se non vuoi non succede nulla
Cosi come non succede nulla se tu mi ignorerai; non � che per questo allora 
tu diventi un mostro o chiss� che.
Tu sei libero di fare ci� che ritieni pi� giusto; a me pu� solo dispiacere 
che per la tua chiusura mentale (in qualit� di essere umano) hai giudicato 
me nel modo sbagliato; e "giudicato" � il termine corretto in questo 
contesto, perch� ritengo te una persona valida e preparata, ma pazienza, 
rispetto le tue scelte.
 

 caldamente a non rispondermi;
Mi sa che non solo il solo ad avere problemi di QI...
Magari se fai leggere questo th da un altra persona ti potra' fare un
disegnino per farti capire come stanno le cose.
Sto rispondendo a TE in QUESTO post, ma i miei messaggi "don't feed
the troll" non erano diretti a TE...
Per quel che mi riguarda, sono dispostissimo a rispondere alle tue
domande, appena tu avrai risposto a tutte quelle in sospeso nei vecchi
th aperti da te.
Si...Sai..quei thread di cui, chissa come mai, "..mi devo essere perso
la risposta..."...
Oppure..come era l'altra, aspetta..ah si.. "gli array sono nativi e le
classi no..."
oppure quella stupenda cosa di "estrare pezzi da systuils.pas..o era
classes.pas...
ancora, quella del file exe ridotto " xche era un caso specifico..."
ma GUARDA CASO, questa cosetta e' uscita dopo almeno 30 post...
Ma il top, veramente il top..vogliamo dimenticare quella stupenda
trollata sul break che e' stato mantenuto per retrocompatbilita ...??
cosa sulla quale hai fatto marcia indietro nascondendoti dietro il
"era una mia suppozione..." ma solo appena sei stato messo alle
corde...
Da subumano quale sono ti faccio una proposta..
Azz, per metterla su dovro' sfruttare al massimo quel mezzo neurone
che ho...
1) leggiti i vecchi th che hai aperto
2) guardati le risposte, anche quelle che ti sono "sfuggite"
3) apri un th dove rispondi punto per punto alle domande appese.
Aggiungo alla lista una domanda sola...solo una...
Come mai, da meta anni novanta ad oggi, con un parco di installazioni
non piccolo e dopo aver avuto delphi1,2,3,4,5,6,7 etc...
le stranezze alla Alice nel paese delle meraviglie capitano solo a TE
e prima di te, almeno qua, nessuno ha mai segnalato problemi analoghi?
Aspetto con impazienza le tue risposte a quanto ti ho appena proposto.
In attesa, continuero' a invitare il ng a "don't feed the troll".
A.


Abbassa i toni e rispondo a tutte le domande che vuoi.
Ma prima di tutto ricordati che non puoi giudicare una persona colpevole 
senza prima averne dimostrato la sua colpevolezza.
Ci� premesso, fatto salvo per un gruppo ristretto di persone "che stanno 
sull'olimpo" (usiamo pure questa espressione poco opportuna ma molto 
esemplificativa) si ha l'impressione che sussista la tendenza a ritenere 
tutte le altre persone che scrivono qui, dei "troll", semplicemente perch� 
fanno domande che per "chi sta sull'olimpo" non soltanto risultano banali e 
scontate ma anche prive di senso per la loro stessa natura elementare.
Da questo punto di vista io come tanti altri nella mia situazione, che non 
siamo esperti di delphi (e io in particolare che so pochissimo di delphi), 
saremmo dei "troll" per questo gruppo ristretto di persone...
A questo punto, la solidariet� fra "troll" in quanto pi� umana anche sul 
profilo sociale, porter� a risultati migliori rispetto ad un contributo di 
un guru.
Detto questo, io ho sempre risposto ad ogni domanda; se qualcuna mi � 
sfuggita chiedo venia e se qualche altra l'ho ignorata come quelle citate in 
questo post, � solo per il loro contenuto altamente provocatorio; e a me 
sinceramente correre dietro alle provocazioni mi scoccia.
Io dico semplicemente che non sono un esperto di delphi, provengo dal 
"pascal 7 with object" e molte cose di delphi non le conosco e voglio 
impararle; ora se queste mie domande cosi banali offendono la sensibilit� di 
questi soggetti che rientrano nel gruppo di persone che "vivono 
sull'olimpo"; chiedo scusa, ma non sono capace in questo momento di porre 
domande a loro giudizio pi� intelligenti; per cui se non vogliono 
rispondermi perch� si sentono offesi o chiss� cosa, li invito per prima ad 
astenersi dal rispondermi; e se vogliono rispondermi a tenere presente che 
non sono un troll e al tempo stesso che non sono un guru di delphi, ma una 
semplice persona che vuole imparare e che se fa qualche domanda anche 
banale, scontata, idiota o chiccesia, lo fa solo in buona fede e non per 
altro.
Per cui a questo punto, fuori da ogni polemica, le mie domande saranno 
rivolte solo ed esclusivamente, a coloro che avendo la passione per delphi, 
siano disposti ad aiutarmi secondo quello che � il vero spirito di un 
newsgroup.
Mi dispiace solo che, ci sia cotanta chiusura mentale e che si giudichi una 
persona nel modo sbagliato con estrema facilit� soltanto perch� in questo 
newsgroup pone delle domande banali e talvolta anche idiote... ritendo che 
agisse solo ed esclusivamente in malafede.
Chi "sta sull'olimpo" appare chiaro che ha perso il concetto di umanit�, di 
solidariet� e di aiuto reciproco che caratterizza ogni newsgroup; 
trasformando di fatto questo luogo come ambiente da "aperto a tutti" a 
"riservato esclusivamente agli addetti ai lavori", riservandosi il diritto 
di offendere gratuitamente o usare toni poco opportuni; siamo tutti esseri 
umani.
Detto questo, penso sia giusto fermarmi qui.
Riguardo a questo thread, se qualcun altro � disposto a farmi capire cosa mi 
manca, ne sarei immensamente grato.
Tornando in argomento, mi � stato detto che dovevo aggiungere una classe 
nella uses, almeno cosi io ho capito.
Ora io ho questa situazione:
Uses SysUtils, Classes;
Type MioRecord = Record
                                       ......... // quello che voglio
                                  End;
Var List: TList<MioRecord>;
Begin
       List := TList<MioRecord>.Create ();
       ............
End.
Mi viene dato errore su TLIST<> e non riesco a capire perch�.
Io il problema l'ho risolto ricorrendo a new e usando i puntatori; ma vorrei 
solo riuscire a trovare una forma pi� elegante e semplice di trattare 
elementi di record in una lista.
Grazie ancora a chi � disposto ad aiutarmi.
Marcello.
 

 [DCC Error] Test.dpr(16): E2003 Undeclared identifier: 'TList<>'
Come � indicato nella stessa pagina che hai riportato come esempio, la 
classe *TList<T>* � definita nella unit "Generics.Collections": devi 
quindi ovviamente dichiarare questa unit nella clausola *uses* per poter 
utilizzare le classe.
Questa si distingue dalla *TList* non "generica", definita nella unit 
"Classes", che non pu� essere cio� parametrizzata in base ad un tipo.
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

 ha scritto nel messaggio 
news:4b5bc934$1...@news.x-privat.org...

Approfitto per ringraziare sia te Marco che A.Tarolla per avermi aiutato a 
capire cosa mi mancava.
In effetti devo ammettere che per quanto avessi la soluzione sotto gli occhi 
(era scritto anche nell'url), leggendo "Generics Collection" non avevo 
pensato al nome della unit ma alla traduzione italiana: "Collezioni 
Generiche" e quindi avevo sottovalutato il significato reale inteso come 
unit.
Perdonate la mia "superficialit�" e grazie ancora veramente molto, abbiate 
pazienza con me.
Cooper.