Autore Topic: [Risolto] ListView  (Letto 1875 volte)

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
[Risolto] ListView
« il: 01 Novembre 2015, 20:42:31 »
Buonasera a tutti
ho a che fare con una ListView, vorrei che quando seleziono un' elemento della stessa potessi evidenziarlo
con un colore a mia scelta. Ho provato a fare una ricerca per avere un'idea ma non ho trovato niente.
Confido in un vostro aiuto.
« Ultima modifica: 13 Dicembre 2016, 13:42:26 da Gianluigi »
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:ListView
« Risposta #1 il: 01 Novembre 2015, 22:48:23 »
Scusa approfitto di una pausa pubblicitaria, qualcosa del genere potrebbe servirti:

Codice: [Seleziona]
ListView1.Add("pi", "Pippo")
ListView1.Foreground = Color.Blue
ListView1.Add("pl", "Pluto")
ListView1["pl"].RichText = "<font color=\"red\">" & ListView1["pl"].Text & "</font>"

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:ListView
« Risposta #2 il: 02 Novembre 2015, 00:06:22 »
Ciao Gianluigi,
forse mi sono spiegato male (solito mio problema) e chiedo scusa, quello che mi seve é:
Listview diciamo con 10 righe
Selezionando una riga la proprietà Background assume il colore blu e il testo (Foreground) bianco,
solo per la riga selezionata.
Selezionando un'altro elemento quello precedente riassume i valori Background e Foreground di default
e la nuova riga selezionata Background = Blu e Foreground = Bianco, ecc...
Spero di essere stato più chiaro.
« Ultima modifica: 02 Novembre 2015, 00:08:46 da tornu »
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:ListView
« Risposta #3 il: 02 Novembre 2015, 00:52:14 »
Scusa ma non capisco, una cosa così non ti andrebbe bene?
Codice: [Seleziona]
' Gambas class file
Private s1 As String
Private s2 As String

Public Sub Form_Open()

  ListView1.Add("1", "Pippo")
  ListView1.Add("2", "Pluto")
  ListView1.Add("3", "Paperino")
  ListView1.Add("4", "Gastone")
  ListView1.Add("5", "Qui")
  ListView1.Add("6", "Quo")
  ListView1.Add("7", "Qua")

End

Public Sub ListView1_Select() 
 
  s1 = ListView1.Key
  If s1 <> s2 Then
    ListView1[s1].RichText = "<font color=\"red\">" & ListView1[s1].Text & "</font>"
  Endif
 
  If s2 <> "" Then
    ListView1[s2].RichText = "<font color=\"black\">" & ListView1[s2].Text & "</font>"
  Endif
  s2 = s1
 
End

Perchè ho paura che sia l'unica via.

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:ListView
« Risposta #4 il: 02 Novembre 2015, 13:14:05 »
No Gianluigi, non è quello che mi serve, nel tuo esempio se seleziono un elemento della Lisview
è vero che il testo assume il colore rosso ma lo sfondo della riga  (Background) non cambia, cosa che
a me serve, ma se passo ad un'altro elemento quello precedente rimane rosso, mentre a me serve che
ritorni al colore di default ed il testo della nuova riga selezionata diventa rosso, quindi selezionando
uno per volta gli elementi tutti assumono lo stesso colore, mentre a me seve evidenziare con colori
diversi per testo e sfondo riga solo quello selezionato in quel momento. Ho fatto una ricerca anche
sulla ML ufficiale è ho trovato domande in merito ma non risposte se non quella di cambiare oggetto.
Ho paura che con la Listview non sia possibile ottenere quello che voglio io.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:ListView
« Risposta #5 il: 02 Novembre 2015, 13:48:47 »
Per quanto ne so, non è possibile intervenire da codice sul colore dell'evidenziazzione.  :-\
A me il codice postato funziona così: Si apre un elenco di scritte nere su fondo bianco, quando clicco su una scritta questa viene evidenziata dal colore scelto di default nelle impostazioni QT nel mio caso un azzurrino (è per questo motivo che è sconsigliabile intervenire sui colori delle scritte perché potrebbe accadere di dare in foregraund lo stesso colore di default dell'evidenziazione) e la scritta cambia in rosso, quando evidenzio un altra scritta questa diventa rossa mentre la precedente ritorna nera.
Ti allego screenshot
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:ListView
« Risposta #6 il: 02 Novembre 2015, 17:14:43 »
Effettivamente sembra che non vi sia la diretta possibilità di colorare lo sfondo della sola riga, sulla quale si è cliccato.

Poiché però l'oggetto ListView è composto anche dall'oggetto GridView, possiamo agire su quest'ultimo (che è figlio della ListView).

In particolare opereremo sull'oggetto figlio, ossia la GridView, in ordine alla colorazione dello sfondo della riga selezionata (cliccata) della ListView. Potremo, però, agire sull'item selezionato della ListView per imporre al testo in esso presente il colore da noi prescelto.

