Newsgroup: it.comp.lang.visual-basic
Titolo: [?] icona in listview

Ciao a tutti,
come faccio ad inserire una icona in una listview (senza ovviamente passare
da una imagelist)?
Grazie a tutti in anticipo.

 da una imagelist)?
Perchè ovviamente????
Io ho avuto la necessità di inserire icone e ho trovato usare OVVIO
imagelist, è il metodo + veloce credo, ripeto credo.
Imagelist è fatto apposta per caricare immagini o simili, cmq un'idea
potrebbe essere quella di assegnare un'icona usando per esempio il Set
object.picture = LoadPicture("C:\tuoPath\icona.ico")
ma sinceramente funziona sulle msflexgrid, su listview non ho mai provato di
solito si passa il ref dell'icona nella imagelist.

Perché devo visualizzare fino a 20.000 files, magari ognuno con una icona
diversa...
Secondo te caricare runtime tutte le immagini che servono in una imagelist e
poi indicare l'ID nella listview riesce a mantenere performances decenti?
Secondo me no (però non ho neanche provato, se mi dici altro provo
sicuramente).

 ha scritto nel messaggio
news:97j2ao$s5b$1...@fe2.cs.interbusiness.it...

perdona la domanda hai davvero 20000 icone disponibili per tutti quei
file?me le passi?
cmq non mi si è mai verificato un problema simile, anche perkè sinceramente
non ho mai avuto la necessità di visualizzare 20000 file/icone diverse,
quindi il problema prestazionale
non mi si è mai posto.
Io farei delle prove, ma sinceramente non saprei aiutarti, non è che stai
sbagliando qualcosa????
Magari suddividere per gruppi di file potrebbe aiutarti?? ridurrebbe il num
di icone


Faccio qualche test.
Grazie.

 troppi)
Appunto questo se noti in totale ci saranno si e no un centinaio di icone
base e non 20000
Cartelle -> l'icona è un folder
e gia volano via un bel pacco di file/icone
EXE - > hanno la loro icona
INI -> icona del foglietto come anche per esempio per gli nfo etc
....
e via così
allora ammettendo anche di arrivare a 20000 icone, probabilmente il
componente come tu dici non avrà di certo le capacità per reggerle,
credo che creare un array di imagelist diverrebbe pesante in termini di
memoria, quindi una soluzione potrebbe essere invece che caricare in
imagelist
carichiamo in un array solo il riferimento alle ico.
quindi per esempio Dim ArrayRefICO(20000)
e dentro in teoria ci potresti mettere i link alle ico e linkarle solo
quando ti serve, credo però che sia + incasinata da gestire questa soluzione
ma forse + leggera
sempre tornando all'idea di assegnare come icona un riferimento del tipo
C:\path\nomeico.ico
Una soluzione alternativa tutta da vedere che mi viene in mente è quella di
usare un file risorse(.res) in cui assegnare le icone e poi richiamarle da
codice.
Credo che quest'ultima sia la + congeniale, non ho il tempo per provarla ma
credo che alla fine ti dovrai fare proprio un file risorse.
Spero tu sappia cosa sia un file risorse, altrimenti dimmi che provo a
fornirti documentazione in merito anche se sinceramnente credo non sia nulla
di così complicato.

 di così complicato.
No, mai lavorato con file risorse (non so neanche cosa sia)...
Grazie.

 No, mai lavorato con file risorse (non so neanche cosa sia)...
Non c'e problema, se hai msdn c'e spiegato tutto, cmq
tanto per darti un idea:
dal menù
Aggiunte->Gestione Aggiunte ->Editor risorse VB6   .......... doppio clic e
ti segnalerà caricato a dx poi ok
e dal menu strumenti poi farai partire l'editor risorse semplicemente
cliccando sul menu con l'icona tipo quella di regedit
e da la poi la strada è semplice :)

Provo con key (o tag), buona idea.
Grazie

 poi cosa me ne faccio? Creo un .ico per ogni icona? (non mi sembra il caso)
[SNIP]
Provo a buttarla li:
Associa al tuo ListView un ImageList senza immagini; al momento di caricare ogni
file nel ListView verifica se esiste nell' ImageList l'immagine con
Key=<estensione file>, se non esiste la estrai in un oggetto o controllo Picture
con le funzioni API di cui sopra (eventualmente le trovi nell'esempio
GetIconProg sul Sito Comune) e la aggiungi al volo, senza bisogno di creare un
file .ico o .bmp, con:
ImageList.ListImages.Add Key:=<estensione>,Picture:=<la tua picture>
e quindi metti il file in lista; continuando a lavorare per chiave avrai sempre
una sola immagine per ogni diversa estensione che incontri, aggiungendo magari
la solita icona standard di Windows per quando l'estrazione non va a buon fine.
Ho fatto una prova un po' alla buona e, su un misero PII 233, in circa 9 secondi
carico tutti i file di "windows" e "windows\system" , circa 2100 file che
corrispondono a 40 diverse icone.
Ciao
--
Luca Dormio
luca....@tin.it