我有Delphi 10 Seattle版本23.0.22248.5795。我使用以下代码snipet
ARectF := TRectF.Create(0,0,0,0);
ABitmap.Canvas.Stroke.Kind := TBrushKind.bkSolid;
ABitmap.Canvas.StrokeThickness := 1;
ABitmap.Canvas.Fill.Color := TAlphaColors.Red;
ABitmap.Canvas.Font.Size := 18;
ABitmap.Canvas.Font.Family:='Arial';
ABitmap.Canvas.Font.Style:=[TFontStyle.fsbold];
ABitmap.Canvas.MeasureText(ARectF, Text, False, [], TTextAlign.Leading);
ARectF := TRectF.Create(0, 0, 50, 20); //<---- needed to show, but not correct width!
ARectF.TranslateTo(BottomLeftPt);
if ABitmap.Canvas.BeginScene then try
DrawFilledRect(ABitmap, ARectF, BackgroundColor, BorderColor, 1, TBrushKind.Solid, 0, 0);
ARectF.Left := ARectF.Left + 2;
ABitmap.Canvas.FillText(ARectF, Text, False, 100, [], TTextAlign.Leading);
finally
ABitmap.Canvas.EndScene;
end;
当我调用MeasureText函数时,它不会传回带有显示文本所需的TRectF的ARectF。所以我必须手动设置ARectF才能看到任何东西。请注意,我将其设置为0,0,50,20。我希望能够删除此行,但没有它,屏幕上只显示一个点。
我试过跟踪Delphi代码,它似乎涉及布局,我还没有使用过。我刚刚从VCL转换到FMX,我正在尝试移植代码。我还没有弄清楚布局是如何工作的。坦率地说,我只是想在屏幕上绘制文字。
MeasureText()的文档似乎表明ARectF是输出变量。我误解了这个功能的目的吗?如果是这样,我应该如何正确地知道文本矩形应该用于处理可变长度的输入?
任何人都可以帮我弄清楚为什么MeasureText没有正确地为我设置ARectF?
答案 0 :(得分:1)
MeasureText将ArectF
参数视为要放置文本的矩形,考虑边界矩形的大小和文本对齐以及其他设置。返回的ARectF := TRectF.Create(0,0,200,100);
包含将在其中呈现文本的实际边界矩形。
例如:
ARectF的输入值
Left: 0
Top: 39.7
Right: 44.0
Bottom: 60.3
你的例子中的其他参数
返回值是(由我舍入)
chmod
由于TTextAlign.Leading而在左侧水平。
由于TTextAlign.Centered
而垂直位于中心文档有些含糊不清。