Newsgroup: it.comp.lang.visual-basic
Titolo: Listview ordinata per data e...colorata

cercherò di spiegarmi nel modo + breve possibile...
Devo caricare dati di svariate analisi cliniche in una matrice listview
Avrò quindi l'item in cui ci metto la data ("dd/mm/aa") e il relativo
subitems(1) in cui metto il valore dell'analisi
se però questo valore ha un certo simbolo(il +) al suo interno (ad esempio:
43+), il valore dell'analisi risulta positvo e deve essere evidenziato in
rosso:
                li.ListSubItems(1).foreColor = vbRed
e fin qui nessun problema...
ora però devo effettuare anche un ordinamento in base alla data in cui è
stata fatta l'analisi e sappiamo bene
che la Listview non puo ordinare date...
quindi procedo come segue:
---------------------- INIZIO CODICE MODULO -----------------------------
Public objFind As LV_FINDINFO
Public objItem As LV_ITEM
Public Type POINTAPI
  x As Long
  y As Long
End Type
Public Type LV_FINDINFO
  flags As Long
  psz As String
  lParam As Long
  pt As POINTAPI
  vkDirection As Long
End Type
Public Type LV_ITEM
    mask As Long
    iItem As Long
    iSubItem As Long
    state As Long
    stateMask As Long
    pszText As String
    cchTextMax As Long
    iImage As Long
    lParam As Long
    iIndent As Long
End Type
'Costanti
Public Const LVFI_PARAM As Long = &H1
Public Const LVIF_TEXT As Long = &H1
Public Const LVM_FIRST As Long = &H1000
Public Const LVM_FINDITEM As Long = (LVM_FIRST + 13)
Public Const LVM_GETITEMTEXT As Long = (LVM_FIRST + 45)
Public Const LVM_GETTEXTCOLOR = (LVM_FIRST + 35)
Public Const LVM_SORTITEMS As Long = (LVM_FIRST + 48)
'in un altro modulo dichiaro sendmessage....
------------------------------------------------------------------------
Public Function ConfrontaDate(ByVal pVar1 As Long, _
                                                ByVal pVar2 As Long, _
                                                ByVal hWnd As Long) As Long
   Dim data1 As Date
   Dim data2 As Date
   data1 = GetItemDate(hWnd, pVar1)
   data2 = GetItemDate(hWnd, pVar2)
            If data1 > data2 Then
                  ConfrontaDate= 0
            ElseIf data1 = data2 Then
                  ConfrontaDate= 1
            Else: ConfrontaDate= 2
            End If
End Function
------------------------------------------------------------------------
Public Function GetItemDate(hWnd As Long, pVar As Long) As Date
   Dim index As Long
   Dim ret As Long
   objFind.flags = LVFI_PARAM
   objFind.lParam = pVar
   index = SendMessage(hWnd, LVM_FINDITEM, -1, objFind)
   objItem.mask = LVIF_TEXT
   objItem.iSubItem = 0
   objItem.pszText = Space$(32)
   objItem.cchTextMax = Len(objItem.pszText)
   ret = SendMessage(hWnd, LVM_GETITEMTEXT, index, objItem)
   If ret > 0 Then
      GetItemDate = CDate(Left$(objItem.pszText, ret))
   End If
End Function
------------------------------------------------------------------------
Public Function xPROC(ByVal vVal As Long) As Long
   xPROC = vVal
End Function
------------------------- FINE CODICE MODULO -----------------
quando voglio ordinare le listview chiamo
        SendMessage lvw(i).hWnd, LVM_SORTITEMS,_
                              lvw(i).hWnd, ByVal xPROC(AddressOf
ConfontaDate)
Ora l'ordinamento per data funziona perfettamente il fatto è che a questo
punto
dopo aver effettuato l'ordinamento e cambia la posizione del valore
evidenziato in rosso
questo perde il colore e viene evidenziato invece il nuovo valore che
sostituisce il vecchio
...oddio non riesco neanche + a spiegarmi!!! sono proprio arrivato..:(((
in pratica per risolvere il problema devo riuscire ad ottenere il colore del
testo dell'item che sto analizzando
e riportarlo nella nuova posizione in cui lo metto usando
lResult = SendMessage(                          // returns LRESULT in
lResult
   (HWND) hWndControl,                      // handle to destination control
   (UINT) LVM_GETTEXTCOLOR,     // message ID
   (WPARAM) wParam,                         // = 0; not used, must be zero
   (LPARAM) lParam                             // = 0; not used, must be
zero
);
ma non ci riesco!!!
p.s. Nel momento in cui inserisco il valore nella listview l'informazione
che mi dice
    se deve essere evidenziato viene persa quindi non posso prima ordinare e
poi evidenziare
grazie a tutti!!
Ciao!!
Marco

Premetto che non ho letto tutto il tuo codice ma ti posso consigliare di
dare una vista al ListView di 
www.vbaccelerator.com
 fa tante di quelle cose
che probabilmente risolvi il tuo problema senza impazzire! :-)
Ciao, Vincenzo

 e riportarlo nella nuova posizione in cui lo metto usando
[cut]
per ora ho risolto raggirando il problema e mettendo tutti i dati prima in
una matrice, ordinandola
e poi inserendo il tutto nella listview
ma se si riuscisse  a trovare il modo di usare gettextcolor sarebbe mooolto
più simpatico!!


Suggerimento semplice: provare ad invertire i due processi? 
Cioe', prima ordini e poi cerchi ed evidenzi?
Bye by SixaM 8-]
--
Bye by SixaM 8-]
Inviato da 
www.mynewsgate.net