안녕하세요?
델파이 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;
|