我尝试将包含不间断空格(Unicode U+00A0)的文本添加到具有属性Wordwrap = True的RichEdit中。我使用以下代码:
RichEdit.Lines.Add('Some text some text some text 1000' + #160 + 'km some text');
这给出了一个介于'1000‘和'km’之间的空格,但它不是不间断的:当改变RichEdit的宽度时,这里可能会出现换行,就像常规空格一样。我用的是Windows10 2004版。
是我做错了什么,还是这是RichEdit组件的一般限制?
发布于 2021-03-27 00:29:26
我发现实现这一点的最好方法是使用一个过程,该过程将不换行符替换为隐藏字符:
procedure TForm1.AddLine(txt : string);
var
OrigColour : TColor;
p : integer;
begin
p := Pos(#160, txt);
if p > 0 then
begin
OrigColour := RichEdit1.Font.Color;
RichEdit1.SelText := Copy(txt, 0, p-1);
RichEdit1.SelAttributes.Color := RichEdit1.Color;
RichEdit1.SelText := 'o';
RichEdit1.SelAttributes.Color := OrigColour;
RichEdit1.SelText := Copy(txt, p+1, Length(txt) - (p)) + #13;
end
else
RichEdit1.Lines.Add(txt);
end;然后您可以像这样使用它:
AddLine('Some text some text some text 1000' + #160 + 'km some text');这将停止没有“1000”的“km”包装。
我在示例中使用了小写的“o”,避免使用下划线或连字符等,因为它们是换行时会断开的字符。
我的解决方案可以很好地显示文本,但如果您要对其执行某些操作,则可能需要删除所有隐藏字符。
如果突出显示文本,隐藏的字符也会显示出来。
https://stackoverflow.com/questions/66737821
复制相似问题