FMX 的 Shape 现在不是很全,至少我想找一个圆环时没找到,所以自己用代码实现了一个,供大家参考:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
procedure AddRing(AData: TPathData; const ACenter: TPointF; R1, R2, AStartAngle, ASweepAngle: Single); var A, CA, SA, AEndAngle: Single; begin A := AStartAngle * PI / 180; SA := sin(A); CA := cos(A); AData.MoveTo(PointF(ACenter.X + R1 * CA, ACenter.Y + R1 * SA)); AData.AddArc(ACenter, PointF(R1, R1), AStartAngle, ASweepAngle); AData.MoveTo(PointF(ACenter.X + R1 * CA, ACenter.Y + R1 * SA)); AData.LineTo(PointF(ACenter.X + R2 * CA, ACenter.Y + R2 * SA)); AData.AddArc(ACenter, PointF(R2, R2), AStartAngle, ASweepAngle); A := (AStartAngle + ASweepAngle) * PI / 180; SA := sin(A); CA := cos(A); AData.LineTo(PointF(ACenter.X + R1 * CA, ACenter.Y + R1 * SA)); end; |
函数的参数说明: AData : 用来保存圆环路径信息 ACenter:中心点坐标 R1:内环半径 R2:外环半径 AStartAngle:环的起始