Newsgroup: it.comp.lang.visual-basic
Titolo: MSHFlexGrid e gestione colori/font

Ciao a tutti,
ultimamente per un progetto VB6 di "gestione messaggi" interni ad un
software gestionale ho voluto utilizzare la MSHFlexGrid per
visualizzare l'elenco dei messaggi in arrivo ed in uscita.
Normalmente uso la DataGrid, ma volendo personalizzare la
visualizzazione (un po' stile Outlook, Thunderbird e compagnia bella)
l'unica soluzione che mi è venuta in mente è la MSHFlexGrid.
Non avendola mai usata mi sono documentato in giro per il web ed alla
fine sono riuscito a realizzare quanto volevo.
In particolare ho creato una Sub che, selezionando "Posta in Arrivo" o
"Posta Inviata" in un controllo TreeView, ri-formatta la
visualizzazione della MSHFlexGrid per adattarla ai nuovi dati.
Quoto qui sotto il codice della Sub:
Private Sub ImpostaColonne()
    Dim r As Long
    Dim c As Long
    With MSHFlexGrid1
        '' nasconde o formatta le colonne
        For c = 0 To .Cols - 1
            Select Case LCase(.TextMatrix(0, c))
                Case "messageid", "letto", "uidmittente", "idimpianto"
                    .ColWidth(c) = 0
                Case "dataorainvio"
                    .TextMatrix(0, c) = "Ricevuto"
                    .ColWidth(c) = TextWidth(String(16, "W"))
                Case "mittente"
                    .ColWidth(c) = TextWidth(String(10, "W"))
                Case "oggetto"
                    .ColWidth(c) = TextWidth(String(20, "W"))
            End Select
        Next c
        If recordset.RecordCount > 0 Then
            '' evidenzia in azzurro le righe alternate per la lettura
facilitata
            For r = 2 To .Rows - 1 Step 2
                For c = 0 To .Cols - 1
                    .Row = r
                    .Col = c
                    .CellBackColor = "&Hffeeee"
                Next c
            Next r
            '' evidenzia in grassetto i messaggi non letti
            For r = 1 To .Rows - 1
                If .TextMatrix(r, 1) = "False" Then
                    For c = 0 To .Cols - 1
                        .Row = r
                        .Col = c
                        .CellFontBold = True
                    Next c
                End If
            Next r
        End If
    End With
End Sub
ESPONGO IL PROBLEMA:
Avviando e selezionando per esempio "Posta in arrivo" che contiene
alcuni messaggi letti la visualizzazione è perfetta.
Selezionando poi la "Posta Inviata" che non ha messaggi, mi visualizza
correttamente solo le testate (prima di chiamare la Sub invoco
MSHFlexGrid1.Clear e MSHFlexGrid1.ClearStructure)
Quando ri-seleziono la "Posta in Arrivo" mi visualizza i dati ma senza
la mia formattazione (quindi le righe azzurre), a meno di cliccare su
ogni singola riga della tabella... ad ogni click la tabella di
"colora" in maniera corretta...
Qualcuno ha idea del perché di questo comportamento? la Sub viene
richiamata sempre e correttamente (ho fatto i test passo-passo...), ma
l'impressione è che graficamente ci sia una sorta di "refresh" da
eseguire o di "cache" da azzerare...
Grazie comunque per l'attenzione
Fiducioso
Mauro

 eseguire o di "cache" da azzerare...
Non so aiutarti di preciso, ma imho hai utilizzato il componente sbagliato,
se non è complesso cambiarlo ti consiglierei una ListView, o questo che
pare essere apposta:
http://www.vbaccelerator.com/home/vb/code/Controls/S_Grid_2/S_Grid_2/article.asp
(gratuito)
http://www.vbaccelerator.com/home/VB/Code/Controls/S_Grid_2/Performance/article.asp