https://foro.gambas-es.org/viewtopic.php?f=1&t=4237
-----------------------------------
Shell
Miercoles, 19 Noviembre 2014, 19:17

Problema Con El Evento Data De GridView. DrawingArea Is Being Drawn
-----------------------------------
Hola!.

Parece que he conseguido reproducir el error.

- Si aumento mucho la longitud del texto crea el problema.
- Si aumento el tamaño de la fuente, lo mismo.
- Si aumento mucho el número de las columnas, igual.

Aquí tenéis una pantalla del ejemplo funcionando correctamente, con la versión 3.6.2 de Gambas.
Versión estable.

 [img]http://foro.gambas-es.org/files/images/768/gridview_evento_data.png[/img] 

Aquí tenéis el código fuente para que vayais cambiando:

- 1º El tamaño del texto. Luego dejarlo como estaba antes.
- 2º El tamaño de la fuente.Luego dejarlo como estaba antes.
- 3º El número de columnas.

No mezcléis los problemas, problemas uno a uno.   :roll: 

[code linenumbers=false syntax=gambas]
Public Sub _new()
  
End

Public Sub Form_Open()
  
End

Public Sub GridView1_Data(Row As Integer, Column As Integer)
  
  Dim f As New Font 
  Dim contenido As String
  
  contenido = "Gambas es basic." & " " & Row & ", " & Column
  'contenido = "Gambas es tambien basic." & " " & Row & ", " & Column
  
  f.Name = "Sans"   
  f.Size = 10
  'f.Size = 12
  
  GridView1.Data.Text = contenido
  
  If GridView1.Columns[Column].Width < f.TextWidth(GridView1.Data.Text) Then 
    GridView1.Columns[Column].Width = f.TextWidth(GridView1.Data.Text)
  Endif
  
End

Public Sub Form_Activate()
  
  GridView1.Rows.Count = 3
  GridView1.Columns.Count = 3
  
  'GridView1.Rows.Count = 4
  'GridView1.Columns.Count = 4
  
End
[/code]

Saludos


-----------------------------------
shordi
Jueves, 20 Noviembre 2014, 10:46

Re: Problema Con El Evento Data De GridView. DrawingArea Is Being Drawn
-----------------------------------
Sin haberlo probado, me temo que es un error cambiar el ancho de la columna a mitad del evento data. Este evento rellena la celda, pero al mismo tiempo le cambias lo parámetros de la misma... lo mismo estoy equivocado, pero me temo que los tiros van por ahí.


-----------------------------------
Shell
Jueves, 20 Noviembre 2014, 10:55

Re: Problema Con El Evento Data De GridView. DrawingArea Is Being Drawn
-----------------------------------
A ver si podéis confirmar que no os da problemas con la 3.6. Tenía que haber usado el foro de componentes o librerías.

He tenido que bajar a la 3.5 para hacerlo funcionar sin ningún problema.  Menos mal que aun estaba en la cache de Apt.
Lo he probado con tres equipos con Linux Mint 17 Mate  con la estable 3.6.2 y me da ese problema.

El efecto es como si la barra horizontal del GridView no se mostrase en ese momento.   :???: 
Ya que si esta apareciera, el área donde se muestra el texto en las columnas sería mayor y tendría mas zona donde dibujar internamente el DrawingArea.

El caso es:

 Que por otro lado es normal, los errores se detectan y se arreglan lo antes posible.
 En el caso de un profesional que tiene clientes con su software, una cosa así es un palo.
 Dejando congelada la versión de Gambas, la suya y la de sus clientes.
 Vamos que se lo tiene que pensar dos veces para instalar una versión superior a la que tiene.

Saludos


-----------------------------------
Shell
Jueves, 20 Noviembre 2014, 11:41

Re: Problema Con El Evento Data De GridView. DrawingArea Is Being Drawn
-----------------------------------
[quote user="shordi" post="24013"]Sin haberlo probado, me temo que es un error cambiar el ancho de la columna a mitad del evento data. Este evento rellena la celda, pero al mismo tiempo le cambias lo parámetros de la misma... lo mismo estoy equivocado, pero me temo que los tiros van por ahí.[/quote]

Es como algo infinito ,¿ verdad ?. Como si no acabara nunca y que posiblemente acabe en un desbordamiento.
La cuestión es que en la versión 3.5 haciendo lo mismo,  no falla en nada de lo comentado  :o 

Otra cosa es que no sea la forma más correcta de hacerlo. Esto puede pasar.
¿ Qué método usarías para cambiar el tamaño de la columna del GridView si quieres mostrar campos de texto de una base de datos que cambian su longitud ?. 

Saludos


-----------------------------------
shordi
Jueves, 20 Noviembre 2014, 13:03

