TStringGrid无法显示很长(6K)的字符串

时间:2015-06-01 13:17:15

标签: delphi delphi-xe7

我想在TStringGrid中加载一些文本。除了字符串超过100K的列外,字符串很短。似乎TStringGrid无法处理这个问题。在双击单元格进行编辑之前,文本不会出现在单元格中。但即便如此,这种行为也是不稳定的。

要重现:在表单上放置一个网格,设置goEdit = true。运行该应用程序并双击一个单元格。粘贴一些文本(不应包含输入)并按Enter键结束编辑。文字消失了。

在我的文字中,限制大约为6208个ASCII字符 对此有任何快速解决方法/解决方法吗?

2 个答案:

答案 0 :(得分:9)

文字涂有ExtTextOut。众所周知,很长的字符串会失败。例如:ExtTextOut fails with very long strings unless lower font quality specified。据我所知,确切地知道字符串长度导致失败是很棘手的。

我建议如果你需要支持这么长的字符串,那么你可以通过实现OnDrawCell事件处理程序来自己绘制它们。不要绘制整个字符串,因为毕竟用户不能在单元格的矩形之外看到任何东西。这样,您就可以避免向ExtTextOut发送一个太长而无法处理的字符串的问题。

答案 1 :(得分:1)

你需要使用Word break。当然没有Word中断,将显示任何内容。你的文字必须包含空格。

const
  N = 16000;
var
  R: TRect;
  s: String;
  i: Integer;
begin
  R := ClientRect;
  SetLength(s, N);
  for i := 1 to N do
    if Random(10) = 0 then
      s[i] := ' '
    else
      s[i] := Char(65 + Random(26));
  Canvas.Font.Color := clBlack;

  Canvas.TextRect(R, s, [tfCenter, tfVerticalCenter, tfWordBreak]);
end;