在Delphi中为WideString实现WrapText

7

Delphi has a WrapText function:

function WrapText(const Line, BreakStr: string; const BreakChars: TSysCharSet; MaxCol: Integer): string;
function WrapText(const Line: string; MaxCol: Integer): string;

现在我需要一个处理WideStrings的版本:
function WrapTextW(const Line: WideString; MaxCol: Integer): WideString;

有没有已经写好的这样的函数?

警告:并非每个宽字符都是2字节

这就是我不敢写它的原因

更新:一个需要多于2字节来表示的字符示例:

带环和西德符号的大写拉丁字母W

  • 字节:57 00 66 03 27 03
  • 在Chrome 17中呈现:enter image description here
  • 在Internet Explorer 9中呈现:enter image description here
  • 在记事本中使用Segoe UI字体呈现:enter image description here
  • 在记事本中使用Consolas字体呈现:enter image description here
  • 在您的浏览器中使用无衬线字体呈现:W̧̊
  • 在您的浏览器中使用等宽字体呈现:W̧̊

2
这可能会导致从Delphi 2009复制源代码作为答案。无论如何+1。 - TLama
5
这就是为什么我标记它为 Delphi 的最后一个没有更好的 widestring 支持的版本(为了不让 David 找麻烦!) - Ian Boyd
4
Tnt组件套件在TntSysUtils.pas中具有WideWrapText - kobik
3
我有一个梦想,希望有一天醒来时,我的D5怪兽应用程序可以像魔法般地自动转换成XE2... :/ - kobik
1
因此,W + cedilla + ring 代表一个字形,而不是一个字符。 - kobik
显示剩余8条评论
1个回答

3

正如kobik所提到的,TNT UnicodeControls有一个名为TntSysUtils的单元,其中包括以下函数:

function WideWrapText(const Line, BreakStr: WideString; const BreakChars: TSysCharSet;
  MaxCol: Integer): WideString; overload;
function WideWrapText(const Line: WideString; MaxCol: Integer): WideString; overload;

备用下载站点在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接