Mr.Smart писал(а):krab
А вы не думаете, что в гриде заголовок тоже является ячейкой, которую необходимо тоже рисовать самому
Не пойму: почему текст ячеек выводится самим Lazarus'ом, а заголовки нужно выводить принудительно? См. комментарии (if aRow = 0 then // если это ...) в коде:
- Код: Выделить всё
procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
aRect: TRect; aState: TGridDrawState);
var
twidth, count: integer;
xRect: TRect;
begin
with StringGrid1 do
begin
Canvas.TextStyle.SingleLine := False;
Canvas.TextStyle.Wordbreak := True;
if aRow = 0 then // если это заголовок колонки, ширину текста берем из массива заголовков
twidth := Canvas.GetTextWidth(StringGrid1.Columns.Items[aCol].Title.Caption)
else // иначе из массива ячеек
twidth := Canvas.GetTextWidth(StringGrid1.Cells[1,aRow]);
count := round(twidth / (Canvas.Width*0.8) + 0.5);
StringGrid1.RowHeights[aRow] := count*Canvas.TextHeight('W')*2;
if aRow = 0 then // если это заголовок колонки, нужно вывести его принудительно,
// а если это ячейка, ее текст выведется сам
Canvas.TextRect(aRect, aRect.Left, aRect.Top, StringGrid1.Columns.Items[aCol].Title.Caption);
end;
end;