Ver Mensaje Individual
  #6  
Antiguo 09-05-2022
chenech chenech is offline
Miembro
 
Registrado: dic 2013
Posts: 72
Reputación: 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