Q&A

  • 스트링그리드 셀 색변경
특정셀의 배경색을 바꿀려고 하는데, 아래방법으로 하면 배경색은 변경되는데
글자가 안보이내요. 어떻게 고쳐야 하나요.

    with schedule_grid do
        begin
        if (ARow = 5)and(ACol=2) then
            begin
            Canvas.Brush.Color := clYellow;   // 배경색을 바꿀때 사용
            canvas.TextRect(Rect, Rect.Left, Rect.Top, cells[ACol, ARow]);
            end;
        end;
1  COMMENTS
  • Profile
    구창민 2007.09.28 00:27
    안녕하세요..

    예전에 어딘가에서 받아두었는 내용인데 참고하세요..

    DrawCell 이벤트에 코딩해보시면 되겠네요..

    그럼 즐거운 프로그래밍 하시길~


    var
    SelectedBGColor  : TColor;  /// 선택된 셀 바탕색
    SelectedLineColor: TColor;  /// 선택된 셀 라인색
    OldBrushColor    : TColor;  /// 사용할 컬러값들의 이전값을 저장해 놓는다.
    OldPenColor      : TColor;
    OldFontColor     : TColor;
    begin
    SelectedBGColor := $00FEEFEB;
    SelectedLineColor := $00CABDAD;

    with TStringGrid(Sender).Canvas do begin
       OldBrushColor := Brush.Color; // 사용할 컬러값들의 이전값을 저장
       OldPenColor := Pen.Color;
       OldFontColor := Font.Color;

       if state = [gdFixed] then begin  // Fixed 일 경우 그리는
         Brush.Color := TStringGrid(Sender).FixedColor;
         FillRect(Rect);

         Pen.Color := clBtnHighLight;
         MoveTo(Rect.Left, Rect.Top);
         LineTo(Rect.Right, Rect.Top);
         MoveTo(Rect.Left, Rect.Top);
         LineTo(Rect.Left, Rect.Bottom);

         Pen.Color := clBtnShadow;
         MoveTo(Rect.Right-1, Rect.Top);
         LineTo(Rect.Right-1, Rect.Bottom);
         MoveTo(Rect.Left, Rect.Bottom-1);
         LineTo(Rect.Right, Rect.Bottom-1);
       end else if gdSelected in State then begin  // 선택된 셀인 경우
         Brush.Color := SelectedBGColor; // 일단 바탕을 칠한다.
         FillRect(Rect);
         Pen.Color := SelectedLineColor;

         if ACol = 0 then begin // 첫번째 컬럼일때 좌측에 선을 그린다.
           MoveTo(Rect.Left, Rect.Top);
           LineTo(Rect.Left, Rect.Bottom);
         end;

         if ACol = (TStringGrid(Sender).ColCount-1) then begin // 마지막 컬럼일때 우측에 선을 그린다.
           MoveTo(Rect.Right-1, Rect.top);
           LineTo(Rect.Right-1, Rect.Bottom);
         end;

         MoveTo(Rect.Left,Rect.Top); // 아래위로 선을 그린다.
         LineTo(Rect.Right, Rect.Top);
         MoveTo(Rect.Left, Rect.Bottom-1);
         LineTo(Rect.Right, Rect.Bottom-1);
       end else begin
         Brush.Color := TStringGrid(Sender).Color;
         FillRect(Rect);
       end;

       Font.Color := TStringGrid(Sender).Font.Color;
       Font.Name  := FontName;

       TextOut(Rect.Left + 12, Rect.Top + 2, TStringGrid(Sender).Cells[ACol,ARow]);

       Font.Color := OldFontColor;  // 저장해 놓은 컬러값을 복원
       Brush.Color := OldBrushColor;
       Pen.Color := OldPenColor;
    end;
    end;