問題:使用 Canvas.DrawPath 繪製時,最後一點無法畫到終點位置。(這個問題要在粗線才能察覺) 適用:Delphi 10 Seattle (或更早的版本) for Android & iOS 修複方法: 請將源碼 FMX.StrokeBuilder.pas 複製到自己的工程目錄里,再進行 ...
問題:使用 Canvas.DrawPath 繪製時,最後一點無法畫到終點位置。(這個問題要在粗線才能察覺)
適用:Delphi 10 Seattle (或更早的版本) for Android & iOS
修複方法:
請將源碼 FMX.StrokeBuilder.pas 複製到自己的工程目錄里,再進行修改。
procedure TStrokeBuilder.BuildSolidPolygon(const Points: TPolygon; const Opacity: Single; BreakAtEnd: Boolean); ...略... while CurIndex < Length(Points) do begin if (CurIndex >= Length(Points) - 1) and BreakAtEnd and (Points[0] <> Points[Length(Points) - 1]) then {--->刪除這行 Break;} {+++>新增代碼} // 修複曲線最後一點斷線的問題 by Aone (2016/03/25) begin PieceDirVec := (DestPos - SrcPos).Normalize; ThickPerp := TPointF.Create(-PieceDirVec.Y, PieceDirVec.X) * FHalfThickness; InsertVertex(DestPos - ThickPerp, FStrokeColor); InsertVertex(DestPos + ThickPerp, FStrokeColor); if PrevVerticesPlaced then begin InsertIndex(FCurrentVertex - 3); InsertIndex(FCurrentVertex - 1); InsertIndex(FCurrentVertex - 2); InsertIndex(FCurrentVertex - 2); InsertIndex(FCurrentVertex - 4); InsertIndex(FCurrentVertex - 3); end; Break; end; {<+++} ...略... end;
效果: