Si 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,
En el control de usuario, agregar lo siguiente
En las declaraciones
Código
Private Const HDF_SORTDOWN As Long = &H400 Private Const HDF_SORTUP As Long = &H200
En las Propiedades
Código
Public 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
Código
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
Código
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, 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
Originalmente para El foro de LeandroA