Mega Code Archive

 
Categories / Delphi / Graphic
 

Coloring Cells in a StringGrid DBGrid

Title: Coloring Cells in a StringGrid / DBGrid Question: StringGrids / DBGrids with colored cells looks very nice and you can inform the user about importent data inside the Grid. Answer: Unfortunately you can't use the same method for coloring StringGrids and DBGrids. So first let's have a look to the StringGrid: 1. StringGrid ============= Use the "OnDrawCell"-event to make your StringGrids colorful! The following Code shows how to give your Grid a red background color. The second column will be colored with green background. procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); Const //define your color here. Of course you //can use default colors too. clPaleGreen = TColor($CCFFCC); clPaleRed = TColor($CCCCFF); begin //Does the cell have the focus you have to paint it with other colors if (gdFocused in State) then begin StringGrid1.Canvas.Brush.Color := clBlack; StringGrid1.Canvas.Font.Color := clWhite; end else //Does the cell have NOT the focus you can use //your personal colors here if ACol = 2 //the second Column should be //green, the other cells red then StringGrid1.Canvas.Brush.color := clPaleGreen else StringGrid1.canvas.brush.Color := clPaleRed; //Now Paint the cells, but only, if the cell isn't the Title- Row/Column //This of course depends whether you have title-Row/Columns or not. If (ACol 0) and (ARow0) then begin //Painting the Background StringGrid1.canvas.fillRect(Rect); //Painting the Text. Here you can improve the code with // using alignment and so on. StringGrid1.canvas.TextOut(Rect.Left,Rect.Top,StringGrid1.Cells[ACol,ARow]); end; end; If you want to colorize your cells depending on values in the cells you can replace the 3 lines (if Acol = 2 ......) with something like this if StringGrid1.Cells[ACol,ARow] = 'highlight it' then StringGrid1.Canvas.Brush.color := clPalered else StringGrid1.canvas.brush.Color := clwhite; But now lets coloring DBGrids: 2. DBGrid ========= It's much easier to give color to DBGrids. Here you have to use the "OnDrawColumnCell"-Event. The following example is coloring the Cells of Column "Status" when the value is not "a". If you want to color the whole line you only have to delete the "If..." statement (see below) procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); const clPaleGreen = TColor($CCFFCC); clPaleRed = TColor($CCCCFF); begin If Column.FieldName = 'Status' then //Remove this line, if you want //to highlight the whole line If Column.Field.Dataset.FieldbyName('Status').AsString 'a' then If (gdFocused in State) //does the cell have the focus? then dbgrid1.canvas.brush.color := clBlack //focused else dbgrid1.canvas.brush.color := clPaleGreen; //not focused //Now let's paint the cell using a Default-Method: dbgrid1.DefaultDrawColumnCell(rect,DataCol,Column,State) end; That's all. Doesn't it look nice?