Condividi:        

Aggiungere immagine in un campo di una Listview

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Aggiungere immagine in un campo di una Listview

Postdi templare77 » 23/03/19 09:06

Salve a tutti,
mi sono imbattuto nel controllo Listview, sono riuscito a popolarlo trovando in rete un ciclo apposito, ora però vorrei far comparire una piccola immagine in un campo del controllo stesso e non ci sto riuscendo...qualcuno di voi mi può aiutare?

in particolare mi esce il messaggio di Runtime (ImageList deve essere inizializzata prima di essere utilizzata) , all'esecuzione di questa riga:

Codice: Seleziona tutto
LstItem.ListSubItems.Add Text:=Foglio2.Cells(7 + r, 21), ReportIcon:="C:\Users\admin\Documents\images\bandierinaxfactor.jpg"


grazie
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Sponsor
 

Re: Aggiungere immagine in un campo di una Listview

Postdi Anthony47 » 23/03/19 11:29

Come da "Linee guida per pubblicare le vostre domande", viewtopic.php?f=26&t=103911&p=605595#p605595:
4) Se i dati da elaborare sono particolari o richiedono piu' di 2 (due) minuti per essere ricreati da chi vuole aiutarvi, allora e' bene allegare un file esemplificativo. Usate la procedura descritta in questo messaggio: viewtopic.php?f=26&t=103893&p=605487#p605487


Quindi se tu hai gia' un file con la form e con la listview e "molto" di quel che serve a popolarlo allora pubblicalo e partiremo da quel lavoro, invece che ripartire da zero.

Comunque, in linea di massima, devi aggiungere alla tua form un componente ImageList e popolarlo con le immagini che poi pensi di usare; a ogni immagine viene associato il relativo Index, ma puoi associargli anche una "chiave" mnemonica.
Successivamente potrai usare il contenuto della ImageList per associarlo agli item del ListView
Tutto questo molto "a grandi linee"...

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Aggiungere immagine in un campo di una Listview

Postdi templare77 » 23/03/19 14:29

Ciao Anthony!
To allego subito un esempio...https://we.tl/t-bW2JsV8Vwh

Come vedrai, a partire da quella tabella nel Foglio1, vado a popolare la Listview in base alla presenza del segno 1 (colonna I). Nella colonna Class, ci sono dei valori che corrispondono al numero di istanze di un'immagine icona, che vorrei comparissero nella colonna Class della Listview. Quindi per Moldova-Francia due icone, per Albania-Turchia una e così via

Il controllo ImageList, è già presente nella casella degli strumenti del mio Editor Vba

Ps, al limite può anche andar bene scrivere delle forme tramite il carattere Webdings nella colonna Class della Listview
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: Aggiungere immagine in un campo di una Listview

Postdi Anthony47 » 23/03/19 23:54

Non puoi assegnare un font a uno specifico subitem, quindi non si puo', nel campo Class, giocare col wingdings o altri font simili.

Comunque devi (a) inserire il componente ImageList e (b) popolarlo; poi (c) associarlo alla proprieta' SmallIcons del listview; infine (d) puoi usare le immagini.

La fase (a) la fai a mano.

Lavorando all'interno della Sub UserForm_Activate, per (b) e (c) ho usato:
Codice: Seleziona tutto
Private Sub UserForm_Activate()
'
'Popola la ImageList:
pPath = "D:\provaz\pippo\"
Me.ImageList1.ImageHeight = 40
Me.ImageList1.ImageWidth = 60
Set oImg = ImageList1.ListImages.Add(1, , LoadPicture(pPath & "Immagine1.jpg"))
Set oImg = ImageList1.ListImages.Add(2, , LoadPicture(pPath & "Immagine2.jpg"))
Set oImg = ImageList1.ListImages.Add(3, , LoadPicture(pPath & "Immagine3.jpg"))
Set oImg = ImageList1.ListImages.Add(4, , LoadPicture(pPath & "Immagine4.jpg"))
Set oImg = ImageList1.ListImages.Add(5, , LoadPicture(pPath & "Immagine5.jpg"))
Set oImg = ImageList1.ListImages.Add(6, , LoadPicture(pPath & "Immagine6.jpg"))
Set oImg = ImageList1.ListImages.Add(7, , LoadPicture(pPath & "Immagine7.jpg"))
Set oImg = ImageList1.ListImages.Add(8, , LoadPicture(pPath & "Immagine8.jpg"))
Set Me.ListView1.SmallIcons = ImageList1

