Comunidad Gambas-es
[SOLUCIONADO] Iluminar Row de un Gridview al situarse encima de una celda - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: General (https://gambas-es.org/forum-4.html)
+--- Tema: [SOLUCIONADO] Iluminar Row de un Gridview al situarse encima de una celda (/thread-574.html)



Iluminar Row de un Gridview al situarse encima de una celda - gambafeliz - 04-09-2021

Hola

Alguna pistilla para iluminar Row de un Gridview al situarse encima de una celda, pero muy importante si hacer click solo estando encima de una celda de la fila.

Gracias.


RE: Iluminar Row de un Gridview al situarse encima de una celda - Grandamakulo - 04-09-2021

Rápidamente:  con Mousemove y Find, luego un for i grdEste[i, Columna].Background = Color.Lightter(Color.Background)
Si lo ves necesario, detallamos.

PS,—¡Ondia!, metedura de pata, hay que cambiar «Column» por «Row», no sé por qué lo he entendido al revés...  Cry


RE: Iluminar Row de un Gridview al situarse encima de una celda - cogier - 04-09-2021

Prueba este código. No pude conseguir que 'FindChild' (era Find) funcionara ya que devuelve un Control.

Código:
Gridview1 As GridView

Public Sub Gridview1_MouseMove()

  Dim iRow, iCol, iRowFix As Integer

  For iRow = 0 To Gridview1.Rows.Max
    For iCol = 0 To Gridview1.Columns.Max
      Gridview1[iRow, iCol].Background = Color.Default
      Gridview1[iRow, iCol].Text = ""
    Next
  Next

  iRowFix = Gridview1.Rowat(Mouse.Y)
  If iRowFix = -1 Then iRowFix = Gridview1.Rows.Max

  For iCol = 0 To Gridview1.Columns.Max
    Gridview1[iRowFix, iCol].Background = Color.Yellow
    Gridview1[iRowFix, iCol].Text = "¡Hola!"
  Next

End

Public Sub Form_Open()

  With Me
    .Height = 500
    .Width = 600
    .Padding = 5
    .Center
  End With

  With Gridview1 = New GridView(Me) As "Gridview1"
    .Rows.Count = 20
    .Columns.Count = 10
    .Expand = True
  End With

End



RE: Iluminar Row de un Gridview al situarse encima de una celda - gambafeliz - 04-09-2021

(04-09-2021, 17:07)Grandamakulo escribió: Rápidamente:  con Mousemove y Find

Supongo que te refieres al evento MouseMove de GridView1 pero en mi Gambas no tengo el evento Find en GridView1.

Es que quizás no me he enterado bien o es que falta algo o no me he enterado. Por favor, si fueras tan amable de aclararme te lo agradecería.

Saludos, oye por cierto, me alegra saludarte que hace tiempo que no nos cruzamos Smile

Smile cogier eres un mago Smile

Si, funciona estupendo !!!!

Solo que yo antes de mover el mouse por las filas, ya tenia todas las celdas coloreadas a modo de cebra y al pasar el mouse según tu código me borra todos los colores de las filas y las pone en color blanco, así como, donde pasa el puntero del mouse, se pone en amarillo la fila.

¿Esto tiene una fácil solución según tu código? ¿que opinas?

Muchísimas gracias cogier...


RE: Iluminar Row de un Gridview al situarse encima de una celda - cogier - 05-09-2021

(04-09-2021, 19:43)gambafeliz escribió: ¿Esto tiene una fácil solución según tu código? ¿que opinas?

Esperemos que esto solucione tu problema.

Código:
Gridview1 As GridView

Public Sub Gridview1_MouseMove()

  Dim iRow, iCol, iRowFix As Integer

  Cebra

  iRowFix = Gridview1.Rowat(Mouse.Y)
  If iRowFix = -1 Then Return

  For iCol = 0 To Gridview1.Columns.Max
    Gridview1[iRowFix, iCol].Background = 12632256
  Next

End

Public Sub Cebra()

  Dim iRow, iCol As Integer
  Dim bSwitch As Boolean

  For iRow = 0 To Gridview1.Rows.Max
    For iCol = 0 To Gridview1.Columns.Max
      If bSwitch Then
        Gridview1[iRow, iCol].Background = 14737632
      Else
        Gridview1[iRow, iCol].Background = Color.Default
      End If
    Next
    bSwitch = Not bSwitch
  Next

End

Public Sub Form_Open()

  Dim iLoop As Integer

  With Me
    .Height = 480
    .Width = 600
    .Padding = 5
    .Arrangement = Arrange.Vertical
    .Center
  End With

  With Gridview1 = New GridView(Me) As "Gridview1"
    .Rows.Count = 20
    .Columns.Count = 5
    .Header = Gridview.Both
    .Expand = True
  End With

  For iLoop = 0 To Gridview1.Columns.Max
    Gridview1.Columns[iLoop].Title = Chr(65 + iLoop)
  Next

  Cebra

End

Public Sub Form_Arrange()

  Gridview1.Columns.Width = (Gridview1.Width / Gridview1.Columns.Count) - 10

End



RE: Iluminar Row de un Gridview al situarse encima de una celda - gambafeliz - 05-09-2021

Gracias cogier sinceramente para mi es un honor tener tu ayuda. Simplemente

Genial !!!!

Well done.... Smile


RE: Iluminar Row de un Gridview al situarse encima de una celda - Shordi - 05-09-2021

Cita:Esperemos que esto solucione tu problema.

Cogier:
Me he permitido modificar tu código para adaptarlo a un gridview con evento Data. Ahora debería funcionar con mucha mayor rapidez para Gridviews con mus muchas filas (no tienes más que cambiar en la línea 19 el 20 por 2000000 y lo verás) y no se efectúan bucles innecesarios al mover el ratón sin cambiar de fila.

Espero que te guste.

Saludos.


Código:
   Gridview1 As GridView

    Private $last As Integer
    
    Public Sub Form_Open()
     
      Dim iLoop As Integer
      
      $last = -2
      With Me
        .Height = 480
        .Width = 600
        .Padding = 5
        .Arrangement = Arrange.Vertical
        .Center
      End With
     
      With Gridview1 = New GridView(Me) As "Gridview1"
        .Rows.Count = 20
        .Columns.Count = 5
        .Header = Gridview.Both
        .Expand = True
      End With
     
      For iLoop = 0 To Gridview1.Columns.Max
        Gridview1.Columns[iLoop].Title = Chr(65 + iLoop)
        Gridview1.Columns[iloop].Expand = True
      Next

    End
     
 Public Sub Gridview1_Data(Row As Integer, Col As Integer)
    
    cebra(Row, Col)

End

Private Sub cebra(Row As Integer, Col As Integer)

    If Row Mod 2 = 0 Then
          Gridview1[Row, Col].Background = Color.lighter(Color.Background)
    Else
         Gridview1[Row, Col].Background = Color.Background
    Endif
    
End

Public Sub Gridview1_MouseMove()
     
    Dim iRow, iCol, iRowFix As Integer

    iRowFix = Gridview1.Rowat(Mouse.Y)
    If iRowFix = -1 Or If iRowfix = $last Then Return 'Si no hay fila o no hemos cambiado de fila aunque se haya movido el ratón, no hacemos nada.
    For iCol = 0 To Gridview1.Columns.Max
        Gridview1[iRowFix, iCol].Background = Color.lighter(Color.SelectedBackground)
        If $last > -1 Then 'Si $Last es -1 es que todavía no tenemos ninguna fila a la que restaurar el color.
            cebra($last, iCol)
        Endif
    Next
    $last = iRowfix 'almacenamos el número de la fila modificada
    
End