elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [APORTE] Poner orden en columnas de ucListView
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [APORTE] Poner orden en columnas de ucListView  (Leído 1,275 veces)
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
[APORTE] Poner orden en columnas de ucListView
« en: 30 Noviembre 2010, 01:23 am »

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 xD

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, 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 declaraciones
Código
  1. Private Const HDF_SORTDOWN As Long = &H400
  2. Private Const HDF_SORTUP As Long = &H200

En las Propiedades
Código
  1. Public Property Get ColumnOrder(ByVal Column As Integer) As eSortOrderConstants
  2.    Dim uHDI   As HDITEM
  3.    If (m_hListView And m_hHeader) Then
  4.        uHDI.mask = LVCF_FMT
  5.        Call SendMessage(m_hListView, HDM_GETITEM, Column, uHDI)
  6.        If (HDF_SORTDOWN And uHDI.fmt) Then
  7.            ColumnOrder = soDescending
  8.        ElseIf (HDF_SORTUP And uHDI.fmt) Then
  9.            ColumnOrder = soAscending
  10.        Else
  11.            ColumnOrder = soDefault
  12.        End If
  13.    End If
  14. End Property
  15. Public Property Let ColumnOrder(ByVal Column As Integer, ByVal order As eSortOrderConstants)
  16.    Dim uHDI   As HDITEM
  17.    If (m_hListView And m_hHeader) Then
  18.        With uHDI
  19.            .mask = HDI_FORMAT
  20.            Call SendMessage(m_hHeader, HDM_GETITEM, Column, uHDI)
  21.            If order = soAscending Then
  22.                .fmt = (.fmt And Not HDF_SORTDOWN) Or HDF_SORTUP
  23.            ElseIf order = soDescending Then
  24.                .fmt = (.fmt And Not HDF_SORTUP) Or HDF_SORTDOWN
  25.            Else
  26.                .fmt = .fmt And Not (HDF_SORTUP Or HDF_SORTDOWN)
  27.            End If
  28.        End With
  29.        Call SendMessage(m_hHeader, HDM_SETITEM, Column, uHDI)
  30.    End If
  31. End Property

Y listo, para que ver la modificacion en accion ponen en un ucListView

Código
  1. Private Sub ucListView1_ColumnClick(Column As Integer)
  2.    If ucListView1.ColumnOrder(Column) = soAscending Then
  3.        ucListView1.ColumnOrder(Column) = soDescending
  4.    Else
  5.        ucListView1.ColumnOrder(Column) = soAscending
  6.    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
  1. Private Sub ucListView1_ColumnClick(Column As Integer)
  2.   Dim nCol As Integer
  3.  
  4.    With ucListView1
  5.        If (.Count > 1) Then
  6.            For nCol = 0 To 2
  7.                If (nCol <> Column) Then .ColumnOrder(nCol) = soDefault
  8.            Next nCol
  9.            If .ColumnOrder(Column) = soAscending Then
  10.                .ColumnOrder(Column) = soDescending
  11.              Else
  12.                .ColumnOrder(Column) = soAscending
  13.            End If
  14.            ' Aca su rutina para ordenar
  15.        End If
  16.    End With
  17. End Sub
  18.  

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


« Última modificación: 30 Noviembre 2010, 11:19 am por raul338 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Dos columnas en Datacombo
Programación Visual Basic
YAIPEN 1 1,798 Último mensaje 3 Abril 2007, 05:17 am
por YAIPEN
pequeño aporte(proxy),pero aporte al fin.:D
Programación Visual Basic
Tengu 0 1,591 Último mensaje 22 Julio 2007, 17:33 pm
por Tengu
pequeño aporte [batch] poner CF bajo una variable ;) « 1 2 »
Scripting
~[uNd3rc0d3]~ 16 6,005 Último mensaje 26 Febrero 2008, 03:20 am
por MK-Ultra
[Regalo de navidad] Perfeccionando el ucListView :)
Programación Visual Basic
raul338 3 3,145 Último mensaje 26 Marzo 2011, 14:12 pm
por raul338
Aporte: Cuadrado Mágico de orden impar
Programación C/C++
dato000 2 9,520 Último mensaje 22 Agosto 2019, 08:01 am
por TheSj
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines