Q&A

  • DBGrid 의 Row 색상 변경에 대해서..
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 입니다..^^;;

그럼 (--)(__)
1  COMMENTS
  • Profile
    서기원 2004.07.13 04:31
    OnDrawColumnCell이벤트의 인자중 마지막 State의 값을 조사하여
    If문을 수정해 주시면 됩니다.

    if (gdSelected in State) then  // 셀이 선택된 상태일 때
    ...

    그럼..