자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi 스트링그리드 문자 정렬 문제
2020.02.03 16:59
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
XE8에서 스트링그리드에 표시되는 문자를 왼쪽,오른쪽,가운데 정렬을 하기위해 첨부된 소스처럼 구현하여
실행하면 아래 이미지 처럼 타이틀셀의 문자가 이중으로 표시 되는데 이유가 무엇 일까요? 참고로 델파이6에서는
문제가 없습니다.
댓글 4
-
험프리
2020.02.04 11:44
-
똘귀아빠
2020.02.06 07:45
나와 있는 대로 하면 잔상 문제는 해결 되나 셀정렬이나 폰트 색깔 변경등 다른 기능이 적용 되지가 않습니다. ㅠㅠ
-
이치고
2020.02.07 16:31
StringGrid.DefaultDrawing 옵션을 False로 설정해주세요. True면 위와 같이 나옵니다.
아래 코드는 참조하세요.
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
tw, th:integer;
str:String;
left, top:Integer;
begin
with TStringGrid(Sender).Canvas do
begin
Font.Assign(TStringGrid(Sender).Font); // 이 구문이 없으면 폼 디자이너에서 적용한 폰트가 적용되지 않습니다.
FillRect(Rect);
str := TStringGrid(Sender).Cells[ACol,ARow];
tw := TextWidth(str);
th := TextHeight(str);
// 정렬 처리
case ACol of
0, 3, 5 : // 중앙
begin
left := Rect.Left + (Rect.Width - tw) div 2;
top := Rect.Top + (Rect.Height - th) div 2;
end;
2, 4 : // 우측
begin
left := Rect.Right - tw;
top := Rect.Top + (Rect.Height - th) div 2;
end
else // 좌측
begin
left := Rect.Left;
top := Rect.Top + (Rect.Height - th) div 2;
end;
end;
// 칼라처리
case ACol of
1 : Font.Color := clRed;
2 : Font.Color := clBlue;
else Font.Color := clBlack;
end;
TextOut(left, top, str);
end;
end;
-
험프리
2020.02.07 16:34
유용한 답변 감사드립니다^^
Delphi 스트링그리드 문자 정렬 문제
2020.02.03 16:59
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
XE8에서 스트링그리드에 표시되는 문자를 왼쪽,오른쪽,가운데 정렬을 하기위해 첨부된 소스처럼 구현하여
실행하면 아래 이미지 처럼 타이틀셀의 문자가 이중으로 표시 되는데 이유가 무엇 일까요? 참고로 델파이6에서는
문제가 없습니다.
댓글 4
-
험프리
2020.02.04 11:44
-
똘귀아빠
2020.02.06 07:45
나와 있는 대로 하면 잔상 문제는 해결 되나 셀정렬이나 폰트 색깔 변경등 다른 기능이 적용 되지가 않습니다. ㅠㅠ
-
이치고
2020.02.07 16:31
StringGrid.DefaultDrawing 옵션을 False로 설정해주세요. True면 위와 같이 나옵니다.
아래 코드는 참조하세요.
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
tw, th:integer;
str:String;
left, top:Integer;
begin
with TStringGrid(Sender).Canvas do
begin
Font.Assign(TStringGrid(Sender).Font); // 이 구문이 없으면 폼 디자이너에서 적용한 폰트가 적용되지 않습니다.
FillRect(Rect);
str := TStringGrid(Sender).Cells[ACol,ARow];
tw := TextWidth(str);
th := TextHeight(str);
// 정렬 처리
case ACol of
0, 3, 5 : // 중앙
begin
left := Rect.Left + (Rect.Width - tw) div 2;
top := Rect.Top + (Rect.Height - th) div 2;
end;
2, 4 : // 우측
begin
left := Rect.Right - tw;
top := Rect.Top + (Rect.Height - th) div 2;
end
else // 좌측
begin
left := Rect.Left;
top := Rect.Top + (Rect.Height - th) div 2;
end;
end;
// 칼라처리
case ACol of
1 : Font.Color := clRed;
2 : Font.Color := clBlue;
else Font.Color := clBlack;
end;
TextOut(left, top, str);
end;
end;
-
험프리
2020.02.07 16:34
유용한 답변 감사드립니다^^
다음 글의 댓글을 참고하시기 바랍니다.
StringGrid에 출력되는 Data(제목등)이 이중(잔상?)으로 나오는데 해결책을 구합니다. - https://tech.devgear.co.kr/delphi_qna/437325
——————
답글이 도움이 되셨는지 다른 분들도 참고할 수 있도록 결과 댓글 부탁드립니다.
(결과 댓글이 없는 경우 다른 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)