我想在TStringGrid中加载一些文本。除了字符串超过100K的列外,字符串很短。似乎TStringGrid无法处理这个问题。在双击单元格进行编辑之前,文本不会出现在单元格中。但即便如此,这种行为也是不稳定的。
要重现:在表单上放置一个网格,设置goEdit = true。运行该应用程序并双击一个单元格。粘贴一些文本(不应包含输入)并按Enter键结束编辑。文字消失了。
在我的文字中,限制大约为6208个ASCII字符 对此有任何快速解决方法/解决方法吗?
答案 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;