DBGrid 에서 DrawColumnCell 이벤트를 이용해서 색상을 변경했습니다.
제가 작성한 소스입니다.
==========================================================
procedure TfmSubModule.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
// 현재 선택된 Row
If DBGrid1.SelectedRows.CurrentRowSelected = True then Begin
DBGrid1.Canvas.Brush.Color:= clNavy;
DBGrid1.Font.Color:= clWindow;
End else Begin
Case qr.FieldByName('Status').AsInteger Of
-1 : DBGrid1.Canvas.Brush.Color:= clBtnFace; // 경우 1
0 : DBGrid1.Canvas.Brush.Color:=clMoneyGreen; // 경우 2
1 : DBGrid1.Canvas.Brush.Color:= clWindow; // 경우 3
9 : DBGrid1.Canvas.Brush.Color:= clInfoBk; // 경우 4
End;
DBGrid1.Font.Color:= clWindowText;
End;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextRect(Rect, Rect.Left+3, Rect.Top+3, Column.Field.AsString);
end;
==========================================================
원래 Case 문이 있는 부분만 코딩을 하고 작업을 했었습니다.
(End else Begin 이하 부분 )
그런데 그냥 레코드들은 적용이 잘 되는데...
선택이 됐을때가..문제더군요..
선택이 된 레코드들이.. 바탕은 적용된 걸로 나오는데..
폰트 색상이.. 하얀색으로 나옵니다.. 디폴트로요...
그래서 현재 선택이 됐는지 안됐는지를 체크하기 위해서 If문을 사용했는데요
그게 먹지를 않네요..ㅡㅡ;;
DBGrid1.SelectedRows.CurrentRowSelected = True --> 이게 먹지를
않는거 같습니다.
DBGrid의 디폴트 드로잉을 True 로 해봐도..False 로 해봐도 마찬가지입니다.
일단 전.. 선택이 된 레코드는 보통처럼 파란색 배경이 되게 하고 싶습니다.
그런데 지금은 선택이 되든 안되든.. 무조건 바탕 및 폰트 색상이 case 문에 코딩되 있는걸로 적용이 됩니다.
나름대로 제 상황을 설명한다고 하긴 했는데.. 제대로 됐는지 몰겠네요..^^;;
아..그리구 DBGrid의 RowSelect 는 True 입니다..^^;;
그럼 (--)(__)
If문을 수정해 주시면 됩니다.
if (gdSelected in State) then // 셀이 선택된 상태일 때
...
그럼..