Registriert seit: 21. Mär 2012
Ort: Hannover
950 Beiträge
Delphi 10.4 Sydney
|
AW: FMX.Graphics.TCanvas.FillText drehen
3. Sep 2025, 17:54
Ich nutze bei mir die folgende Funktion, dürfte dem oben kommunizierten entsprechen:
Delphi-Quellcode:
class procedure TDrawUtils.drawRotatedText(Canvas: TCanvas; x,y,xw,angle: Single; color: TAlphaColor; HTextAlign, VTextAlign: TTextAlign; const S: String);
var
W: Single;
H: Single;
R: TRectF;
SaveMatrix: TMatrix;
Matrix: TMatrix;
begin
W := Canvas.TextWidth(S);
H := Canvas.TextHeight(S);
r:=RectF(x,y,x+w,y+h);
if (angle=270) then
x:=x+((xw-(h*0.25))*0.5);
case HTextAlign of
TTextAlign.Center: R.Left := -W / 2;
TTextAlign.Leading: R.Left := 0;
TTextAlign.Trailing: R.Left := -W;
end;
R.Width := W;
case VTextAlign of
TTextAlign.Center: R.Top := -H / 2;
TTextAlign.Leading: R.Top := 0;
TTextAlign.Trailing: R.Top := -H;
end;
R.Height := H;
SaveMatrix:=Canvas.matrix;
matrix:=TMatrix.CreateRotation(DegToRad(angle));
matrix.m31:=x;
matrix.m32:=y;
Canvas.MultiplyMatrix(matrix);
Canvas.Stroke.Color := color;
Canvas.Fill.Color := color;
Canvas.Stroke.Kind := TBrushKind.Solid;
Canvas.Stroke.Thickness := 1;
Canvas.FillText(R, S, False, 1, [], HTextAlign, VTextAlign);
Canvas.SetMatrix(SaveMatrix);
end;
|
|
Zitat
|