DBGrid DrawColumnCell 예제
델파이에서 기본으로 제공되는 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;