Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi Firemonkey MeasureText未按预期工作_Delphi_Firemonkey - Fatal编程技术网

Delphi Firemonkey MeasureText未按预期工作

Delphi Firemonkey MeasureText未按预期工作,delphi,firemonkey,Delphi,Firemonkey,我有Delphi10西雅图版本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; ABi

我有Delphi10西雅图版本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;
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)// MeasureText将
ARectF
参数视为要将文本放置到其中的矩形,并考虑到边界矩形的大小、文本对齐和其他设置。返回的
ArectF
包含文本将呈现到其中的实际边框

例如:

ARectF的输入值

ARectF := TRectF.Create(0,0,200,100);
其他参数如示例中所示

返回值为(由我取整)

由于TTEXTALLIGN.Leading,左侧水平

由于TTEXTALLIGN.Centered,垂直位于中心


文档有点模棱两可。

文档中说:“如果未初始化ARect,则返回的矩形以(0,0)为中心。”您考虑过这一点吗?我还没有尝试过,但是您可能应该使用宽度0来初始化它,文本将在其中写入(并且,如果必要,将进行包装)。高度可能会相应调整。@RudyVelthuis谢谢您的回复。我不太明白你在说什么。你说用一个宽度来初始化它,文本将被写入其中。但我认为这样做的目的是告诉我宽度应该是多少。例如,如果我想写“Hello”,那么宽度将不同于我想写“Hello World”。只要矩形的中心为0,0,就可以了,我将整个内容转换到我希望它在屏幕上的位置。我只是想找出文本宽度。看起来我应该使用TCanvas.TextWidth(text);你写的听起来是真的。我只希望文档能更有用:-)
Left: 0
Top: 39.7
Right: 44.0
Bottom: 60.3