При включенном DefaultDrawing
текст уже будет отображаться, если вы введете OnDrawCell
.
Поскольку вы вычисляете необходимую высоту строки в рисовании, используя DT_CALCRECT
из DrawText
, вам нужно будет вычислить Rect
, который должен быть заполнен/очищен с помощью FillRect
.
Вы можете использовать UnionRect
, чтобы получить окончательный Rect, который должен быть заполнен (FillRect
в пример).
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[1,1] := 'Hallo'#13'World';
StringGrid1.Cells[2,2] := 'اهای' +13# + 'جهان';
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
S:String;
drawrect,Fillrect : TRect;
begin
s := (Sender as TStringGrid).Cells[ACol, ARow];
drawrect := Rect;
DrawText((Sender as TStringGrid).Canvas.handle, Pchar(s), Length(s),
drawrect, DT_CALCRECT or DT_WORDBREAK or DT_LEFT);
if (drawrect.bottom - drawrect.Top) > (Sender as TStringGrid)
.RowHeights[ARow] then (Sender as TStringGrid)
.RowHeights[ARow] := (drawrect.bottom - drawrect.Top);
UnionRect(FillRect,Rect,DrawRect);
(Sender as TStringGrid).Canvas.FillRect(FillRect);
DrawText((Sender as TStringGrid).Canvas.handle, Pchar(s), Length(s),
drawrect, DT_WORDBREAK or DT_LEFT);
end;
person
bummi
schedule
21.07.2013
(Sender as TStringGrid) .Canvas.FillRect(Rect);
в качестве первой процедуры, у вас должна была быть проблема, поскольку с включенным DefaultDrawing' следующий уже будет нарисован в сетке. - person bummi   schedule 21.07.2013