자답입니다.
구글검색으로 찾았습니다. 글자뿐 아니라 배경도 다시 그려줘야 되는군요.
C/C++케이스인데 델파이 케이스로 전환하여 처리하니 됩니다.
검색참조
손인호 님이 쓰신 글 :
: 안녕하세요?
:
: 델파이 5 사용하다가 XE5버전으로 바꾸었습니다.
:
: 5버전에서 스트링그리드 셀내의 중앙정렬을 위해서 onDrawCell을 이용하여 문제없이 사용했습니다.
: XE5에서 같은 코드를 사용했는데 문제가 좀 있습니다. 분명 중앙정렬은 됐는데 기존 좌정렬된 글자가 사라지지않고 남아서 글자가 겹쳐 보입니다.
: 리프레쉬를 해도 없어지지 않네요. 혹시 원인을 아시면 한수 부탁 드립니다.
:
: 코드는 다음과 같습니다.
:
: procedure TfrmMagam.sgMemoDrawCell(Sender: TObject; ACol, ARow: Integer;
: Rect: TRect; State: TGridDrawState);
: var
: Oldalign : word ;
: X : integer ;
: row, col : integer;
: tmpNum : Double;
: begin
: with (Sender As TStringgrid).Canvas do begin
: row := ARow;
: col := ACol;
:
: if ((row=0) or ((row<>0) and ((col=0) or (col = 1) or (col = 3)))) then begin
: Oldalign :=SetTextAlign(sgMemo.Canvas.Handle,ta_Center) ;
: X := (Rect.Right+Rect.Left) div 2;
: sgMemo.Canvas.TextRect(Rect,X,Rect.Top + 4, Trim(sgMemo.Cells[Col,row]));
: SetTextAlign(sgMemo.Canvas.Handle, OldAlign);
: end
: else if (col=2) and (row > 0) then begin
: Oldalign :=SetTextAlign(sgMemo.Canvas.Handle,ta_Left) ;
: sgMemo.Canvas.TextRect(Rect, Rect.Left + 7, Rect.Top + 4,
: Trim(sgMemo.Cells[Col,row]));
: SetTextAlign(sgMemo.Canvas.Handle, OldAlign);
: end
: else begin
: { if Trim(sgMemo.Cells[Col, Row]) <> '' then begin
: tmpNum := StrToFloat(sgMemo.Cells[Col, Row]);
: tmpNum := (Trunc(tmpNum*100))/100;
: sgMemo.Cells[Col, Row] := FloatToStr(tmpNum);
: end;
: Oldalign :=SetTextAlign(sgMemo.Canvas.Handle,ta_Right) ;
: sgMemo.Canvas.TextRect(Rect, Rect.Right - 4, Rect.Top + 4,
: Trim(sgMemo.Cells[Col,row]));
: SetTextAlign(sgMemo.Canvas.Handle, OldAlign);
: }
: end;
:
: end; //with
: end;
: