FMX 的 Canvas 的功能就不说了,但你注意到了吗?Canvas.TextWidth 等函数返回的大小,如果你当真,那你就会发现现实和理想差的太远了。你需要通过控件的 Scene.GetSceneScale 来获得一个缩放比,与原始的进行缩放后,才是放到屏幕上的实际大小。
一个简单的例子,我们计算一个Label上文字的显示区域大小:
var R: TRectF; AScale: Single; begin R := TRectF.Create(0, 0, MaxInt, MaxInt); Label1.Canvas.MeasureText(R,Label1.Text,Label1.WordWrap,[],Label1.TextAlign,TTextAlign.Leading); AScale := Label1.Scene.GetSceneScale; R.Right := R.Right * AScale; R.Bottom := R.Bottom * AScale; ShowMessage('Label1.Text.Width='+FloatToStr(R.Right)+'x'+FloatToStr(R.Bottom)); end;
上面的 R.Right 和 R.Bottom 需要乘上 AScale 才是真正的物理像素大小。
0 条评论
沙发空缺中,还不快抢~