我使用TRichEdit编辑文本。我打开了WordWrap,它自动将文本包装在控件的边缘,这样就没有滚动条了。 RichEdit宽度设置为适合80列。
只要您在单词之间偶尔有空格,WordWrap就可以很好地模拟这种行为。但是,如果你有一个非常loooooooooooooooooong字RichEdit包装将自动打破它,WordWrap将不会!
如果我现在想要访问这些包裹的行,我可以通过RichEdit.Lines.Text
获取它,这将自动将CRLF放在第80列。如果我使用RichEdit.Text,我会得到没有适合WordWrap的CRLF的原始文本。
在我已经尝试过的自定义函数中执行任务并不简单,这不是一个小函数,但可能有办法使用TRichEdit的包装函数吗?我有一个创建隐藏的RichEdit的想法,但这种任务似乎很愚蠢,因为我必须计算它的宽度只是为了做文字包装 - 我认为这是毫无意义的。
问题 - 是否有一种方法可以强制WordWrap删除无法包装的长词?因此,如果一个单词长度为170个字符,那么它将被包装成3行80 + 80 + 10,但在填充上一行和后续行之前还会处理单词?
答案 0 :(得分:0)
尝试使用此尺寸:
procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char);
const
MAX_LENGTH = 80;
var
nLineCount: integer;
sCurrentLine: string;
begin
for nLineCount := 0 to RichEdit1.Lines.Count - 1 do
begin
// no space in this line
if (pos(' ',RichEdit1.Lines.Strings[nLineCount]) = 0) then
begin
if (length(RichEdit1.Lines.Strings[nLineCount]) > MAX_LENGTH) then
begin
// hold the whole line
sCurrentLine := RichEdit1.Lines.Strings[nLineCount];
// the current line, make the max value
RichEdit1.Lines.Strings[nLineCount] := copy(sCurrentLine,1,MAX_LENGTH);
// build the next line
RichEdit1.Lines.Add(
copy(sCurrentLine,MAX_LENGTH + 1,1));
end;
end;
end;
end;