StringGrid sa ćelijama u boji ima veoma dobar izgled, a na taj način možete informisati o korisnika o važnosti određenog sadržaja u ćeliji. Da bi obojili određene ćelije koristićemo događaj "OnDrawCell". U sledećem kodu prikazaćemo vam kako da obojite pozadinu ćelija u crvenu boju. Pozadina druge kolone ćelija će biti obojena u zelenu boju.
procedure TForm1.StringGrid1DrawCell(Sender:
TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
Const //ovde definišete boju. Naravno možete ostaviti
//i default boje.
clPaleGreen = TColor($CCFFCC);
clPaleRed = TColor($CCCCFF);
begin
//Ukoliko ćelija ima fokus obojićete je u drugu boju
if (gdFocused in State) then begin
StringGrid1.Canvas.Brush.Color := clBlack;
StringGrid1.Canvas.Font.Color := clWhite;
end
else //Ukoliko ćelija nema fokus možete koristiti
//sopstvene boje
If ACol = 2 //druga kolona će biti obojena u
//zeleno
then StringGrid1.Canvas.Brush.color := clPaleGreen
else StringGrid1.canvas.brush.Color := clPaleRed;
//Sada bojimo ćelije, ali samo, ukoliko ćelija
//nije naslovna - Row/Column
If (ACol > 0) and (ARow>0) then
begin
//Painting the Background
StringGrid1.canvas.fillRect(Rect);
//Bojimo tekst. Ovde možete
//koristiti i poravnavanje
StringGrid1.canvas.TextOut(Rect.Left,
Rect.Top,StringGrid1.Cells[ACol,ARow]);
end;
end;
Ukoliko želite da obojite vaše ćelije u zavisnosti od vrednosti u ćelijama možete zameniti prethodne 3 linije (if Acol = 2 ......), sa sledećim:
if StringGrid1.Cells[ACol,ARow] = 'highlight it'
then StringGrid1.Canvas.Brush.color := clPalered
else StringGrid1.canvas.brush.Color := clwhite;