Stringgrid 정렬하기

2012. 8. 2. 09:13언어/C++ Builder

Builder 6에서는 상관 없었지만 XE로 넘어오니 StringGrid를 가운데 정렬하면 그리드 안에 내용이 두번 표시 된

다. 이 부분에서 검색을 해봤더니 BorlandForum에 나와 있었다.

이유는 텍스트 뿐만 아니라 배경도 같이 그려줘야 한다고 한다.

StringGrid의 DefaultDrawing값을 false로 해주고 OnDrawCell이벤트에 아래와 같은 소스를 넣어주면 된다.


if (State.Contains(gdFixed)){

        StringGrid1->Canvas->Brush->Color = clBtnFace;

        StringGrid1->Canvas->Font->Color = clWindowText;

        StringGrid1->Canvas->FillRect(Rect);

Frame3D(StringGrid1->Canvas, Rect, clBtnHighlight, clBtnShadow, 1);

//GradientFillCanvas( StringGrid1->Canvas, (TColor)0x00F0F0F0, (TColor)0x00C0C0C0, Rect, gdVertical );

    }else if (State.Contains(gdSelected)){

StringGrid1->Canvas->Brush->Color = clHighlight;

StringGrid1->Canvas->Font->Color = clHighlightText;

StringGrid1->Canvas->FillRect(Rect);

}else{

StringGrid1->Canvas->Brush->Color = StringGrid1->Color;

StringGrid1->Canvas->Font->Color = StringGrid1->Font->Color;

StringGrid1->Canvas->FillRect(Rect);

}

StringGrid1->Canvas->Brush->Style = bsClear;

DrawText( StringGrid1->Canvas->Handle,  StringGrid1->Cells[ACol][ARow].w_str(), -1, &Rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER );


출처 http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=66332