Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-05-2022
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Comportamiento en cambio de color celda DBGRID

Hola a todos:

tengo este código para cambiar de color a AMARILLO o si es salida y verde si es ENTRADA sin embargo en el grid si traigo
mediante un procedimiento todas las entradas el color es correcto pero si en el procedimiento traigo "Todo" ENTRADA Y SALIDAS se pone Amarillo las Entrada y Verde la Salida pero solamente cuando traigo todo los movimientos.


Código Delphi [-]
procedure TfrmMovimientoProductos.dbgMovDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  with TDBGrid(Sender).Canvas do
  begin
  if dbgMov.DataSource.DataSet.FieldByName('TIPO_MOVIMIENTO').AsString =
  'ENTRADAS' then
  begin
    dbgMov.Columns[8].Color := clGreen;
    dbgMov.Columns[8].Font.Color := clWhite;
  end
  else
  begin
    dbgMov.Columns[8].Color := clYellow;
    dbgMov.Columns[8].Font.Color := clWindowText;
  end;
  end;
end;

Agradeciendo cualquier comentario referente a este comportamiento. También adjunte imagen donde se muestra esto.




Saludos y Bendiciones

pd: como se hace para adjuntar directamente las imagenes?
Imágenes Adjuntas
Tipo de Archivo: jpg Movimiento.jpg (31,4 KB, 10 visitas)
Responder Con Cita
  #2  
Antiguo 09-05-2022
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Lo siento se ve espantoso la imagen


Saludos
Responder Con Cita
  #3  
Antiguo 09-05-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Te falta "repintarlo" con los cambios, algo así:
Código Delphi [-]
if Column.Field = ClientDataSet1SALDO then
  if ClientDataSet1SALDO.AsCurrency < 200 then
  begin
    DBGrid1.Canvas.Font.Color := clRed;
    DBGrid1.DefaultDrawDataCell(rect,Column.Field,State);
  end;
Responder Con Cita
  #4  
Antiguo 09-05-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Mira este ejemplo tan completo.
Responder Con Cita
  #5  
Antiguo 09-05-2022
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Te falta "repintarlo" con los cambios, algo así:
Código Delphi [-]
if Column.Field = ClientDataSet1SALDO then
  if ClientDataSet1SALDO.AsCurrency < 200 then
  begin
    DBGrid1.Canvas.Font.Color := clRed;
    DBGrid1.DefaultDrawDataCell(rect,Column.Field,State);
  end;
Hola Casimiro gracia por tu extrema rápida respuesta :
cabe señalar que

Código Delphi [-]
   DBGrid1.Canvas.Font.Color := clRed; //Trabaja es con el color de fuente no con celda en mi caso es la celda de la columna 
   DBGrid1.DefaultDrawDataCell(rect,Column.Field,State);// esto pone encima un color en la fuente desagradable
//t al pintarse al cual si sufriera uno de miopía 
Responder Con Cita
  #6  
Antiguo 09-05-2022
chenech chenech is offline
Miembro
 
Registrado: dic 2013
Posts: 72
Poder: 11
chenech Va por buen camino
En C++ Builder

Yo con esto pongo el fondo en amarillo, rojo o verde según el estado del campo LIMPIA si es S o N o P, no se si será algo así lo que necesitas, a mi me funciona muy bien y rápido pintando el grid con cientos de filas. En C++ Builder, lo siento pero no me entero de Delphi, si alguien lo traduce. Un saludo.
Código:
	TDataSet *dataset = Column->Field->DataSet;
	if(dataset->FieldByName("NOMCLI")->AsString.Length() < 1)
		DBGrid1->Canvas->Brush->Color = clCream;
	else
	{
		if(dataset->FieldByName("NOMHAB")->AsString == "¡¡¡ BLOQUEADA !!!")
			DBGrid1->Canvas->Brush->Color = clSilver;
		else
			DBGrid1->Canvas->Brush->Color = clSkyBlue;
	}
	if(dataset->FieldByName("TIPOHAB")->AsString.SubString(1, 3) == "PRT")
		DBGrid1->Canvas->Brush->Color = clOlive;
// Para lo seleccionado cambio el color a rojo y negrita
	if(State.Contains(Grids::gdSelected))
	{
//			DBGrid1->Canvas->Font->Color = clRed;
			DBGrid1->Canvas->Font->Style = TFontStyles() << fsBold;
	}
	DBGrid1->DefaultDrawColumnCell(Rect, DataCol, Column, State);
	if(DataCol == 0)
	{
		if(dataset->FieldByName("LIMPIA")->AsString == "S")
			DBGrid1->Canvas->Brush->Color = clGreen;
		else
		{
			if(dataset->FieldByName("LIMPIA")->AsString == "P")
				DBGrid1->Canvas->Brush->Color = clYellow;
			else
				DBGrid1->Canvas->Brush->Color = clRed;
		}
		DBGrid1->DefaultDrawDataCell(Rect, Column->Field, State);
	}
