Newsgroup: it.comp.lang.delphi
Titolo: La struttura dati più giusta per sincronizzarsi ad una TreeView

Voglio sincronizzare la mia TreeView ad una struttura dati che mi permetta 
di memorizzare anche altre informazioni (tipo il percorso assoluto del 
nodo, per non doverlo calcolare ogni volta, oppure un'immagine associata,
oppure se un nodo deve essere visualizzato in una ListView, ecc.).
Qual è la struttura più adeguata? Avevo pensato ad un array dinamico di 
record definiti da me, ma come tenerlo sincronizzato? 
Quello che vorrei evitatare è di scorre ogni volta tutto l'array alla 
ricerca del nodo che rappresenta quello selezionato nella TreeView, e 
viceversa evitare di dovee scorrere tutta la TreeView alla ricerca 
dell'elemento nella mia struttura dati che ne rappresenti il nodo 
selezionato.
C'è un modo rapido? Avevo pensato ad un array di TTreeNode, e funziona, 
così ho i puntatori al nodo selezionato e posso accedervi direttamente, ma 
non posso memorizzare altri dati... Voglio capra e cavoli!!!
Sergio Pappalardo aka Silver Black
--- posted by geoForum on 
http://www.delphiedintorni.it



TTreeNode pubblica una proprietà che si chiama Data.
E' un puntatore generico, poi farci quello che vuoi, associardi un
puntatore a un record o una classe.
es.
Type 
  TMyRec = record 
    .......
  end;
  PMyRec = ^TMyRec
var
  P: PMyRec;
  New(P);
  ANode := TreeView1.Items.add(nil, 'pippo');
  ANode.Data := P;
Ricordati che se tu che dovrai occuparti di rilasciare i puntatori.
-- 
"La velocità luce non è sufficiente Comandante Nunziatella, 
dobbiamo passare alla velocità smodata!"

dobbiamo passare alla velocità smodata!"
La frase esatta era: 
"Velocità luceee!!!! No... la velocità luce è troppo lenta, passiamo alla 
velocità smodata.". 
E l'altro con terrore: 
"La velocità smodata?!!!!..." 
Se vuoi ti mando l'MP3!!!!!!! Ho riso 36 ore quando l'ho sentita (mitico 
StarBalls!!).


--- posted by geoForum on 
http://www.delphiedintorni.it
	Ciao
	MassimoB
 
---------------------------
http:\\
www.massimobeschi.it

[...]
intendevo o
1 - TTreeNodes, per poi poter dare in pasto l'istanza
alla TreeView che ti pare e a quante ne vorrai,
mediante la proprietà Items, con un semplice casting al
genitore. Questo ti permette di poter tenere in
memoria un'unica struttura TuaTreeNodes e quante
visualizzazioni ti pare, il problema è che comunque per
accedere ai nodi mediante i metodi della TreeView e
prelevarne dati personalizzati dovresti eseguire un
casting a TuoTreeNode poichè la TreeView è generica.
2 - TTreeView in questa maniera avresti un componente
visuale ma ogni TreeView, utilizzata, dovrebbe
mantenere una copia a se stante della Struttura (se non
esegui accrocchi particolari). Questo sistema ti
premetterebe, di contro, di avere un codice "esente"
(nell'utilizzo standard ;) ) da casting che
complicherebbero la lettura del codice che utilizza la
TuaTreeView infatti l'accesso ai nodi ed hai metodi
della TuaTreeView sarebbe correttamente tipizzato.
bah detto questo ... io ... forse ... huumm ... nella
maggior parte dei casi, preferirei ereditare da
TTreeView infatti nel caso non avessi bisogno della
parte visuale metterei semplicemente Visible:=false; ;)
spero, come al solito, di non aver detto fesserie ;)
	MassimoB
 
---------------------------
http:\\
www.massimobeschi.it

StarBalls!!).
Spaceballs!!!!
ehehe ho consumato il DVD, solo che ho adattato il discorso in una
sola frase :)
Ciao.

parte visuale metterei semplicemente Visible:=false; ;)
Ringrazio tutti e due per le illuminanti risposte!!! Entrambe le soluzioni 
sono di un'eleganza estrema, per non parlare delle prestazioni ottenibili. 
Comunque volevo chiederti, caro Massimo, ma non mi basta ereditare la 
TTreeView e fare un override della proprietą Item? E in caso un 
overloading di quelle funzioni che necessitano di lavorare con i *miei* 
nodi, in modo che non ci siano incompatibilitą di tipi. Perchč dovrei 
reimplementare tutti i metodi?
Forse non ho capito io...


--- posted by geoForum on 
http://www.delphiedintorni.it
	Ciao
	MassimoB
 
---------------------------
http:\\
www.massimobeschi.it

Sto facendo proprio come Pini ha e mi viene un dubbio Massimo: la memoria
che allochiamo ogni volta che usiamo il New (in questo specifico contesto),
anche se io sto usando il GetMem, viene liberata automaticamente al Destroy
del TTreeView o dovremo liberarla da codice scorrendo tutti i nodi, che ne
pensi?
Ciao Giorgio P.
ha scritto nel messaggio news:ohqsa05j1h4b8l8io...@4ax.com...


Ciao Giorgio P.


 ha scritto nel messaggio
news:eZIrc.4455$G%.2478@tornado.fastwebnet.it...
