使用 Canvas.DrawPath 绘制时,最后一点无法画到终点位置。
适用:Delphi 10 Seattle (或更早的版本) for Android & iOS
修复方法:
请将源码 FMX.StrokeBuilder.pas复制到自己的工程目录里,再进行修改。
TStrokeBuilder.BuildSolidPolygon( Points: TPolygon; ...略...
<span style="color: #0000ff;">while CurIndex < Length(Points) <span style="color: #0000ff;">do
<span style="color: #0000ff;">begin
<span style="color: #0000ff;">if (CurIndex >= Length(Points) - <span style="color: #800080;">1) <span style="color: #0000ff;">and BreakAtEnd <span style="color: #0000ff;">and (Points[<span style="color: #800080;">0] <> Points[Length(Points) - <span style="color: #800080;">1]) <span style="color: #0000ff;">then
<span style="color: #008000;">{<span style="color: #008000;">--->删除这行 Break;<span style="color: #008000;">}
<span style="color: #008000;">{<span style="color: #008000;">+++>新增代码<span style="color: #008000;">}
<span style="color: #008000;">//<span style="color: #008000;"> 修复曲线最后一点断线的问题 by Aone (2016/03/25)
<span style="color: #0000ff;">begin<span style="color: #000000;">
PieceDirVec := (DestPos -<span style="color: #000000;"> SrcPos).Normalize;
ThickPerp := TPointF.<span style="color: #0000ff;">Create(-PieceDirVec.Y,PieceDirVec.X) *<span style="color: #000000;"> FHalfThickness;
<span style="color: #0000ff;">begin
<span style="color: #0000ff;">if (CurIndex >= Length(Points) - <span style="color: #800080;">1) <span style="color: #0000ff;">and BreakAtEnd <span style="color: #0000ff;">and (Points[<span style="color: #800080;">0] <> Points[Length(Points) - <span style="color: #800080;">1]) <span style="color: #0000ff;">then
<span style="color: #008000;">{<span style="color: #008000;">--->删除这行 Break;<span style="color: #008000;">}
<span style="color: #008000;">{<span style="color: #008000;">+++>新增代码<span style="color: #008000;">}
<span style="color: #008000;">//<span style="color: #008000;"> 修复曲线最后一点断线的问题 by Aone (2016/03/25)
<span style="color: #0000ff;">begin<span style="color: #000000;">
PieceDirVec := (DestPos -<span style="color: #000000;"> SrcPos).Normalize;
ThickPerp := TPointF.<span style="color: #0000ff;">Create(-PieceDirVec.Y,PieceDirVec.X) *<span style="color: #000000;"> FHalfThickness;
InsertVertex(DestPos </span>-<span style="color: #000000;"> ThickPerp,FStrokeColor);
InsertVertex(DestPos </span>+<span style="color: #000000;"> ThickPerp,FStrokeColor);
</span><span style="color: #0000ff;">if</span> PrevVerticesPlaced <span style="color: #0000ff;">then</span>
<span style="color: #0000ff;">begin</span><span style="color: #000000;">
InsertIndex(FCurrentVertex </span>- <span style="color: #800080;">3</span><span style="color: #000000;">);
InsertIndex(FCurrentVertex </span>- <span style="color: #800080;">1</span><span style="color: #000000;">);
InsertIndex(FCurrentVertex </span>- <span style="color: #800080;">2</span><span style="color: #000000;">);
InsertIndex(FCurrentVertex </span>- <span style="color: #800080;">2</span><span style="color: #000000;">);
InsertIndex(FCurrentVertex </span>- <span style="color: #800080;">4</span><span style="color: #000000;">);
InsertIndex(FCurrentVertex </span>- <span style="color: #800080;">3</span><span style="color: #000000;">);
</span><span style="color: #0000ff;">end</span><span style="color: #000000;">;
Break;
</span><span style="color: #0000ff;">end</span><span style="color: #000000;">;
<span style="color: #008000;">{<span style="color: #008000;"><+++<span style="color: #008000;">}<span style="color: #000000;">
...略...
<span style="color: #0000ff;">end;
效果:
RSP-14309: [iOS & Android] Delphi 10.1 Berlin - drawing problems