Página 1 de 1
OnDrawCell
Publicado: Sab Nov 14, 2015 1:15 pm
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
Re: OnDrawCell
Publicado: Dom Nov 15, 2015 2:01 am
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
Re: OnDrawCell
Publicado: Dom Nov 15, 2015 3:07 pm
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.

Re: OnDrawCell
Publicado: Lun Nov 16, 2015 10:01 am
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.
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
Re: OnDrawCell
Publicado: Lun Nov 16, 2015 8:54 pm
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
Re: OnDrawCell
Publicado: Lun Nov 16, 2015 9:35 pm
por Pacogarcia
ok, voy a pensarlo
Re: OnDrawCell
Publicado: Lun Nov 16, 2015 10:09 pm
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 (207 KiB) Visto 4423 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
Re: OnDrawCell
Publicado: Mar Nov 17, 2015 6:43 pm
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.
Algo así