<!--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-->
DBGrid1.Columns[X].font.color := clRed;
위 부분들때문에 계속 루핑하게 되는겁니다.
셀을 그리는 도중에 다른 컬럼의 폰트 색상을 변경했기 때문에 또다시 그 컬럼들을 그리게 되는거죠...
그릴때는 파라매터로 들어오는 컬럼만 그리세요. 나머지는 건드리지 마세요...
^^ 항상 즐코하세요...