안녕하세요.
Delphi5를 사용하는 초보입니다.
이 곳 Q&A를 통하여 DBGrid에서의 Color를 변경시키는 여러가지 질문과 답변을
살펴 보고 제가 실제로 작업을 하여 알게된 문제점을 여쭤보고자 합니다.
다름이 아니라 전 DBGrid에서 각 Record별로 색상을 변경하려고 합니다.
이 곳의 몇군데에서 이에 대한 해답을 찾을수 있었으나 문제는 DBGrid에 있는듯
하여 좀더 자세히 알고 싶어 질문을 드립니다.
DBGrid를 가져다 놓고 OnDrawDataCell Event에서 다음과 같이 작업을 하면 아무런
문제가 되지 않고 변경된 색상으로 잘 보여지더군요.
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
var
FieldValue: String;
begin
FieldValue := Field.DataSet.FieldByName('Code').AsString;
if FieldValue = '0' then begin
(Sender as TDbGrid).canvas.brush.Color := $0080FFFF;
(Sender as TDbGrid).canvas.font.Color := clBlack;
(Sender as TDbGrid).canvas.FillRect(Rect);
(sender as TDbGrid).DefaultDrawDataCell(Rect,Field,State) ;
end else begin
(sender as TDbGrid).DefaultDrawDataCell(Rect,Field,State) ;
end;
end;
그런데 DBGrid의 Inspector Option에서 dgRowSelect, dgAlwaysShowSelection을
True로 변경한후에 Run을 하면 색상이 변경된 부분에선 Row Color가 되질 않아요
물론 Row Color 또한 사용자 임의로 바꿔서 사용할 수 있으면 더욱 좋아요.
하지만 현재 Default로 지정된 짙은 파란색의 Row Color가 조건에 따라 변경된
Record에서는 아무런 색변화가 나타나지 않고 사용자가 변경한 Record Color로
보여 집니다.
그리고 가장 큰 문제점으론 DBGrid의 Columns를 나눠서 각 Columns의 Title명을
기술하가 위해 DGBrid의 Columns Editor 메뉴를 호출하여 작업을 하게되면 상위에서
기술한 OnDrawDataCell Event에서 기술한 색상의 변환이 전혀 먹히질 않아요.
많은 고수님들의 명쾌한 해답을 부탁드립니다.