Asunto: Poner color de fondo y letra en ExpressQuantumGrid cxGrid
Estoy desarrollando una aplicación de Facturación y Contabilidad, uso como motor de base de datos Firebird, como lenguaje de programación Dephi 6 y, dentro de Delphi 6, uso el componente ExpressQuantumGrid en su versión 6.40. En concreto uso cxGrid, antes usaba la versión 4 de ExpressQuantumGrid y en el evento DrawCell del grid ponía el color de fondo de cada fila en función de unos valores, también el color de la letra, incluso ponía el formato tachado en algunas líneas. Ahora veo que con la nueva versión, en el cxGrid existe el evento DrawCell pero el código que tenía para la versión 4 no me vale para la 6.
Pongo el código que usaba para la versión 4 y que funcionaba perfectamente:
Código:
if not ANode.HasChildren then
begin
if (ANode.Values[Tablaresueltatecnico.Index] = Tablaresueltatecnico.ValueChecked) or
(ANode.Values[Tablaestado.Index] = 'Cancelado') or
(ANode.Values[Tablaestado.Index] = 'Resuelto') or
(ANode.Values[Tablaestado.Index] = 'Desestimado') then
AFont.Style := [fsStrikeOut];
if ANode.Values[Tablaaceptada.Index] = Tablaaceptada.ValueUnchecked then
AFont.Style := AFont.Style + [fsBold];
if ANode.Values[Tablareaperturas.Index] > 0 then
AColor := vtColorIncidenciaReaperturas;
if not vtColorIncidenciasPorFuente then
begin
if ANode.Values[Tablaprioridad.Index] >= 8 then
AColor := vtColorIncidenciaPrioridadAlta;
if (ANode.Values[Tablaprioridad.Index] <= 7) and
(ANode.Values[Tablaprioridad.Index] >= 6) then
AColor := vtColorIncidenciasPrioridadMedia;
if (ANode.Values[Tablaprioridad.Index] <= 5) then
AColor := vtColorIncidenciasPrioridadBaja;
end;
if ASelected then
AFont.Color := vtColorIncidenciasFuenteSeleccionada
else
begin
if not vtColorIncidenciasPorFuente then
AFont.Color := vtColorIncidenciasFuenteNoSeleccionada
else
begin
if ANode.Values[Tablaprioridad.Index] >= 8 then
AFont.Color := vtColorIncidenciaPrioridadAlta;
if (ANode.Values[Tablaprioridad.Index] <= 7) and
(ANode.Values[Tablaprioridad.Index] >= 6) then
AFont.Color := vtColorIncidenciasPrioridadMedia;
if (ANode.Values[Tablaprioridad.Index] <= 5) then
AFont.Color := vtColorIncidenciasPrioridadBaja;
end;
end;
end;
¿Cómo puedo pasar este código a la nueva versión 6.40 de ExpressQuantumGrid (cxGrid)?
Publicado:
Jue Oct 06, 2011 5:23 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Poner color de fondo y letra en ExpressQuantumGrid cxGri
Anuncios
Para poner el color de fondo de una fila de un cxGrid sería algo así (siempre en el evento CustomDrawCell del TableView del cxGrid):
Donde "vtColorIncidenciaReaperturas" es una de tus variables, de tipo integer, donde guardas el valor numérico del color.
Para cambiar el estilo de la letra, por ejemplo a tachado:
Código:
ACanvas.Canvas.Font.Style := [fsStrikeOut];
Si quieres dejar el mismo estilo que tenga y además añadir otro, por ejemplo si tienes el tipo de letra itálica y quieres también ponerla en negrita sería algo así:
Para obtener el valor de una columna de la fila actual y así poder indicar los colores y formatos según el valor de una o varias columnas sería algo así
Con lo cual, la transcripción de tu código de la versión 4 a la 6 sería algo así:
Código:
if (AViewInfo.GridRecord.Values[tablaViewresueltatecnico.Index] = 'S') or
(AViewInfo.GridRecord.Values[tablaViewestado.Index] = 'Cancelado') or
(AViewInfo.GridRecord.Values[tablaViewestado.Index] = 'Resuelto') or
(AViewInfo.GridRecord.Values[tablaViewestado.Index] = 'Desestimado') then
ACanvas.Canvas.Font.Style := [fsStrikeOut];
if AViewInfo.GridRecord.Values[tablaViewaceptada.Index] = 'N' then
ACanvas.Canvas.Font.Style := ACanvas.Canvas.Font.Style + [fsBold];
if AViewInfo.GridRecord.Values[tablaViewreaperturas.Index] > 0 then
ACanvas.Brush.Color := vtColorIncidenciaReaperturas;
if not vtColorIncidenciasPorFuente then
begin
if AViewInfo.GridRecord.Values[tablaViewprioridad.Index] >= 8 then
ACanvas.Brush.Color := vtColorIncidenciaPrioridadAlta;
if (AViewInfo.GridRecord.Values[tablaViewprioridad.Index] <= 7) and
(AViewInfo.GridRecord.Values[tablaViewprioridad.Index] >= 6) then
ACanvas.Brush.Color := vtColorIncidenciasPrioridadMedia;
if (AViewInfo.GridRecord.Values[tablaViewprioridad.Index] <= 5) then
ACanvas.Brush.Color := vtColorIncidenciasPrioridadBaja;
end;
if AViewInfo.GridRecord.Selected then
ACanvas.Canvas.Font.Color := vtColorIncidenciasFuenteSeleccionada
else
begin
if not vtColorIncidenciasPorFuente then
ACanvas.Canvas.Font.Color := vtColorIncidenciasFuenteNoSeleccionada
else
begin
if AViewInfo.GridRecord.Values[tablaViewprioridad.Index] >= 8 then
ACanvas.Canvas.Font.Color := vtColorIncidenciaPrioridadAlta;
if (AViewInfo.GridRecord.Values[tablaViewprioridad.Index] <= 7) and
(AViewInfo.GridRecord.Values[tablaViewprioridad.Index] >= 6) then
ACanvas.Canvas.Font.Color := vtColorIncidenciasPrioridadMedia;
if (AViewInfo.GridRecord.Values[tablaViewprioridad.Index] <= 5) then
ACanvas.Canvas.Font.Color := vtColorIncidenciasPrioridadBaja;
end;
end;
Publicado:
Jue Oct 06, 2011 5:32 am
varios Magnífico usuario
Registrado: Oct 10, 2006 Mensajes: 2092
Asunto: [RESUELTO] Poner color de fondo y letra ExpressQuantumGrid
Anuncios
alonsojpd escribió:
Para poner el color de fondo de una fila de un cxGrid sería algo así (siempre en el evento CustomDrawCell del TableView del cxGrid):
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A