Q&A

  • 디비그리드에서 글씨색깔을 변경하니 루핑을도는데, 도움부탁합니다
<!--CodeS-->
안녕하세요? 델파이를 사용하는 초보자입니다.
디비그리드에서 한 Row에서 특정칼람의 값에 따라 최대 3가지 색상을 넣는 프로그램입니다.
참고로 그리드의 Row의 바탕색이 아닌 글씨의 색상을 변경하고자 하는 것입니다.
하나의 Row전체나 하나의 칼람 전체의 Font 색상을 변경하는 것으로 바꾸나까 루핑은 해결되는데,
원하는 것이 아니라서...
여기 저기 참조하여 다음과 같이 코딩을 했더니 하고자하는 색상은 변경되었는데,
프로그램이 루핑을 돕니다. 고수님들의 조언을 부탁드립니다.
=====다음====
CalcTradeDeungRakAmt => Calculated Field로서 색상변경의 기준이 되는 필드
기준필드의 값이 올랐으면 붉은색, 내렸으면 푸른색상의 글씨로 뿌리고자 함(일종의 주식 시세 처럼)

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var
  strColor  :  string;
begin
  //수입금액의 색상 Seting
  if  qryGwansim.FieldByName('CalcSooipDeungRakAmt').asInteger  >  0  then
      strColor  :=  '+'
  else
  if  qryGwansim.FieldByName('CalcSooipDeungRakAmt').asInteger  <  0  then
      strColor  :=  '-'
  else
      strColor  :=  ' ';

  if  strColor  =  '+'  then
      begin
        DBGrid1.Columns[3].font.color := clRed;
        DBGrid1.Columns[4].font.color := clRed;
        DBGrid1.Columns[5].font.color := clRed;
        DBGrid1.Columns[6].font.color := clRed;
        //(Sender as TDbGrid).canvas.font.Color := clRed;
      end
  else
  if  strColor  =  '-'  then
      begin
        DBGrid1.Columns[3].font.color := clBlue;
        DBGrid1.Columns[4].font.color := clBlue;
        DBGrid1.Columns[5].font.color := clBlue;
        DBGrid1.Columns[6].font.color := clBlue;
        //(Sender as TDbGrid).canvas.font.Color := clBlue;
      end
  else
      begin
        DBGrid1.Columns[3].font.color := clBlack;
        DBGrid1.Columns[4].font.color := clBlack;
        DBGrid1.Columns[5].font.color := clBlack;
        DBGrid1.Columns[6].font.color := clBlack;
        //(Sender as TDbGrid).canvas.font.Color := clBlack;
      end;

  //수출금액의 색상 Seting
  if  qryGwansim.FieldByName('CalcSoochulDeungRakAmt').asInteger  >  0  then
      strColor  :=  '+'
  else
  if  qryGwansim.FieldByName('CalcSoochulDeungRakAmt').asInteger  <  0  then
      strColor  :=  '-'
  else
      strColor  :=  ' ';

  if  strColor  =  '+'  then
      begin
        DBGrid1.Columns[7].font.color := clRed;
        DBGrid1.Columns[8].font.color := clRed;
        DBGrid1.Columns[9].font.color := clRed;
        DBGrid1.Columns[10].font.color := clRed;
      end
  else
  if  strColor  =  '-'  then
      begin
        DBGrid1.Columns[7].font.color := clBlue;
        DBGrid1.Columns[8].font.color := clBlue;
        DBGrid1.Columns[9].font.color := clBlue;
        DBGrid1.Columns[10].font.color := clBlue;
      end
  else
      begin
        DBGrid1.Columns[7].font.color := clBlack;
        DBGrid1.Columns[8].font.color := clBlack;
        DBGrid1.Columns[9].font.color := clBlack;
        DBGrid1.Columns[10].font.color := clBlack;
      end;

  //(Sender  as  TDbGrid).canvas.FillRect(Rect);
  //(Sender  as  TDbGrid).DefaultDrawColumnCell(Rect,  DataCol,  Column,  State);
end;

코드끝: <!--CodeE-->
1  COMMENTS
  • Profile
    최용일 2007.01.04 20:19
    안녕하세요. 최용일입니다.

    DBGrid1.Columns[X].font.color := clRed;

    위 부분들때문에 계속 루핑하게 되는겁니다.

    셀을 그리는 도중에 다른 컬럼의 폰트 색상을 변경했기 때문에 또다시 그 컬럼들을 그리게 되는거죠...

    그릴때는 파라매터로 들어오는 컬럼만 그리세요. 나머지는 건드리지 마세요...

    ^^ 항상 즐코하세요...