// Memo나 RichEdit의 WordWrap은 단어 단위로 분리하여 복수행을 만들지만
// StringGrid의 경우는 이 기능이 없고 직접 onDrawCell 에서 그려야 하는데
// WordWrap처럼 단어 단위로 분리하면 오른쪽에 공백이 많이 남게됩니다
// 아래 코드는 한글이 단어 단위로 분리되지 않고 글자 단위로 분리하는
// 예제입니다 - (DefaultDrawing = False 입니다)
procedure TMainForm.StringGrid1DrawCell(Sender: TObject; Col, Row: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (Col = 1) or (Col = 2) then
begin
StringGrid1.Canvas.Font := StringGrid1.Font; // 지정하지 않으면 System 폰트가 됨
Rect.Left := Rect.Left+1;
Rect.Top := Rect.Top+1;
DrawText(StringGrid1.Canvas.Handle,
PChar(StringGrid1.Cells[Col,Row]), // 출력할 문자열
-1, // 문자열의 길이(-1로 지정하면 자동 계산)
Rect,
DT_WORDBREAK);
end
else
begin
StringGrid1.Canvas.FillRect(Rect);
StringGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top+2, StringGrid1.Cells[Col, Row]);
end;
end;
한줄이 길때 여러줄로 표현하는 거라면 다음을 참조하세여..
// Memo나 RichEdit의 WordWrap은 단어 단위로 분리하여 복수행을 만들지만
// StringGrid의 경우는 이 기능이 없고 직접 onDrawCell 에서 그려야 하는데
// WordWrap처럼 단어 단위로 분리하면 오른쪽에 공백이 많이 남게됩니다
// 아래 코드는 한글이 단어 단위로 분리되지 않고 글자 단위로 분리하는
// 예제입니다 - (DefaultDrawing = False 입니다)
procedure TMainForm.StringGrid1DrawCell(Sender: TObject; Col, Row: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (Col = 1) or (Col = 2) then
begin
StringGrid1.Canvas.Font := StringGrid1.Font; // 지정하지 않으면 System 폰트가 됨
Rect.Left := Rect.Left+1;
Rect.Top := Rect.Top+1;
DrawText(StringGrid1.Canvas.Handle,
PChar(StringGrid1.Cells[Col,Row]), // 출력할 문자열
-1, // 문자열의 길이(-1로 지정하면 자동 계산)
Rect,
DT_WORDBREAK);
end
else
begin
StringGrid1.Canvas.FillRect(Rect);
StringGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top+2, StringGrid1.Cells[Col, Row]);
end;
end;