Newsgroup: it.comp.lang.delphi
Titolo: Listview.Data, puntatori e record (lunghetto)

Probabilmente sto commettendo qualche errore di fondo e mi servirebbe
qualche chiarimento. 
Ho una treeview e una listview in devo simulare la solita finestra con
cartelle e files (tipo explorer) e su cui l'utente può trascinare dei files.
Nella listview c'è la proprietà Data che permette di salvare un puntatore.
Al momento questo campo lo uso solamente quando l'elemento in questione
della listview è una cartella e in questo caso metto un puntatore al nodo
del treeview. In questo modo riesco con faciltà a navigare tra le directory
quando l'utente fa un doppio click su una cartella nella listview.
Ora però ho la necessità di avere un tipo file "particolare", una specie di
archivio virtuale. Per questo pensavo di associare alla proprietà Data di
questo tipo di file, un puntatore (PAAA) a un Record così composto:
TAAA = record
  informazioni varie;
  FileList: TStringList;
end;
PAAA = ?TAAA;
Questo è quanto ho pensato e che sto cercando di realizzare, il problema
però è che non so se e come è possibile risalire al tipo di puntatore
contenuto nella proprietà Data.
Alcune precisazioni:
ad alimentare la listview c'è un'altra listview nascosta in cui ci sono
tutti i file che contiene il mio albero. Questa listview è organizzata in
questo modo:
- percorso
- file
- tipo (0, 1, 2 = file, cartella, "archivio virtuale")
- altre informazioni varie
Potreste dirmi di testare il valore di Tipo prima di leggere la proprietà
data, ma non posso fare così perchè nella listview visibile il tipo non è
presente e, dovendo fare quanto mi interessa (mostrare l'elenco dei file di
questo "archivio virtuale" in un altra finesta) nell'evento OnSelectItem
della listview mi sembra improponibile ogni volta andare a cercare
l'elemento nella lisview nascosta per verificare se il tipo è quello che mi
interessa
ps. ovviamente se avete in mente qualche altra soluzione, ben venga ;-)
-- 
Lis
ICQ@Home #7317603sette     ICQ@Work #16285702tre
Mercatino: 
http://lis77.bravepages.com
 (aggiornato *con foto*: 16/06/03)

 ps. ovviamente se avete in mente qualche altra soluzione, ben venga
Credo che userei senza pensarci troppo degli oggetti (quindi poi usi "is" e
"as").
HTH,
--
Andrea /\/\agni
ICQ#: 174108000

 "as").
Mmm...ci avevo pensato e stavo facendo delle prove:
dichiaro la classe come
TArchive = class
public
  Options: Integer;
  FileList: TStringList;
end;
e poi la aggiungo all'item della listview con
Archive := TArchive.Create;
Archive.FileList := TStringList.Create;
Item.Data := Archive;
Poi però quando provo ad utilizzarlo
if (Item.Data is TArchive) then
ho un errore in compilazione (Operator not applicable to this operand type).
Devo creare anche in questo caso un oggetto intermedio in cui specifico il
Kind e poi lo tratto con "as" in base al tipo?



Open Delphi Manual (
http://groups.yahoo.com/group/delphi_open_manual/
)

 ========================================
Perfetto, grazie 


 - altre informazioni varie
Vi è mai capitato di affrontare una situazione del genere, ovvero creare una
struttura per gestire file e directory? Come avete risolto? Io per il
momento mi sono affidato ad una listview di appoggio, ma mi rendo conto che
non è una bella soluzione ma, soprattutto, è lenta.
Qualche idea oppure qualche progetto che potrei studiarmi?


tra la robbbba che la mitica turbopower ha generosamente dato a sourcefiorge
ci sta pure shellshock.
xche non gli dai un occhiata?
Bye
A



Uso già qualcosa del genere (ShellBrowser 
www.jam-software.com
) e con quelli
implemento il comportamento explorer-like.
Per fare un esempio pratico di quello che devo fare, hai presente Nero (è il
primo che mi è venuto in mente)? Ha da una parte una finestra in cui c'è il
file-system vero e proprio, mentre in un'altra finestra ha una
"compilation", in cui l'utente trascina i file che gli interessano, gli
cambia nome, ecc, ecc. Ecco, io devo fare una cosa del genere: nella mia
finestra (che chiamo compilation) l'utente trascina dei file e poi può
rinominarli, cancellarli e spostarli, il tutto senza che avvenga realmente
sul file-system. Fino ad ora avevo risolto questo problema aggiungendo la
famosa listview nascosta in cui metto tutti i files e le informazioni che li
riguardano. Attingo poi a questa listview quando devo recuperare i dati
relativi ad un singolo nodo (path) e mostrarli nella listview visibile
all'utente, in cui mostro solo una parte dei dati che contiene ogni singolo
elemento della listview nascosta.
Ora però ho la necessità di aggiungere questi "archivi virtuali": nella
finestra principale l'utente avrà la singola voce dell'archivio nella
listview. Cliccando (singolo o doppio) gli si aprirà un'altra finestra in
cui ci saranno un'altra treeview e un'altra listview il cui comportamento
dev'essere similare a quello della "compilation" principale.
Mi sono spiegato un pò meglio?


Se hai Delphi 6, prova a vedere negli esempi... č gią tutto fatto!
Andrea
P.S. Gli esempi che escono con D6 sono un pņ
bacati, quindi devi scaricarti da CodeCentral le
bug-fix.
Andrea
--- posted by geoForum on 
http://www.delphiedintorni.it

 
Se intendi i ShellControls, non č quello di cui ho bisogno. Prova a
rileggere l'intero thread e, se hai tempo e voglia, anche il thread "Prove
generali di OOP"
Ciao