(se pensi di dover gestire valori superiori a 8, aggiungi altre immagini)

Per la fase (d), sempre lavorando sul codice della Sub UserForm_Activate():
Codice: Seleziona tutto
'...
            Next j
            '>>Compila il 7° campo con l'immagine:
            If Foglio1.Cells(7 + r, 10) <> "" Then
                LstItem.ListSubItems.Add ReportIcon:=Foglio1.Cells(7 + r, 10).Value
            End If
            '<<Fine compilazione
        End If
        r = r + 1
'...

Ovviamente devi personalizzare le istruzioni secondo la tua situazione, e soprattutto devi crearti le immagini idonee a rappresentare nel ListView i valori che hai bisogno di rappresentare

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Aggiungere immagine in un campo di una Listview

Postdi templare77 » 24/03/19 08:44

Che dire......sei il mio salvatore! Grazie! :roll:
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: Aggiungere immagine in un campo di una Listview

Postdi templare77 » 25/03/19 02:00

Anthony, un'altra domandina.... :aaah :aaah

ho inserito una scrllbar con l'intento di cambiare il colore del testo dei vari elementi di una riga selezionata...

Però non mi funziona...il colore non cambia...eppure ho messo una variabile d'appoggio per vedere il testo dell'elemento attualmente selezionato dal ciclo ....

ti allego il file https://we.tl/t-updqhs74b1
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: Aggiungere immagine in un campo di una Listview

Postdi Anthony47 » 25/03/19 14:54

Dò per scontato che questi sono esperimenti, non la versione finale del codice...

Il ListView purtroppo ha una documentazione piuttosto ambigua e non sempre chiara; in questi casi comunque e' necessario che il controllo subisca un "Refresh" per rendere visibile le modifiche applicate. Puoi farlo a livello di singolo subitem, cosi' che sia anche visibile eseguendo il codice passo passo, o a livello dell'Item; cioe', nella Sub ScrollBar1_Change:
Codice: Seleziona tutto
'…
        elem_list.Item(indice).ListSubItems(x).ForeColor = RGB(250, 50, 250)
        Me.ListView1.Refresh     'Opzione 1, singolo SubItem
    Next x
    Me.ListView1.Refresh        'Opzione 2, intero Item
End Sub


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Aggiungere immagine in un campo di una Listview

Postdi templare77 » 25/03/19 21:58

Grazie Anthony!

Si, si...quello è un esempio buttato lì

Sto notando che il fefresh funziona se la proprietà della ListView è impostata a lvwIcon (file che ti ho formito), mentre io ce l'ho a
Codice: Seleziona tutto
lvwReport


Cmq, ho risolto con
Codice: Seleziona tutto
Me.ListView1.ListItems(Index).Selected = True
    Me.ListView1.Refresh
che mi evidenzia l'intera riga (anche se con un grigio bruttino...) e con
Codice: Seleziona tutto
elem.Item(Index).ListSubItems(x).Bold = True
che mi rende grassetto i vari elementi durante il ciclo

Ovviamente mi premuro di togliere il grassetto all'elemento precedente, se scorro in basso ed a quello successivo se scorro in alto
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26


Torna a Applicazioni Office Windows


Topic correlati a "Aggiungere immagine in un campo di una Listview":


Chi c’è in linea

Visitano il forum: Nessuno e 27 ospiti