Contributor: TONY POPIEL

{
Hi Moris

> Can anyon help me. I would like to alter the colour of a cell in a
> stringgrid if certain criteria are met. Can this be done and if so how

You have to write your own OnDrawCell procedure.
Here is some code I wrote a while back that did the trick. It's too
much but you might find something useful in there.

}

procedure TLongChart.StringGrid1DrawCell(Sender: TObject; Col,
  Row: Longint; Rect: TRect; State: TGridDrawState);
var
OldColor : TColor;
OldBrush : TBrush;
begin with StringGrid1.Canvas do begin
    OldColor := Font.Color;
    OldBrush := Brush;

   {paint fridays}
   if StringGrid1.Cells[Col,1] = 'Fr' then begin
   Brush.Color := $02aaaaaa; {light gray}
   FillRect(Rect);
   Font.Color := clWhite;
   TextOut(Rect.Left+2,Rect.Top+2,StringGrid1.Cells[Col,Row]);
   end;

   {paint each alternating month}
   if (Row = 0) and (Col > 0) then begin
   if (Odd(StrToIntDef(StringGrid1.Cells[Col,31],0))) then
   Brush.Color := clBlue
   else
   Brush.Color := clFuchsia;

   FillRect(Rect);
   Font.Color := clWhite;
   TextOut(Rect.Left+2,Rect.Top+2,StringGrid1.Cells[Col,Row]);
   end;

   {paint days of the week}
   if (Row = 1) and (Col > 0) then begin
   if StringGrid1.Cells[Col,1] = 'Fr' then
   Brush.Color := clTeal else
   Brush.Color := clAqua;
   FillRect(Rect);
   if StringGrid1.Cells[Col,1] = 'Fr' then
   Font.Color := clWhite else
   Font.Color := clBlack;

   TextOut(Rect.Left+2,Rect.Top+2,StringGrid1.Cells[Col,Row]);
   end;


   Font.Color := OldColor;
   Brush := OldBrush;

end;
end;

---------------------------------------------------
Tony Popiel
popiel@emirates.net.ae
United Arab Emirates
---------------------------------------------------