Autor Tema: ListView Tipo Cebra para la version LV 5  (Leído 7401 veces)

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

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:ListView Tipo Cebra para la version LV 5
« Respuesta #15 en: Julio 31, 2011, 12:01:07 am »
jaja, cayo VB-Mundo, justo estaba posteando este tema alli y se cayo el foro. No lo iba a hacer en TheHacker porque vi que los moderadores son los mismo de aqui, pero no me queda de otra, sorry, me urge esto y de pronto alguien por alli me pueda echar una manito.
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:ListView Tipo Cebra para la version LV 5
« Respuesta #16 en: Julio 31, 2011, 10:52:26 am »
No importa, termino contestando acá :P

El problema es que pinta según el index del ítem. Hay que pintar según la posición del ítem una vez ordenado... El tema es: Se puede obtener la posición ? xD

Lolabyte

  • Bytes
  • *
  • Mensajes: 35
  • Reputación: +15/-0
    • Ver Perfil
Re:ListView Tipo Cebra para la version LV 5
« Respuesta #17 en: Julio 31, 2011, 06:51:00 pm »
Despues de ordenar, vuelvo a repintar, de la forma fea
Pero viendo el codigo de LynxGrid de psc, al ordenar, tambien vuelve a repintar, y repinta todo! el columnheader y el grid, asi que eso de feo dejemoslo en funcional  8)
« última modificación: Julio 31, 2011, 06:58:26 pm por Lolabyte »

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:ListView Tipo Cebra para la version LV 5
« Respuesta #18 en: Julio 31, 2011, 07:22:14 pm »
Hola, no es dificil, lo que tenes que hacer es no pintar todas las rows, sino solo las visible esto acelera un 500% la funcion, la cuestion es que deves hacer cada vez que se dispara el evento MSFlexGrid1_Scroll , ademas en el Form_Load , y depsues de que ordenas, te doy un ejemplo.

Código: [Seleccionar]
Option Explicit

Private Sub Form_Load()
    Agregar_Datos_FlexGrid
    Call AltLVBackGroundFlex(MSFlexGrid1, RGB(255, 255, 255), RGB(230, 222, 253))
End Sub

Public Sub AltLVBackGroundFlex(Flex As Object, ByVal BackColorOne As OLE_COLOR, ByVal BackColorTwo As OLE_COLOR)

    Dim Row As Long
    Dim Col As Long
   
    With MSFlexGrid1
    .Redraw = False
    For Row = .TopRow To .Rows - 1
        If .RowIsVisible(Row) = False Then Exit For
            .Row = Row
            For Col = 0 To .Cols - 1
           
                .Col = Col
               
                If Row Mod 2 Then
                    .CellBackColor = BackColorTwo
                Else
                    .CellBackColor = BackColorOne
                End If
            Next
       
    Next
    .Redraw = True

    End With
   
End Sub
Private Sub MSFlexGrid1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
 
    With MSFlexGrid1
     
        If .MouseRow <> 0 Then
           Exit Sub
        End If
         
        'La función retorna el tipo de orden, es decir esta declarada como As SortSettings
        If Ordenar_Columna_FlexGrid(MSFlexGrid1, .MouseCol) = flexSortGenericAscending Then
           Me.Caption = " FlexGrid en orden: Ascendente "
        Else
           Me.Caption = " FlexGrid en orden: Descendente "
        End If
    End With
   
    MSFlexGrid1_Scroll
End Sub
Private Sub Agregar_Datos_FlexGrid()
 
    Dim columna As Integer, i As Integer

    MSFlexGrid1.Redraw = False
   
    For i = 1 To 10000
        MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1
        For columna = 0 To 3
            MSFlexGrid1.TextMatrix(i, columna) = Numero_Aleatorio(1500, i)
        Next
     
         
    Next
   
    MSFlexGrid1.Redraw = True
   
End Sub

'Función para generar valores aleatorios para insertar en el FlexGrid
Private Function Numero_Aleatorio(Upper As Integer, Lower As Integer) As Integer
     
    Randomize
    'Retornar el número a la función
    Numero_Aleatorio = Int((Upper - Lower + 1) * Rnd + Lower)
 
End Function

Private Sub MSFlexGrid1_Scroll()
    Call AltLVBackGroundFlex(MSFlexGrid1, RGB(255, 255, 255), RGB(230, 222, 253))
End Sub

Saludos.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:ListView Tipo Cebra para la version LV 5
« Respuesta #19 en: Julio 31, 2011, 08:10:40 pm »
Hola Leandro, a ver voy a probarlo y te comento gracias.
Me encuentras en YAcosta.com

Lolabyte

  • Bytes
  • *
  • Mensajes: 35
  • Reputación: +15/-0
    • Ver Perfil
Re:ListView Tipo Cebra para la version LV 5
« Respuesta #20 en: Julio 31, 2011, 08:11:51 pm »
Que bien funciona tu codigo, es como magia, frente a nuestros ojos la linda zebra, detras nuestro el feo mapache, por cierto la funcion Ordenar_Columna_Flexgrid no esta, pero esta aqui

http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/150-ordenar-columna-flexgrid.htm

Código: (vb6) [Seleccionar]
' esto en las delaraciones del form
Public sCol As Integer, Orden As SortSettings

Código: (vb6) [Seleccionar]
Function Ordenar_Columna_FlexGrid( _
                FlexGrid As Object, _
                ByVal columna As Integer) As SortSettings

    FlexGrid.Visible = False
    FlexGrid.Refresh
   
    If sCol <> columna Then
        Orden = 1
    ElseIf Orden = 1 Then
        Orden = 2
    Else
        Orden = 1
    End If
   
    'Ordena la columna del FlexGRid según _
     el valor de la variable Orden
    FlexGrid.Sort = Orden

    sCol = columna
   
    'Devuelve a la función el tipo de orden
    Ordenar_Columna_FlexGrid = Orden
   
    FlexGrid.Visible = True

End Function

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:ListView Tipo Cebra para la version LV 5
« Respuesta #21 en: Julio 31, 2011, 10:32:56 pm »
Ya esta Lea, muchas gracias, cierto es super velocisimo si solo "cebreamos" lo que se ve, pense que iba a "aguantarse" cuando recorra el grid pero nada de nada, pintar las 25 lineas que se ven no es nada ni siquiera para una Pentium IV. La magia estaba aquí:
If .RowIsVisible(Row) = False Then Exit For

Gracias doc.
Me encuentras en YAcosta.com