델파이에서 기본으로 제공되는 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;
'知 > Delphi' 카테고리의 다른 글
이미지 파일 헤더 구분 (0) | 2018.03.12 |
---|---|
집합형 데이터를 DB에 보관하기 (0) | 2016.07.11 |
TClientDataSet 파일의 크기 줄이기 (0) | 2013.01.09 |
IP, OS, CPU 정보 알아오기 (0) | 2012.11.09 |
마우스 움직이는 범위를 패널 안으로 제약하기 (0) | 2012.05.03 |