Dibujar porcentaje en una celda de un Grid
En este ejemplo se muestra cómo dibujar manualmente una barra de porcentaje en una celda de un DBGrid. Presuponemos que en la celda en la que vamos a dibujar la barra se está mostrando un valor entre 0 y 100 que pertenece a un porcentaje. Este ejemplo muestra cómo se hace para un componente TDBGrid estándard; No es muy difícil adaptarlo para utilizarlo en un TStringGrid o similar.
(Actualizacion 17/05/2021) He actualizado el ejemplo para mostrar cómo se utiliza el mismo evento para realizar esta acción sobre varias columnas.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Me da error al intentar compilar. En la línea:
StrValue := STR_EMPTY;
¿A que puede ser debido?
@Juanlu
Hola Juanlu.
Tal vez se me paso, STR_EMPTY es una constante que suelo utilizar para la cadena vacía. O defines la constante:
const
STR_EMPTY = »;
O directamente cambias esa referencia por: »
Un saludo.
@Juanlu
Hola.
Acabo de ver que la constante y algunas más, están definidas en la unit UDrawcell. ¿No las habrás borrado sin querer?
Un saludo.
Amigo buenas, gracias por el ejemplo, aqui esoy varios años despues de publicado, tengo una consulta que me llena un DBGRID, copio el ejemplo completo pero aun asi no me funciona.
if not (Column.FieldName = ‘avancetarea’) then begin
Exit;
en esta linea coloco el nombre de la columna que quiero convertir en la barra de progreso pero no me lo toma, cuando depuro y veo que «Fieldname» me esta tomando, me toma el primero de mi DBGRID «consectarea» podrias ayudarme por favor =(
@Ali Reyes
Hola Ali.
Es normal que si depuras, primero te llegue la primera columna del DGBRID a ese punto. Te llegarás TODAS las columnas.
Ese código (si te fijas tiene un NOT delante), lo que hace es evitar que te pinte la barra de progreso en el resto de columnas que no son la que quieres pintar.
De ahí que si no es la columna que quieres, ejecute un Exit.
Si colocas un punto de ruptura en la línea siguiente al Exit, debería pararse cuando llegue la columna que deseas.
Un saludo.
Hola Neftali.
En varias ocasiones me he servido de tu código y aprovecho para agradecerte tu dedicación.
En este caso, lo que quiero es poner dos porcentajes, dos campos que contienen esos porcentajes, en un mismo dbgrid.
Lo he probado de varias maneras pero no consigo (o no sé) hacerlo.
Si me pudieras dar una pista, te lo agradecería mucho.
Muchas gracias y un saludo.
@Pedro-Juan
Hola Pedro.
He actualizado el ejemplo para poder hacer lo mismo con 2 columnas. Se puede aprovechar el mismo ejemplo anterior, pero añadiendo la misma columna.
Un saludo.
@Germán Estévez
Hola Neftali.
Justo lo que quería. ¡Y tan sencillo!
Muchas gracias y un saludo.