Re: Problema Con El Evento Data De GridView. DrawingArea Is Being Drawn
-----------------------------------
Si le das a la columna un ancho de -1 se adapta al título. Si le activas la propiedad Expand, se adapta al tamaño del Gridview.
Si quieres modificar los tamaños a tu gusto, yo tengo dos funciones siempre una que formatea el aspecto y otra que rellena las celdas (la segunda es el _data, claro)

Saludos.


-----------------------------------
jsbsan
Jueves, 20 Noviembre 2014, 13:53

Re: Problema Con El Evento Data De GridView. DrawingArea Is Being Drawn
-----------------------------------
Shordi:
[code linenumbers=false syntax=gambas]If GridView1.Columns[Column].Width < f.TextWidth(GridView1.Data.Text) Then
GridView1.Columns[Column].Width = f.TextWidth(GridView1.Data.Text)
Endif[/code]
[quote]Si quieres modificar los tamaños a tu gusto.... [/quote]
La idea es que se adapte al contenido que tenga las celdas, que provienen del resultado de una consulta...


-----------------------------------
shordi
Jueves, 20 Noviembre 2014, 18:21

Re: Problema Con El Evento Data De GridView. DrawingArea Is Being Drawn
-----------------------------------
[quote]
La idea es que se adapte al contenido que tenga las celdas, que provienen del resultado de una consulta...[/quote]
Sí si eso lo he entendido, lo que pasa es que no me parece muy correcto. Desconozco el gridview a fondo (no he estudiado el código fuente), pero parece como que el cambio del column.width dispara eventos draw en el drawing area y estos como que se le "amontonan"...
Veo mucho más rápido controlar el tamaño con una variable o array  y modificar el ancho una vez finalice el data, o algo así.
De todas formas, como tema tangencial, no me parece una buena solución para los Gridviews. Haciendo esto te arriesgas a "descolocar" todas las columnas según avances hacia delante o atrás. Imagina que tienes un gridview con nombres, direcciones y sueldos. La variación entre direcciones puede ser enorme, según eso, si estás siguiendo la columna de sueldos y al pulsar avance página la dirección de un registro es enorme, te encuentras con que el sueldo se te va de la pantalla por la derecha o, cuando menos, se te cambia de sitio...
por ello:
A) Dale un ancho concreto y pon a cierto la porpiedad wrap o
B) Calcula el ancho según el número de caracteres del campo o
C) Dale un ancho proporcional a la ventana (y el wrap o no, claro) o
D) (Lo que yo hago) a la columna que se le de un ancho fijo, que quede fijo y a la que no, que quede proporcional. Si el usuario amplia o disminuye el ancho con el ratón, el ancho queda fijo. Tienes un ejemplo en la clase xGrid de los controles "enganchados" que subí hace unos días. ( [url=http://foro.gambas-es.org/viewtopic.php?f=5&t=4220]http://foro.gambas-es.org/viewtopic.php?f=5&t=4220 )

Pero para gustos lo colores, claro.


-----------------------------------
Shell
Jueves, 20 Noviembre 2014, 19:30

Re: Problema Con El Evento Data De GridView. DrawingArea Is Being Drawn
-----------------------------------
Estuve jugando con el Scrollbar del Gridview y probé a cambiar las propiedades de esta.

- Si no le doy posibilidad de que se muestre la barra horizontal. No existe el problema . ( No vemos los registros).
Mientras no este activa para mostrar la barra si hay un desplazamiento horizontal, no hay problema.

- Si uso el componente gb.gui o gb.gtk la barra se muestra, pero hay errores en la consola.

[quote]
(GridView_evento_Data2:3160): Gtk-CRITICAL **: IA__gtk_widget_get_direction: assertion 'GTK_IS_WIDGET (widget)' failed
[/quote]

Ese error es constante por cada actualización del evento Data. No se produce error del DrawingArea.

- Si uso el componente gb.gtk3. No hay salida de errores por la consola y no se produce el error del DrawingArea.
La idea es usar qt4...

Gracias Jorge, probare tus soluciones.

Saludos


-----------------------------------
jsbsan
Jueves, 20 Noviembre 2014, 20:16

Re: Problema Con El Evento Data De GridView. DrawingArea Is Being Drawn
-----------------------------------
Shell:

[quote]La idea es usar qt4...[/quote]
Yo uso desde hace mucho tiempo (por lo menos 2 años), el componente gb.qt4.
Con  gb.gtk he tenido  problemas muy extraños que se resolvian "milagrosamente" usando gb.qt4. Por eso en todas mis aplicaciones uso gb.qt4. 

Shordi:
[quote]A) Dale un ancho concreto y pon a cierto la porpiedad wrap o
B) Calcula el ancho según el número de caracteres del campo o
C) Dale un ancho proporcional a la ventana (y el wrap o no, claro) o
D) (Lo que yo hago) a la columna que se le de un ancho fijo, que quede fijo y a la que no, que quede proporcional. [/quote]
Son interesantes las opciones que das.
Incluso se podria crear una método que tenga de parametro estas opciones, y asi el programador, pueda elegir el que mejor se adapte a los campos que tenga que mostar en el gridview. 

