Autor Tema: Saber si una columna de ListView se re-dimensiona  (Leído 2863 veces)

0 Usuarios y 1 Visitante están viendo este tema.

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Saber si una columna de ListView se re-dimensiona
« en: Noviembre 21, 2011, 03:54:57 pm »
Así es como el titulo dice como saber si una columna cambio de tamaño en el control ListView. En un timer no puedo poner por que parpadea los datos que hay en el listview.
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

Mr. X

  • Visitante
Re:Saber si una columna de ListView se re-dimensiona
« Respuesta #1 en: Noviembre 21, 2011, 04:26:26 pm »
Para que no parpadee, poné el formulario en autoredraw=true
guarda en una variable el tamaño de la columna, y con un timer, comproba si cambio. Por ejemplo, supongamos que A es el ancho actual, y B es el anterior:
Código: (vb) [Seleccionar]
if A <> B then
   'aca lo que haces cuando cambia...
   B=A
end if

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Saber si una columna de ListView se re-dimensiona
« Respuesta #2 en: Noviembre 21, 2011, 04:41:40 pm »
la mejor forma es sin duda sin timer, me imagino sublcasificando el listview y ahi obtener cuando se cambio la columna de ancho, es un poco engorroso para algo tan simple.

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Saber si una columna de ListView se re-dimensiona
« Respuesta #3 en: Noviembre 21, 2011, 06:46:48 pm »
Te doy un extracto del ucListView
Tenes que subclasificar el mensaje WM_NOTIFY del listview y obtener el handle del control Header (a travez de SendMessage)
Código: (vb) [Seleccionar]
Private Const HDN_BEGINTRACK       As Long = (HDN_FIRST - 6) 'Ansi
Private Const WM_NOTIFY                As Long = &H4E
Private Const LVM_FIRST                   As Long = &H1000
Private Const LVM_GETHEADER         As Long = (LVM_FIRST + 31)
Private Type NMHDR
    hwndFrom As Long
    idfrom   As Long
    code     As Long
End Type

Private Function LVHeaderHwnd(LV As ListView) As Long
LVHeaderHwnd = SendMessage(LV.hWnd, LVM_GETHEADER, 0, ByVal 0)
End Function

' Filtro de mensajes
Dim uNMH     As NMHDR
If Msg = WM_NOTIFY Then
    Call RtlMoveMemory(VarPtr(uNMH), lParam, Len(uNMH))
    If uNMH.code = HDN_BEGINTRACK And uNMH.hwndFrom = m_hHeader Then
        ' Aca la columna esta cambiando de tamaño
        ' que el mensaje devuelva 1 y manejas vos el mensaje si queres cancelarlo
        ' Si queres saber que columna es, hace un HitTest al header
        If (m_HeaderFixedWidth) Then
            lReturn = 1
            bHandled = True
        End If
    End If
End If
« última modificación: Noviembre 21, 2011, 06:50:11 pm por raul338 »