Модератор: Модераторы
with StringGrid1.Canvas do begin
TextStyle.SingleLine := FALSE;
TextStyle.Wordbreak := TRUE;
TextRect (aRect, aRect.Left, aRect.Top, 'Сьешь'#13' ещё этих мягких французских булок');
end;
yurgel писал(а):з.ы. только не забудьте выосту и ширину строк в TStringGrid увеличить
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.ColWidths[2] := 200;
StringGrid1.RowHeights[2] := 100;
end;
krab писал(а):Нет ли способа установить ее разной, в зависимости от значения ячейки?
yurgel писал(а):можно установить разную высоту для разных строк, или разную ширину для разных столбцов.
yurgel писал(а):
Canvas.TextHeight
Canvas.TextWidth
Mr.Smart писал(а):
- Код: Выделить всё
Canvas.TextHeight
Canvas.TextWidth
Mr.Smart писал(а):
- Код: Выделить всё
Canvas.TextHeight
Canvas.TextWidth
yurgel писал(а):так ведь она зависит от выбранного шрифта. а если шрифт не моноширинный - то и от самой строки, 'iiiii' и 'wwwww' - в пикселях будут разной длины. можно узнать, влезет ли заданная строка в ячейку, если не влезет - обрезать.
// длина содержимого текстовой строки в пикселах
twidth := GetTextWidth(StringGrid1.Cells[1,aRow]);
// сколько строк займет содержимое: делим его ширину на ширину канвы
count := round(twidth / (Canvas.Width*0.8) + 0.5);
StringGrid1.RowHeights[aRow] := count*2*GetTextHeight(StringGrid1.Cells[1,aRow]);
Canvas.TextWidth('W')*count
Mr.Smart писал(а):krab
Берите символ максимального размера и перемножайте на количество
- Код: Выделить всё
Canvas.TextWidth('W')*count
// длина содержимого текстовой строки в пикселах
twidth := GetTextWidth(StringGrid1.Cells[1,aRow]);
// сколько строк займет содержимое: делим его ширину на ширину канвы
count := round(twidth / (Canvas.Width*0.8) + 0.5);
StringGrid1.RowHeights[aRow] := Canvas.TextHeight('W')*count*2; // <---- изменения здесь
StringGrid1.RowHeights[aRow] := Canvas.TextWidth('W')*count*2;
// вставка многострочного текста в ячейки
procedure TForm1.Button1Click(Sender: TObject);
begin
with StringGrid1 do
begin
RowCount := RowCount + 1;
StringGrid1.Cells[0,RowCount - 1] := 'A'#13'AAAA';
StringGrid1.Cells[1,RowCount - 1] := 'B'#13'BBBB';
StringGrid1.Cells[2,RowCount - 1] := 'C'#13'CCCC';
end;
end;
//
procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
aRect: TRect; aState: TGridDrawState);
var
twidth, count: integer;
begin
if aRow <> 0 then // если эту строку закомментировать,
// ... то заголовки колонок не будут отображаться вообще
with StringGrid1 do
begin
Canvas.TextStyle.SingleLine := False;
Canvas.TextStyle.Wordbreak := True;
twidth := Canvas.GetTextWidth(StringGrid1.Cells[1,aRow]);
count := round(twidth / (Canvas.Width*0.8) + 0.5);
//if count > 1 then
begin
StringGrid1.RowHeights[aRow] := count*Canvas.TextHeight('W')*2;
end;
end;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 242