Saludos


-----------------------------------
Shell
Jueves, 20 Noviembre 2014, 20:28

Re: Problema Con El Evento Data De GridView. DrawingArea Is Being Drawn
-----------------------------------
¿ Conocías el evento Draw del GridView ?.

[url=http://gambaswiki.org/wiki/comp/gb.qt4/gridview/.draw?l=es]Evento Draw de GridView

No soluciona el problema, ¿ es casi como el data pero más ampliado ?.

Saludos


-----------------------------------
jsbsan
Jueves, 20 Noviembre 2014, 21:25

Re: Problema Con El Evento Data De GridView. DrawingArea Is Being Drawn
-----------------------------------
Shell:

[quote]¿ Conocías el evento Draw del GridView ?.[/quote]
No.. no lo habia usado ...

[quote] ¿ es casi como el data pero más ampliado ?[/quote]
Parece más amplilado. En  el foro siempre hemos hablado de usar el evento _Data para ir rellenando los gridviews con los resultados de las consultas, es ideal, porque es muy rápido, ya que solo "redibuja" los datos que se van a ver por parte del usuario.

http://gambaswiki.org/wiki/comp/gb.qt4/gridview/.data?l=es


-----------------------------------
shordi
Viernes, 21 Noviembre 2014, 09:05

Re: Problema Con El Evento Data De GridView. DrawingArea Is Being Drawn
-----------------------------------
No es lo mismo, el evento Data "rellena" la celda con el contenido que queramos, el evento Draw la "redibuja" cuando es necesario. Si, como en el tema que nos ocupa, cambias el ancho de la celda es necesario, posiblemente, recolocar el contenido (Propiedad Wrap, o contenidos incompletos, etc.). Pero cada uno es para lo que es. 
El problema con el código que abre éste hilo es que baraja ambos eventos al mismo tiempo.

Por otro lado ignoro si es un bug o no. Supongo que la clase debería tener previstas situaciones como éstas y responder de alguna manera más específica...

Saludos.


-----------------------------------
jsbsan
Viernes, 21 Noviembre 2014, 10:30

Re: Problema Con El Evento Data De GridView. DrawingArea Is Being Drawn
-----------------------------------
Shordi:

[quote]Por otro lado ignoro si es un bug o no. Supongo que la clase debería tener previstas situaciones como éstas y responder de alguna manera más específica...[/quote]
Personalmente, creo que es un bug... porque en la versión 3.5.4 funciona perfectamente, y luego en las version 3.6, ha dejado de funcionar....

Lo curioso en que en mi equipo con la 3.6.90 funciona bien, pero en el equipo de Shell (que tambien tienen  la 3.6.90) le da ese error... necesitamos algunos "voluntarios" que lo testeen para aclararnos que pasa....

Saludos


-----------------------------------
Shell
Viernes, 21 Noviembre 2014, 14:49

Re: Problema Con El Evento Data De GridView. DrawingArea Is Being Drawn
-----------------------------------
[quote user="jsbsan" post="24031"]
Lo curioso en que en mi equipo con la 3.6.90 funciona bien, pero en el equipo de Shell (que tambien tienen  la 3.6.90) le da ese error... necesitamos algunos "voluntarios" que lo testeen para aclararnos que pasa....
[/quote]

Nos ayudaríais un montón!. :-)

Ya he probado en tres pc's con la 3.6 y todos igual, el mismo problema. Eso si todos tienen Linux Mint 17 con Mate.
En el trabajo he probado la estable, la de desarrollo e incluso la Beta. Nada, igual.
En casa solo con la estable en dos pc's.

Saludos


-----------------------------------
shordi
Viernes, 21 Noviembre 2014, 23:00

Re: Problema Con El Evento Data De GridView. DrawingArea Is Being Drawn
-----------------------------------
He hecho algunas pruebas. El problema no es la fuente, ni el número de registros. El problema se produce cuando hay que reconfigurar el grid, ya sea porque la fuente al ser más grande necesitaría un ancho de columna o porque al aumentar mucho el número de líneas necesitaría desplazarse hacia abajo.
Siempre que hay que "repintar", peta.
Curiosamente si añades un wait 0.01 al final del evento data, el error que se produce es

QWidget::repaint: Recursive repaint detected

y se produce no una vez sino varias.

Habría que informar a la lista de Benoit....

Uso Mint 17 con cinnamon y la versión del repositorio estable.

Saludos.


-----------------------------------
Shell
Sabado, 22 Noviembre 2014, 00:21

Re: Problema Con El Evento Data De GridView. DrawingArea Is Being Drawn
-----------------------------------
Hola!.

Esto fue lo que encontré por la red y es del 2012:

https://code.google.com/p/gambas/issues/detail?id=246

No se ha vuelto a comentar nada al respecto.

Saludos


