首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RichEdit忽略了不间断空格

RichEdit忽略了不间断空格
EN

Stack Overflow用户
提问于 2021-03-22 05:36:36
回答 1查看 104关注 0票数 2

我尝试将包含不间断空格(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组件的一般限制?

EN

回答 1

Stack Overflow用户

发布于 2021-03-27 00:29:26

我发现实现这一点的最好方法是使用一个过程,该过程将不换行符替换为隐藏字符:

代码语言:javascript
复制
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;

然后您可以像这样使用它:

代码语言:javascript
复制
  AddLine('Some text some text some text 1000' + #160 + 'km some text');

这将停止没有“1000”的“km”包装。

我在示例中使用了小写的“o”,避免使用下划线或连字符等,因为它们是换行时会断开的字符。

我的解决方案可以很好地显示文本,但如果您要对其执行某些操作,则可能需要删除所有隐藏字符。

如果突出显示文本,隐藏的字符也会显示出来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66737821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档