Responder Con Cita
  #7  
Antiguo 09-05-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No entiendo qué dices
Responder Con Cita
  #8  
Antiguo 09-05-2022
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Cita:
Empezado por chenech Ver Mensaje
Yo con esto pongo el fondo en amarillo, rojo o verde según el estado del campo LIMPIA si es S o N o P, no se si será algo así lo que necesitas, a mi me funciona muy bien y rápido pintando el grid con cientos de filas. En C++ Builder, lo siento pero no me entero de Delphi, si alguien lo traduce. Un saludo.
Código:
	TDataSet *dataset = Column->Field->DataSet;
	if(dataset->FieldByName("NOMCLI")->AsString.Length() < 1)
		DBGrid1->Canvas->Brush->Color = clCream;
	else
	{
		if(dataset->FieldByName("NOMHAB")->AsString == "¡¡¡ BLOQUEADA !!!")
			DBGrid1->Canvas->Brush->Color = clSilver;
		else
			DBGrid1->Canvas->Brush->Color = clSkyBlue;
	}
	if(dataset->FieldByName("TIPOHAB")->AsString.SubString(1, 3) == "PRT")
		DBGrid1->Canvas->Brush->Color = clOlive;
// Para lo seleccionado cambio el color a rojo y negrita
	if(State.Contains(Grids::gdSelected))
	{
//			DBGrid1->Canvas->Font->Color = clRed;
			DBGrid1->Canvas->Font->Style = TFontStyles() << fsBold;
	}
	DBGrid1->DefaultDrawColumnCell(Rect, DataCol, Column, State);
	if(DataCol == 0)
	{
		if(dataset->FieldByName("LIMPIA")->AsString == "S")
			DBGrid1->Canvas->Brush->Color = clGreen;
		else
		{
			if(dataset->FieldByName("LIMPIA")->AsString == "P")
				DBGrid1->Canvas->Brush->Color = clYellow;
			else
				DBGrid1->Canvas->Brush->Color = clRed;
		}
		DBGrid1->DefaultDrawDataCell(Rect, Column->Field, State);
	}
Hola gracias por tu respuesta sin embargo al usar DBGrid1->Canvas->Brush->Color = clRed; me cambia toda la fila.
lo que requiero es sólo la celda de la columna especifica.

Código Delphi [-]
if(dataset->FieldByName("NOMHAB")->AsString == "¡¡¡ BLOQUEADA !!!")
      DBGrid1->Columns[8]->Color = clSilver;
    else
      DBGrid1->Columns[8]->Color = clSkyBlue;
//lo siento no he trabajado con C++ Pero puedo imaginar que sería algo igual que esto

  if dbgMov.DataSource.DataSet.FieldByName('TIPO_MOVIMIENTO').AsString =
  'ENTRADAS' then
  begin
    dbgMov.Columns[8].DefaultColor; // solo la celda debe de pintar 
    dbgMov.Columns[8].Color := clGreen;
    //dbgMov.Canvas.Brush.Color := clGreen; //esto me marca toda la fila
   // dbgMov.Canvas.Font.Color := clWhite;
    dbgMov.Columns[8].Font.Color := clWhite;
  end
  else
  begin
     // dbgMov.Canvas.Brush.Color := clYellow;// igual toda la fila
    //dbgMov.Canvas.Font.Color := clWindowText;
    dbgMov.Columns[8].Color := clYellow;
    dbgMov.Columns[8].Font.Color := clWindowText;
  end;
  dbgMov.DefaultDrawColumnCell(Rect, Datacol, Column, State);

Gracias por tu código igual me parece interesante como se muestra la info. pero el requerimiento es por celda.


Saludos y Bendiciones.

novato_erick
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cambiar de color una celda de dbgrid zeta2 Conexión con bases de datos 14 01-07-2016 23:33:12
DBGrid Color Celda hcalero Varios 2 13-04-2007 13:37:42
Cambio de color en el fondo de un DBGrid manu Conexión con bases de datos 1 31-12-2006 18:58:26
Cambiar el color de una celda de un DBGrid candido OOP 2 06-08-2004 10:22:28
Cambio color en una linea dbgrid nugame Gráficos 2 19-05-2003 17:58:29


La franja horaria es GMT +2. Ahora son las 00:23:35.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi