修改代码令TMS组件库的THTMLLabel控件支持中文换行
最近使用THTMLLabel控件时候发现,如果文本中包含中文的时候,该控件不能很好的换行。该控件也没有WordWrap属性,查看源代码后发现如下情况:
1,WordWrap=Not Ellipsis;
该控件虽然没有WordWrap属性,但实际上Ellipsis属性的设置值影响着WordWrap行为。
如果Ellipsis为True则超出部分显示为...但并不换行。
如果Ellipsis为False则超出部分换行显示,问题就出在英文可以换行,中文不行。
2,SpacePos := Pos(' ',s);
继续跟踪发现在htmllengo.pas 600行附近有上面的代码,也就是说自动换行是依赖与空格,再英文习惯中,单词是不能换行的。而中文语句中很少有空格,所以换行失败。
修改方法(htmllengo.pas 600行附近):
//原始代码注视掉了 //if WordWrap then begin // SpacePos := Pos(',',s) //end else // SpacePos := 0; //替换为如下代码 if WordWrap then begin if s='' then SpacePos:=0 else begin if Ord(s[1])<127 then SpacePos := Pos(' ',s) else SpacePos:=1; end; end else SpacePos:=0;
注:控件版本号不同,源代码可能也不尽相同,仅供参考。我使用的版本是:TMS Pack.v5.2.4.1