Exemplum:
Codice: [Seleziona]
Public Sub Form_Open()

  ListView1.Add("1", "Pippo")
  ListView1.Add("2", "Pluto")
  ListView1.Add("3", "Paperino")
  ListView1.Add("4", "Gastone")
  ListView1.Add("5", "Qui")
  ListView1.Add("6", "Quo")
  ListView1.Add("7", "Qua")

End


Public Sub ListView1_Select()
 
  Dim j As Byte
  Dim ob As Object
 
' Assegnamo alla variabile di tipo oggetto il "figlio" (che è una "GridView") della "ListView":
    ob = ListView1.Children[0]
 
' Assegnamo i colori di base allo sfondo della "GridView-figlio" e al testo presente nella  "ListView":
     For j = 0 To ob.Rows.Max
      ob[j, 0].Background = Color.Default
      ListView1[j + 1].Richtext = "<FONT Color=#212121>" & listView1[j + 1].text
    Next

' Assegnamo il colore blu allo sfondo della riga cliccata della "GridView-figlio":
    ob[ob.Row, 0].Background = &0000FF

' Assegnamo il colore giallo al testo presente nella riga cliccata della "ListView":
    ListView1[ob.Row + 1].Richtext = "<FONT Color=#FFFF00>" & listView1[ob.Row + 1].text

End
« Ultima modifica: 02 Novembre 2015, 17:40:05 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:ListView
« Risposta #7 il: 02 Novembre 2015, 19:54:11 »
Mi complimento, il tuo codice mi ha aiutato a capire meglio children, ho inoltre notato che non servono i tag di chiusura per html e che a listview puoi passare una chiave non string e questo mi ha lasciato di stucco.
Hai risolto il problema di tornu e quello di non doversi preoccupare più dell'impostazione di default.  :ok:

Per migliorare la lettura della parola/frase evidenziata si può aggiungere il tag <b> che renderebbe il testo momentaneamente in grassetto.

Si potrebbe volendo aggiungere che in caso di parecchie migliaia di dati il ciclo (cambiando byte con integer) potrebbe rallentare l'applicazione, in quel caso il sistema di confronto adottato da me forse potrebbe convenire.
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:ListView
« Risposta #8 il: 02 Novembre 2015, 20:48:00 »
Per migliorare la lettura della parola/frase evidenziata si può aggiungere il tag <b> che renderebbe il testo momentaneamente in grassetto.
Sì, ottima idea.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:ListView
« Risposta #9 il: 11 Dicembre 2016, 21:29:24 »
Buonasera a tutti,
avendo l'esigenza di utilizzare una ListView con la possibilità di evidenziare la riga selezionata
con colori personalizzati ho fatto una ricerca sul Forum e ho ritrovato questa vecchia discussione
che avevo aperto tempo fà, ma al quale non avevo dato seguito.  ???
Comunque ho provato il codice suggerito da vuott, ma il  comportamento e  strano senza
che vada in errore, mi spiego:
cliccando su una delle voci, le stesse "spariscono" e rimane solo la riga del colore di sfondo impostato,
e nella Console viene visualizzato un messaggio di cui non capisco il significato
(Listview_evidenziarows:5072): Pango-WARNING **: pango_layout_set_markup_with_accel: Errore alla riga 1 carattere 29: Carattere '#' spaiato, era atteso un simbolo di quoting aperto dopo il segno di uguale per attribuire un valore all'attributo
"foreground" dell'elemento "span"

Mi potete dare un riscontro.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:ListView
« Risposta #10 il: 11 Dicembre 2016, 21:46:52 »
In Ubuntu 16.04.01 con la Trunk funziona bene come puoi constatare dall'immagine.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:ListView
« Risposta #11 il: 11 Dicembre 2016, 23:56:52 »
(Listview_evidenziarows:5072): Pango-WARNING **: pango_layout_set_markup_with_accel: Errore alla riga 1 carattere 29: Carattere '#' spaiato, era atteso un simbolo di quoting aperto dopo il segno di uguale per attribuire un valore all'attributo
"foreground" dell'elemento "span"

Mi potete dare un riscontro.
.......scommetto che stai usando le librerie GTK/GTK3........
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:ListView
« Risposta #12 il: 12 Dicembre 2016, 10:05:28 »
In Ubuntu 16.04.01 con la Trunk funziona bene come puoi constatare dall'immagine.
Ciao Gianluigi,
io uso ancora Ubuntu 14.04 LTS con Gambas 3.9.1 stable

.......scommetto che stai usando le librerie GTK/GTK3........
Ciao vuott,
sì, e quali dovrei usare
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:ListView
« Risposta #13 il: 12 Dicembre 2016, 11:44:05 »
Leggi un po qui

 :ciao:

P.S. di questo se ne è parlato e riparlato...
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:ListView
« Risposta #14 il: 12 Dicembre 2016, 12:30:14 »
sì, e quali dovrei usare
Tornuuuu, sveglia !
     

Oltre i componenti GTK, ci sono pure gb.qt4 e gb.qt5 !
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »