Q&A

  • dbgrid에서 한셀에 글자만 빨간색으로 하기??
dbgrid에서 수치가 음수인 셀의 글자만 빨간색으로 하려고 하는데 도와주세요.

여기 질답란에 보니, 한셀의 바탕색을 바꾸는건 있더라고요.
지금 임시방편으로 그렇게 해뒀는데, 영 찜찜하네요.
음수값이 있는 셀의 폰트색깔만 빨간색으로 바꾸는 소스좀 부탁드려요..
2  COMMENTS
  • Profile
    홍성락 2003.03.20 08:26
    hsr///////////////////////////////////////////////////////
    Canvas.Font.Color만 하시면됩니다
    AsInteger대신 다른걸로하셔도됩니다
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
        with TDBGrid(Sender) do begin
             if (DataCol = 0)and(Column.Field.AsInteger < 0) then begin
                Canvas.Font.Color :=clRed;
                DefaultDrawColumnCell(Rect, DataCol, Column,[]);
             end;

        end;
  • Profile
    김영대 2003.03.20 08:24
    // 안녕하세요 김영대(http://www.howto.pe.kr) 입니다
    // 전에 팁으로 올렸던 건데 소스를 조금 수정하여 사용하시면 될것 같습니다

    Tdbgrid의 OnDrawColumnCell을 이용하면 편리합니다.
    몇가지만 응용하면 지정한 셀에 이미지를 그려 체크표시등도
    가능합니다.
    아래의 예제는 특정셀을 노란색바탕에 검은 글씨로 만듭니다.
    State를 검사하는 이유는 현재 선택된 셀은 그려선 안되기
    때문이지요.. 또한 Boolean값으로 저장되어 있는 컬럼들,
    예를 들자면 성별같은 것들을 '남','여'로 표시할때도
    이 Event를 사용하지요.

    procedure TForm1.dbgrid1DrawColumnCell(Sender: TObject;
    const Rect: TRect; DataCol: Integer; Column: TColumn;
    State: TGridDrawState);
    begin
       with Tdbgrid(Sender).Canvas do begin
           if (Column.FieldName = 'FILEDNAME') and (State = []) then begin
               Brush.Color := clYellow;
               Font.Color := clBlack;
           end
           else begin
               Brush.Color := clWindow;
               Font.Color := clWindowText;
           end;
           if (gdFocused in State) or (gdSelected in State) then begin
               Brush.Color := clHighlight;
               Font.Color := clHighlightText;
           end;
           FillRect(Rect);
           TextOut(Rect.Left+2,Rect.Top+2,Column.Field.AsString);
           Brush.Style := bsSolid;
           Brush.Color := clWindow;
       end;
    end;