Delphi :计算一个列应该有多大,才不会被截断

91zkwejq  于 2023-05-17  发布在  其他
关注(0)|答案(2)|浏览(137)

我想在 Delphi 中创建一个StringGrid。但是如果字符串太长,字符串就会被切断:

我想看到整个字符串。String的长度可以改变,因为用户可以自己在StringGrid中输入文本,所以我不能只将ColWidths设置为某个整数。
有没有办法调整列中最大字符串的ColWidths

m3eecexj

m3eecexj1#

您可以使用StringGrid的画布通过调用TextWidth来计算每个单元格中字符串所需的宽度。
这里有一个快速的示例来演示。为了简单起见,我用代码来完成所有的事情--StringGrid是在表单的OnCreate中设置的,当然这只是为了演示的目的。要运行下面的示例,请创建一个新的VCL Forms应用程序,在表单上放置TStringGrid,然后添加下面的代码。我已经设置了它,这样您就可以通过将列的索引传递给函数CalcColumnWidth来在任何列上使用它。const Padding用于在列的右侧添加空间-将其调整为适合您需要的任何值。
如果用户可以编辑单元格的内容,那么在编辑后只需调用CalcColumnWidth函数来重新计算列宽。

procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.FixedRows := 0;
  StringGrid1.FixedCols := 0;
  StringGrid1.ColCount := 2;
  StringGrid1.RowCount := 4;
  StringGrid1.ColCount := 2;
  StringGrid1.Cells[0, 0] := '1';
  StringGrid1.Cells[1, 0] := 'Some text here';
  StringGrid1.Cells[0, 1] := '2';
  StringGrid1.Cells[1, 1] := 'Some other text here';
  StringGrid1.Cells[0, 2] := '3';
  StringGrid1.Cells[1, 2] := 'A  longer string goes here';
  StringGrid1.Cells[0, 3] := '4';
  StringGrid1.Cells[1, 3] := 'Shortest';
  CalcColumnWidth(1);
end;

procedure TForm1.CalcColumnWidth(const WhichCol: Integer);
var
  i, Temp, Longest: Integer;
const
  Padding = 20;
begin
  Longest := StringGrid1.Canvas.TextWidth(StringGrid1.Cells[WhichCol, 0]);
  for i := 1 to StringGrid1.RowCount - 1 do
  begin
    Temp := StringGrid1.Canvas.TextWidth(StringGrid1.Cells[WhichCol, i]);
    if Temp > Longest then
      Longest := Temp;
  end;
  StringGrid1.ColWidths[WhichCol] := Longest + Padding;
end;

ctehm74n

ctehm74n2#

我喜欢上面的代码流是一般的更新

procedure CalcGridColumnWidth(var StringGrid:TStringGrid;const WhichCol: Integer);
var
  i, Temp, Longest: Integer;
const
  Padding = 20;
begin
  Longest := StringGrid.Canvas.TextWidth(StringGrid.Cells[WhichCol, 0]);
  for i := 1 to StringGrid.RowCount - 1 do
  begin
    Temp := StringGrid.Canvas.TextWidth(StringGrid.Cells[WhichCol, i]);
    if Temp > Longest then
      Longest := Temp;
  end;
  StringGrid.ColWidths[WhichCol] := Longest + Padding;
end;

相关问题