Q&A

  • string grid 에서 소계 합계 row를 다른 색을 할려면
질문좀 하겠습니다..

string grid 에서 소계, 합계 row를 다른 색을 할려구 하는데..

잘 안됩니다..

전 잘 모르니까 좀 자세하게 설명좀 해주세요..

예제를 주시면 더욱 고맙겠구요..

그럼 수고하세요...

1  COMMENTS
  • Profile
    박성훈 2000.02.18 01:14
    oracle8i wrote:

    > 질문좀 하겠습니다..

    > string grid 에서 소계, 합계 row를 다른 색을 할려구 하는데..

    > 잘 안됩니다..

    > 전 잘 모르니까 좀 자세하게 설명좀 해주세요..

    > 예제를 주시면 더욱 고맙겠구요..

    > 그럼 수고하세요...



    원하시는 기능은 TStringGrid의 OnDrawCell 이벤트에서 해결할 수 있습니다.

    소계나 합계가 들어가는 Row가 유동적이라면 칼럼을 한개 더 두시고 소계나 합계를 구분

    할 수 있는 구분문자를 두시면 될 것 같군요. 그런 후 아래와 같이 해보시면

    될 것 같은데요. 그리고 원하시는 기능을 구현하는 방법이 팁란이나 Q&A에 많이 있으니

    검색해 보시구요. 조금이라도 도움이 되었으면 좋겠군요.



    procedure TfrmOrder.StringGrid1DrawCell(Sender: TObject; Col, Row: Integer;

    Rect: TRect; State: TGridDrawState);

    var

    tmp:String;

    L:Integer;

    begin

    with TStringGrid(Sender) do begin

    tmp:= TStringGrid(Sender).Cells[Col,Row];

    if Row=0 then begin // 첫번째 Row(보통 타이틀이 들어가는 곳)를 Maroon색으로

    Canvas.Brush.Color:= clMaroon;

    Canvas.Font.Color := clBlack;

    end

    {소계나 합계가 들어가는 Row가 고정적일 때

    소계는 6번째, 합계는 10번째에 들어간다면

    else if Row=6 then

    begin

    Brush.Color:= clMaroon;

    L:= Rect.Right-TextWidth(tmp)-4;



    end

    else if Row=10 then

    begin



    Brush.Color:= clGreen;

    L:= Rect.Right-TextWidht(tmp)-4;

    end;

    }



    //소계나 합계가 들어가는 Row가 유동적일 때

    else begin

    if Cells[3,Row]='소계' then //합계가 들어가는 Row

    begin

    Brush.Color:= clYellow;

    end

    else if Cells[3,Row]='합계' then

    begin

    Brush.Color:= clGreen;

    end;



    //각 칼럼별로 데이타 종류에 따른 정렬

    {case Col of

    0: L:= Rect.Left+2; //일반 문자값은 좌측정렬

    1,2: begin

    //숫자형에 천단위로 콤마삽입

    tmp:= FormatFloat('#,0',StrToIntDef(tmp,0));

    //우측정렬

    L := Rect.Right-TextWidth(tmp)-4;

    end;

    end;}

    end;

    Canvas.FillRect(Rect); //캔버스를 칠한다(기본값은 흰색)

    Canvas.TextRect(Rect,L,Rect.Top+2,tmp); //문자를 뿌려준다(기본값은 검정색)

    end;

    end;