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

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

修改前:

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

修改后:

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

适用: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(, 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 < ) then
Line.Rect := TRectF.Create(-ViewPosition.X, -ViewPosition.Y, -ViewPosition.X + Line.Size.Width, Line.Size.Height)
else
{<+++} Line.Rect := TRectF.Create(-ViewPosition.X, , -ViewPosition.X + Line.Size.Width, Line.Size.Height);
if (I > ) then
Line.Rect.Offset(, FLines[I - ].Rect.Bottom); ..... 省略 ...... end;

参考图:

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

04-19 13:51