Q&A

  • plz...............이번엔 꼭 답변좀
저번에도 질문을 올렸는데, 답변해 준 사람이 한 분도 안 계셔가지고

다시 올립니다.

dbgrid에서 특정한 조건에 해당하는 줄의 색깔을 변경하려고 하는데요.

검색을 해보니 drawdatacell 이벤트를 태우기 위해서는

dbgrid1.columns.state 를 csDefault로 해야 한다고 하는데요.

이렇게 하면 타이틀이나 그리드의 컬럼 넓이가 망가지는데요.

정해놓은 타이틀명이나 컬럼넓이를 원래대로 보여주면서

색깔을 변경할 수 있는 방법은 없을까요?

dbgrid1.columns.state := csCustomized; 상태에서 drawdatacell

이벤트를 타게하는 방법은 정녕 없는건가요.............

제가 너무 실력이 없어서 자세한 소스와 설명 부탁합니다.

정말 궁금해요....



4  COMMENTS
  • Profile
    김영로 2000.12.21 00:50
    dbGrid 도 보통의 그리드처럼 자신이 직접 그리고 싶을때에는

    다른 건 신경쓰지 마시고..

    DefaultDrawing 속성값을 true 에서 false 로 바꿔주세요.

    그러면 DBGrid 같은 그리드 콤포넌트에서 DrawCell 이벤트를 발생시켜

    줍니다. 그때 OnDrawCell 이벤트에서 그려주면 되죠..

    Columns.State 를 변경한다는 것은 뭔말인지 모르겠는데..

    그것은 선택되었냐, 포커스되었냐, 아무것도 아니냐.. 그런거일꺼 같은데..

    ListBox 에서 TOwnerDrawState 타입처럼..

    그런거는 현재 Cell 이 선택된 셀이냐 포커스된 셀이냐를 나타내는

    거니까 상관없는 겁니다..



    woody wrote:

    > 저번에도 질문을 올렸는데, 답변해 준 사람이 한 분도 안 계셔가지고

    > 다시 올립니다.

    > dbgrid에서 특정한 조건에 해당하는 줄의 색깔을 변경하려고 하는데요.

    > 검색을 해보니 drawdatacell 이벤트를 태우기 위해서는

    > dbgrid1.columns.state 를 csDefault로 해야 한다고 하는데요.

    > 이렇게 하면 타이틀이나 그리드의 컬럼 넓이가 망가지는데요.

    > 정해놓은 타이틀명이나 컬럼넓이를 원래대로 보여주면서

    > 색깔을 변경할 수 있는 방법은 없을까요?

    > dbgrid1.columns.state := csCustomized; 상태에서 drawdatacell

    > 이벤트를 타게하는 방법은 정녕 없는건가요.............

    > 제가 너무 실력이 없어서 자세한 소스와 설명 부탁합니다.

    > 정말 궁금해요....

    >

  • Profile
    woody 2000.12.21 01:47
    답변감사합니다. 그런데, DefaultDrawing = False를 하고, DBGrid1DrawDataCell에다가

    브레이크를 걸고 조회버튼을 클릭했는데, 걸리지가 않고 데이타도 나오지가 쿼리컴포넌

    트에 있는 쿼리조회내용도 보여지지가 않네요.

    아래 소스를 좀 봐주세요.

    procedure Tf_SellTicket.DBGrid1DrawDataCell(Sender: TObject;

    const Rect: TRect; Field: TField; State: TGridDrawState);

    var

    FieldValue : string;

    begin

    Fieldvalue := Field.DataSet.FieldByName('sale_code').Asstring;



    if (FieldValue = '카드') then begin

    (Sender as TDbGrid).canvas.font.Color := clRed;

    (Sender as TDbGrid).canvas.Brush.Color := clyellow;

    (Sender as TDbGrid).canvas.FillRect(Rect) ;

    (sender as TDbGrid).DefaultDrawDataCell(Rect,Field,State);

    end

    else begin

    (sender as TDbGrid).DefaultDrawDataCell(Rect,Field,State) ;

    end ;

    // dbgrid1.columns.state := csCustomized;

    end;

    그리드에 있는 내용중에서 sale_code가 카드인것 만 색깔을 바꾸고 싶은데요.

    위에서 코멘트 부분의 dbgrid1.columns.state를 조회버튼클릭 이벤트 안에

    csDefault로 해줘야지 위의 이벤트를 타더라구요. 그런데 이렇게 하면 타이틀을 한글로

    바꿔준 내용은 날라가고 원래의 컬럼명이 타이틀로 나오거든요. 이걸 타이틀이 변경되지

    않고 위의 이벤트를 타게 하고 싶은 겁니다.....

  • Profile
    성더기 2000.12.21 00:12
    woody wrote:

    > 저번에도 질문을 올렸는데, 답변해 준 사람이 한 분도 안 계셔가지고

    > 다시 올립니다.

    > dbgrid에서 특정한 조건에 해당하는 줄의 색깔을 변경하려고 하는데요.

    > 검색을 해보니 drawdatacell 이벤트를 태우기 위해서는

    > dbgrid1.columns.state 를 csDefault로 해야 한다고 하는데요.

    > 이렇게 하면 타이틀이나 그리드의 컬럼 넓이가 망가지는데요.

    > 정해놓은 타이틀명이나 컬럼넓이를 원래대로 보여주면서

    > 색깔을 변경할 수 있는 방법은 없을까요?

    > dbgrid1.columns.state := csCustomized; 상태에서 drawdatacell

    > 이벤트를 타게하는 방법은 정녕 없는건가요.............

    > 제가 너무 실력이 없어서 자세한 소스와 설명 부탁합니다.

    > 정말 궁금해요....

    >



    근데 줄이라는게 Column말하는거에여? 아님 Row말하는거에여?

    Column은 밑에걸루 하니깐 되는거 같은데...

    DBGrid1.Columns[1].Color <-- 이거

  • Profile
    woody 2000.12.21 00:31
    줄(행)을 색깔을 바꾸고 싶거든요....