Buenas. Esto es un agregado al ucListView de Carles PV en el que pongo mediante flags que las columnas muestren el triangulito al lado (winXP) o arriba y que ademas se ponga la cabecera de la columna azulada (win7)
Porque a veces las columnas se vuelven locas y hay que poner orden xDSi alguno probo Win7, vera que en el ListView el orden se muestra de una forma distinta

Poniendo el triangulo arriba y remarcando el Header de la columna ordenada.
Pues se me ocurrio buscar como lograr eso, y encontre
Esto que es parte de como se maneja un ListView por API. Me di cuenta que ya no se agrega un triángulo al listview,
es anticuado, ahora es mediante unos flags en el formato de la cabecera. Entonces me decidí modificar el ucListView para que acepte eso en sus columnas. Y aqui el resultado
En el control de usuario, agregar lo siguiente
En las declaracionesPrivate Const HDF_SORTDOWN As Long = &H400
Private Const HDF_SORTUP As Long = &H200
En las PropiedadesPublic Property Get ColumnOrder(ByVal Column As Integer) As eSortOrderConstants
Dim uHDI As HDITEM
If (m_hListView And m_hHeader) Then
uHDI.mask = LVCF_FMT
Call SendMessage(m_hListView, HDM_GETITEM, Column, uHDI)
If (HDF_SORTDOWN And uHDI.fmt) Then
ColumnOrder = soDescending
ElseIf (HDF_SORTUP And uHDI.fmt) Then
ColumnOrder = soAscending
Else
ColumnOrder = soDefault
End If
End If
End Property
Public Property Let ColumnOrder(ByVal Column As Integer, ByVal order As eSortOrderConstants)
Dim uHDI As HDITEM
If (m_hListView And m_hHeader) Then
With uHDI
.mask = HDI_FORMAT
Call SendMessage(m_hHeader, HDM_GETITEM, Column, uHDI)
If order = soAscending Then
.fmt = (.fmt And Not HDF_SORTDOWN) Or HDF_SORTUP
ElseIf order = soDescending Then
.fmt = (.fmt And Not HDF_SORTUP) Or HDF_SORTDOWN
Else
.fmt = .fmt And Not (HDF_SORTUP Or HDF_SORTDOWN)
End If
End With
Call SendMessage(m_hHeader, HDM_SETITEM, Column, uHDI)
End If
End Property
Y listo, para que ver la modificacion en accion ponen en un ucListView
Private Sub ucListView1_ColumnClick(Column As Integer)
If ucListView1.ColumnOrder(Column) = soAscending Then
ucListView1.ColumnOrder(Column) = soDescending
Else
ucListView1.ColumnOrder(Column) = soAscending
End If
Y les quedara asi:

Aunque no es muy lindo que quede asi digamos.... para que paresca un ListView Comun y corriente, con este codigo alcanza
Private Sub ucListView1_ColumnClick(Column As Integer)
Dim nCol As Integer
With ucListView1
If (.Count > 1) Then
For nCol = 0 To 2
If (nCol <> Column) Then .ColumnOrder(nCol) = soDefault
Next nCol
If .ColumnOrder(Column) = soAscending Then
.ColumnOrder(Column) = soDescending
Else
.ColumnOrder(Column) = soAscending
End If
' Aca su rutina para ordenar
End If
End With
End Sub
PD: Deben compilar el proyecto para verlo visualmente y ponerle un manifest, desde el IDE (salvo que le hayan puesto un manifest, aunque dudo que funcione) no se mostrará
Espero que les sirva!
Pueden bajar el control modificado, con el ejecutable y un ejemplo
descargandolo Aca