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.
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
-
- Mensajes: 25
- Registrado: Lun Nov 09, 2015 10:44 am
OnDrawCell
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
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
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
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
-
- Mensajes: 25
- Registrado: Lun Nov 09, 2015 10:44 am
Re: OnDrawCell
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.
Un saludoby gracias.
-
- Mensajes: 25
- Registrado: Lun Nov 09, 2015 10:44 am
Re: OnDrawCell
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
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
- ignacio
- Site Admin
- Mensajes: 9246
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: OnDrawCell
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
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
-
- Mensajes: 25
- Registrado: Lun Nov 09, 2015 10:44 am
Re: OnDrawCell
ok, voy a pensarlo
Re: OnDrawCell
Hola Paco de nuevoPacogarcia 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.
Una opción que use fue "dibujar dentro de la celda"
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
-
- Mensajes: 25
- Registrado: Lun Nov 09, 2015 10:44 am
Re: OnDrawCell
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í
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í