|
Sunwine 님이 쓰신 글 :
: 스트링 그리드의 중앙정렬이나 좌측정렬은 할줄 압니다.
:
: 스트링 그리드의 DefaultRowHeight를 한 100으로 잡은후에 글을 쓰게되면
: 글이 위쪽에 써집니다. 전 이 문자를 정확하게 가운데에 쓰게 하고 싶거든요
: 어떤 방법이 있을까요
:
: 그림으로 표현하자면 아래와 같군요 제가 할줄 아는 방법이
: -----------------------------
: 안녕 |
: |
: |
: |
: |
: -----------------------------
:
: 이렇게 된것을 아래와 같이 하고 싶어요
: -----------------------------
: |
: |
: 안녕 |
: |
: |
: -----------------------------
안녕하세요..홍성진 입니다.
OnDrawCell에서 해주면 됩니다. OnDrawCell은 셀이 그려질때 발생합니다.
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
//ACol, ARow는 그려질 셀입니다. Rect는 셀의 영역이구요.
int X, Y;
//그리고, Rect값을 기준으로 그립니다.
X = (Rect.Width() / 2) - (StringGrid1->Canvas->TextWidth(StringGrid1->Cells[ACol][ARow])/2);
Y = (Rect.Height() / 2) - (StringGrid1->Canvas->TextHeight(StringGrid1->Cells[ACol][ARow])/2);
//Cell를 클리어 시킵니다. 데이타가 이미 있으면 잔상이 남기 때문입니다.
//여기서 셀의 색상도 바꿀수 있겠죠
StringGrid1->Canvas->FillRect(Rect);
StringGrid1->Canvas->TextOut(Rect.Left + X, Rect.Top + Y, StringGrid1->Cells[ACol][ARow]);
}
대충 이렇게 되겠네요..
더 자세히 제어하려면...ARow 나 ACol에 따라 조건을 줘서 해주면 되구요.
위에서 문자열의 길이를 구하기 위해서 사용한 TextWidth나 TextHeight 보다는 API를 써서
문자열의 픽셀을 구하는것이 더 정확한 값을 구할 수 있습니다.
그럼..
|