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/forumdisplay.php?fid=3)
+--- Foro: General (https://gambas-es.org/forumdisplay.php?fid=4)
+--- Tema: [SOLUCIONADO] Iluminar Row de un Gridview al situarse encima de una celda (/showthread.php?tid=574)



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.

GAMBAS
  1. Gridview1 As GridView
  2.  
  3. Public Sub Gridview1_MouseMove()
  4.  
  5.   Dim iRow, iCol, iRowFix As Integer
  6.  
  7.   For iRow = 0 To Gridview1.Rows.Max
  8.     For iCol = 0 To Gridview1.Columns.Max
  9.       Gridview1[iRow, iCol].Background = Color.Default
  10.       Gridview1[iRow, iCol].Text = ""
  11.     Next
  12.   Next
  13.  
  14.   iRowFix = Gridview1.Rowat(Mouse.Y)
  15.   If iRowFix = -1 Then iRowFix = Gridview1.Rows.Max
  16.  
  17.   For iCol = 0 To Gridview1.Columns.Max
  18.     Gridview1[iRowFix, iCol].Background = Color.Yellow
  19.     Gridview1[iRowFix, iCol].Text = "¡Hola!"
  20.   Next
  21.  
  22.  
  23. Public Sub Form_Open()
  24.  
  25.   With Me
  26.     .Height = 500
  27.     .Width = 600
  28.     .Padding = 5
  29.     .Center
  30.  
  31.   With Gridview1 = New GridView(Me) As "Gridview1"
  32.     .Rows.Count = 20
  33.     .Columns.Count = 10
  34.     .Expand = True
  35.  





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.

GAMBAS
  1. Gridview1 As GridView
  2.  
  3. Public Sub Gridview1_MouseMove()
  4.  
  5.   Dim iRow, iCol, iRowFix As Integer
  6.  
  7.   Cebra
  8.  
  9.   iRowFix = Gridview1.Rowat(Mouse.Y)
  10.   If iRowFix = -1 Then Return
  11.  
  12.   For iCol = 0 To Gridview1.Columns.Max
  13.     Gridview1[iRowFix, iCol].Background = 12632256
  14.   Next
  15.  
  16.  
  17. Public Sub Cebra()
  18.  
  19.   Dim iRow, iCol As Integer
  20.   Dim bSwitch As Boolean
  21.  
  22.   For iRow = 0 To Gridview1.Rows.Max
  23.     For iCol = 0 To Gridview1.Columns.Max
  24.       If bSwitch Then
  25.         Gridview1[iRow, iCol].Background = 14737632
  26.       Else
  27.         Gridview1[iRow, iCol].Background = Color.Default
  28.       End If
  29.     Next
  30.     bSwitch = Not bSwitch
  31.   Next
  32.  
  33.  
  34. Public Sub Form_Open()
  35.  
  36.   Dim iLoop As Integer
  37.  
  38.   With Me
  39.     .Height = 480
  40.     .Width = 600
  41.     .Padding = 5
  42.     .Arrangement = Arrange.Vertical
  43.     .Center
  44.  
  45.   With Gridview1 = New GridView(Me) As "Gridview1"
  46.     .Rows.Count = 20
  47.     .Columns.Count = 5
  48.     .Header = Gridview.Both
  49.     .Expand = True
  50.  
  51.   For iLoop = 0 To Gridview1.Columns.Max
  52.     Gridview1.Columns[iLoop].Title = Chr(65 + iLoop)
  53.   Next
  54.  
  55.   Cebra
  56.  
  57.  
  58. Public Sub Form_Arrange()
  59.  
  60.   Gridview1.Columns.Width = (Gridview1.Width / Gridview1.Columns.Count) - 10
  61.  





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.


GAMBAS
  1.    Gridview1 As GridView
  2.  
  3.     Private $last As Integer
  4.     
  5.     Public Sub Form_Open()
  6.      
  7.       Dim iLoop As Integer
  8.       
  9.       $last = -2
  10.       With Me
  11.         .Height = 480
  12.         .Width = 600
  13.         .Padding = 5
  14.         .Arrangement = Arrange.Vertical
  15.         .Center
  16.       End With
  17.      
  18.       With Gridview1 = New GridView(Me) As "Gridview1"
  19.         .Rows.Count = 20
  20.         .Columns.Count = 5
  21.         .Header = Gridview.Both
  22.         .Expand = True
  23.       End With
  24.      
  25.       For iLoop = 0 To Gridview1.Columns.Max
  26.         Gridview1.Columns[iLoop].Title = Chr(65 + iLoop)
  27.         Gridview1.Columns[iloop].Expand = True
  28.       Next
  29.  
  30.     End
  31.      
  32.  Public Sub Gridview1_Data(Row As Integer, Col As Integer)
  33.     
  34.     cebra(Row, Col)
  35.  
  36.  
  37. Private Sub cebra(Row As Integer, Col As Integer)
  38.  
  39.     If Row Mod 2 = 0 Then
  40.           Gridview1[Row, Col].Background = Color.lighter(Color.Background)
  41.     Else
  42.          Gridview1[Row, Col].Background = Color.Background
  43.     Endif
  44.     
  45.  
  46. Public Sub Gridview1_MouseMove()
  47.      
  48.     Dim iRow, iCol, iRowFix As Integer
  49.  
  50.     iRowFix = Gridview1.Rowat(Mouse.Y)
  51.     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.
  52.     For iCol = 0 To Gridview1.Columns.Max
  53.         Gridview1[iRowFix, iCol].Background = Color.lighter(Color.SelectedBackground)
  54.         If $last > -1 Then 'Si $Last es -1 es que todavía no tenemos ninguna fila a la que restaurar el color.
  55.             cebra($last, iCol)
  56.         Endif
  57.     Next
  58.     $last = iRowfix 'almacenamos el número de la fila modificada
  59.