In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

OnDrawCell

Foro público de Xailer en español
Responder
Pacogarcia
Mensajes: 25
Registrado: Lun Nov 09, 2015 10:44 am

OnDrawCell

Mensaje por Pacogarcia »

Hola

Estoy pintando en OnDrawCell en un TBrwColumn. La idea es pintar algo diferente en función del valor de otra columna del Browse. Para ello necesitaría saber que fila se está pintando en cada momento. ¿Existe alguna forma de saber la fila que se está pintando cada vez que llega el evento?
Un saludo
Claudio C
Mensajes: 60
Registrado: Dom Sep 20, 2015 8:13 pm
Ubicación: Buenos Aires

Re: OnDrawCell

Mensaje por Claudio C »

Hola Paco

Para dibujar yo accedo a la "fuente de datos" , no a la columna y en base a ello dibujo.
Por ejemplo en un arraybrowse...

METHOD ABColumn3DrawCell( oSender, cText, nClrText, nClrPane, lHighLite, hDC, aRect ) CLASS xxxxx
....
aFila:=oSender:oParent:aArrayData[oSender:oParent:nArrayAt] ) // Valor completo de la fila
uCelda:=oSender:oParent:aArrayData[oSender:oParent:nArrayAt][oSender:npos] ) // Valor de celda
....
Espero te ayude.
Saludos,
Claudio
Pacogarcia
Mensajes: 25
Registrado: Lun Nov 09, 2015 10:44 am

Re: OnDrawCell

Mensaje por Pacogarcia »

Si, algo así había pensado pero el problema es que me da la impresión de que nArrayAt no indica la celda que se pinta en la actualidad sino la celda seleccionada. Lo probaré de todas formas. Se me había ocurrido que el browse rubiera una sola columna con el valor de la posición. Como yo quiero pintar una sola celda por fila con mucha información, el valor sería el índice de un array externo que no se lo paso al browse. A ver que tal queda.
Un saludoby gracias. ;)
Pacogarcia
Mensajes: 25
Registrado: Lun Nov 09, 2015 10:44 am

Re: OnDrawCell

Mensaje por Pacogarcia »

Pues al final nArrayAt me representa la fila que se está pintando. No se, algo se me escapa porque podría jurar que antes no era así.

Esta es la idea que estaba buscando. Se trata de plasmar en una sola celda, mas información que la que hay en un campo de un dbf. Está orientado hacia la tablet.

Imagen

Me gustaría profundizar en vistas para el grid a modo de lo que hace Android. Tener vista1, vista2, vistaN de tal manera que se pueda hacer un grid típico de móvil que permita ser movido para arriba y abajo con el dedo. (ya se andará)

Un saludo. Cuando lo tenga más terminado lo subo
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: OnDrawCell

Mensaje por ignacio »

Buenos días,

Me temo que no hay posibilidad de saber en que fila estas ya que de hecho en ciertos escenarios es prácticamente imposible saberlo, como por ejemplo, al abrir una tabla de un millón de registros con un índice activo y hacer un GoBottom(). Puedes saber la posición relativa de la fila en la visualización actual, pero poco más. Si necesitas crear una especie de variable cargo por registro el dataset tiene mecanismos para ello; puedes crear campos calculados que apoyándose en una matriz propia te podría servir.

En cuanto a lo que comentas de grids con varias líneas. Hay dos opciones:

1) Usar el grid nativo de Windows que es el TListView que es el que utiliza por ejemplo el explorador de archivos

2) Crear un control contenedor TBevel y dentro del el mismo pones todos los controles que quieres TBevel alineados a TOP. En cada uno de esos TBevel metes lo que quieras simulando un listbox item. Cuando no quepan los listbox items automáticamente se mostrarán las barras de scroll. Yo haríai una clase que tuviera toda la lógica del listbox item y una propiedad lSelected para cambiar su estado y mostarlo de forma acorde.

Saludos
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Pacogarcia
Mensajes: 25
Registrado: Lun Nov 09, 2015 10:44 am

Re: OnDrawCell

Mensaje por Pacogarcia »

ok, voy a pensarlo
Claudio C
Mensajes: 60
Registrado: Dom Sep 20, 2015 8:13 pm
Ubicación: Buenos Aires

Re: OnDrawCell

Mensaje por Claudio C »

Pacogarcia escribió:Si, algo así había pensado pero el problema es que me da la impresión de que nArrayAt no indica la celda que se pinta en la actualidad sino la celda seleccionada. Lo probaré de todas formas. Se me había ocurrido que el browse rubiera una sola columna con el valor de la posición. Como yo quiero pintar una sola celda por fila con mucha información, el valor sería el índice de un array externo que no se lo paso al browse. A ver que tal queda.
Un saludoby gracias. ;)
Hola Paco de nuevo
Una opción que use fue "dibujar dentro de la celda"
Gantt.png
Gantt.png (207 KiB) Visto 3177 veces
No solo dibujé las barras sino el texto de las mismas. Use FillRect() DrawText() pero hay mas funciones para graficar.
Encapsule todo en comportamiento en una clase que hereda de tBrowCcolumns y cuando necesito esta grafica "enchufo" la columna al arraybrowse y listo.
Tenía miedo al rendimiento por tanta grafica, pero ni parpadea siquiera en en equipo mas lento.
Un saludo,
Claudio
Pacogarcia
Mensajes: 25
Registrado: Lun Nov 09, 2015 10:44 am

Re: OnDrawCell

Mensaje por Pacogarcia »

La idea es que quiero obtener los datos de una fila para pintar en una sola columna, en una celda, todos esos datos.
En Android se definen vistas, y algo así quiero hacer. Tener varios modelos de vistas para poder poner agrupados los datos.
Pintaría en el OnDrawCell de la primera columna los datos agrupados y las otras columnas ocultarlas.

Imagen

Algo así
Responder