Q&A

  • 일반(VCL)-stringgrid 에서 특정셀의 글자에 색을 넣으려면..
안뇽하세요?



델파이를 시작하지 얼마 되지않은 왕초보입니다....

만약에 5 X 5 개의 셀을 가진 stringgrid에서 x=3,y=3에 있는 셀의

글자만 빨강색으로 바꾸려고 합니다. 어떻게 해야하죠?

이상하게 모든 글자가 바뀌어 버립니다....



그리고 글자가 한쪽으로 쏠리는데 가운데에 모이게 하는 방법도 가르쳐주시면

감사하겠습니다.



꾸벅...행복하세요..

1  COMMENTS
  • Profile
    하늘맥 2000.10.28 18:58
    왕초보맨 wrote:

    > 안뇽하세요?

    >

    > 델파이를 시작하지 얼마 되지않은 왕초보입니다....

    > 만약에 5 X 5 개의 셀을 가진 stringgrid에서 x=3,y=3에 있는 셀의

    > 글자만 빨강색으로 바꾸려고 합니다. 어떻게 해야하죠?

    > 이상하게 모든 글자가 바뀌어 버립니다....

    >

    > 그리고 글자가 한쪽으로 쏠리는데 가운데에 모이게 하는 방법도 가르쳐주시면

    > 감사하겠습니다.

    >

    > 꾸벅...행복하세요..





    안녕하세요...

    스트링 그리드의 특정셀를 넣으려면 배열을 사용하여

    스트링 그리의 ondrawcell 이벤트에 구현하면 됩니다..

    스트링 그리드의 각각의 셀의 색깔의 ondrawcell이벤트에 부여해주어야지

    셀별로 원하는 색깔을 변화 시킬수 있습니다..

    참고로 저는 폰트 색깔을 변화시키지 못해서 셀에게 색깔을 주었죠



    먼저 전역변수에 배열을 선언합니다..

    저는 스트링그리가 10* 10 이라서 밑에와 같이 선언했습니다..

    public

    matrix : array[1..10,1..10] of string;



    그다음 넣고자의 셀의 주소에 다음과 같이 코딩합니다.

    matrix[3,3] := '3';







    그리고 다음과 같이 코딩합니다.



    procedure TGmgumsaEfrm.StrGridDrawCell(Sender: TObject; ACol,

    ARow: Integer; Rect: TRect; State: TGridDrawState); //넣고자하는 스트링그리드

    var

    s_grid: string;

    i_pos,i_count,i,j: integer;

    begin

    For i := 1 to 10 do //색깔고정을 위해 배열을 이용하영 루틴를 돌림

    For j := 1 to 10 do //배열 matrix 는 등록시에 초기화 하고 설정

    begin

    if (ACol >= 1) and (Arow >= 1) then //제목표시줄도 색깔이 변화하므로

    begin

    with (Sender as TstringGrid).canvas do

    begin

    s_grid := (Sender as TStringgrid).Cells[acol,arow];

    If(ARow = i ) and (Acol= j) then

    begin

    case strtointdef(matrix[i,j],0) of

    0 : Brush.Color := clBlack;

    1 : Brush.Color := clFuchsia;

    2 : Brush.Color := clRed; // 합격 : 검정 ::: 자치 : 연두

    3 : Brush.Color := clGreen; // 불합격:적새 ::: 샘플 : 노란

    9 : Brush.Color := clMaroon;

    else

    Brush.Color := clWhite;

    end;

    font.Color := clInfobk;

    //font.Style := fsbold;

    end;

    //요기서 부터는 중간배열을 위한 루틴입니다....

    FillRect(Rect);

    i_pos := (rect.right-rect.left-TextWidth(s_grid)) div 2;//중앙배열

    // lpos := rect.right - rect.left - textWidth(ls) - 4; 참고로 오른쪽

    textrect(rect,rect.left+i_pos,rect.top+1,s_grid);

    ////////////////////////////////////////////////////

    end;

    end;

    end;