修复 XE8 Win 平台 Firemonkey Memo 卷动后会重叠的问题

问题:XE8 Firemonkey 在 Windows 平台 Memo 卷动时,在第 1 , 2 行会产生重叠现象。

更新:XE8 update 1 已经修复这个问题,无需再使用下面方法。

修改前:

修改后:

 

适用:XE8 for Windows 平台

修复方法:

请将源码 FMX.Memo.Style.pas 复制到自己的工程目录里,再进行修改。

找到 TStyledMemo.TLines.RenderLayouts; 函数,修改如下:

procedure TStyledMemo.TLines.RenderLayouts;

..... 省略 ......

      if Line.Rect.IntersectsWith(Content) then
      begin
        if Line.Layout = nil then
        begin
          Layout := CreateLayout(FMemo.Model.Lines[I]);
          Size := TSizeF.Create(Max(1, Layout.Width), Layout.Height);
          HeightChanged := not SameValue(Line.Size.Height, Size.Height, TEpsilon.Position);
          ContentBoundsUpdated := ContentBoundsUpdated or (Line.Size <> Size);
          Line.Size := Size;

{+++> 修复 Memo 卷动后会重叠的问题, by 龟山阿卍}
          if (Line.Rect.Top < 0) then
             Line.Rect := TRectF.Create(-ViewPosition.X, -ViewPosition.Y, -ViewPosition.X + Line.Size.Width, Line.Size.Height)
          else
{<+++}

          Line.Rect := TRectF.Create(-ViewPosition.X, 0, -ViewPosition.X + Line.Size.Width, Line.Size.Height);
          if (I > 0) then
            Line.Rect.Offset(0, FLines[I - 1].Rect.Bottom);

..... 省略 ......

end;

参考图:

 

posted @ 2015-04-08 05:24  龟山Aone  阅读(882)  评论(0编辑  收藏  举报