修改代码令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

posted @ 2010-01-27 17:54  庄园  阅读(1124)  评论(0编辑  收藏  举报