知/Delphi

DBGrid DrawColumnCell 예제

채수욱 2015. 12. 11. 16:12

델파이에서 기본으로 제공되는 DBGrid의 DrawColumnCell의 기능이 동작하지 않아서 버그라고 생각하는 사람들이 있다.

DBGrid에서 DefaultDrawing를 False로 설정한 경우 DrawColumnCell 에서 DefaultDrawColumnCell을 호출해 주어야 다른 코드가 정상적으로 동작한다.


procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn;

  State: TGridDrawState);

var

  aRct:TRect;

  sStr:String;

begin

  TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);


  with TDBGrid(Sender) do

  begin

    if(not VarIsNull(Column.Field.Value)) then

    begin

      case Column.Field.Value of

        1: Canvas.Brush.Color := clRed;

        2: Canvas.Brush.Color := clBlue;

        3: Canvas.Brush.Color := clGreen;

        4: Canvas.Brush.Color := clPurple;

        5: Canvas.Brush.Color := clGray;

        6: Canvas.Brush.Color := clSilver;

        7: Canvas.Brush.Color := clHighlight;

        8: Canvas.Brush.Color := clAqua;

        else Canvas.Brush.Color := clMoneyGreen;

      end;

    end

    else

    begin

      Canvas.Brush.Color := clWhite;

    end;

  end;

  aRct := Rect;

  sStr := VarToStrDef(Column.Field.Value, '0');

  TDBGrid(Sender).Canvas.FillRect(aRct);

  TDBGrid(Sender).Canvas.TextRect(aRct, sStr, [tfCenter, tfVerticalCenter]);

end;


단순히 셀의 칼라만 바꾸는 것이라면 다음 코드로도 적용 가능하다

procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn;

  State: TGridDrawState);

var

  aRct:TRect;

  sStr:String;

begin

  if(Random(2) = 1) then

  begin

    TDBGrid(Sender).Canvas.Brush.Color := clWindow;

    TDBGrid(Sender).Canvas.Font.Color := clWindowText;

  end

  else

  begin

    TDBGrid(Sender).Canvas.Brush.Color := rgb(255,165,0);

    TDBGrid(Sender).Canvas.Font.Color := clWhite;

  end;


  TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;