我在做一个项目
TEdit
控件显示任意数值,格式为特定的度量单位,因此它也具有任意后缀。此编辑控件的宽度是固定的(但是可以根据重新调整UI的大小而更改),我需要确保显示的任何数字都能合理地适应此控件,而不会溢出到视图之外。
把它想象成在计算器屏幕上安装一个数学答案,因为这就是我正在做的。
function FormattedValue(const ANum: Double; const ASuffix: String;
const AWidth: Integer; const DC: HDC): String;
begin
Result:= FormatFloat('#,###,###,##0.######', ANum) + ASuffix;
//TODO: How to enforce result to always fit within AWidth pixels?
//DC = canvas handle of the control where text will be displayed
end;
但是,我完全不知道如何格式化它以适应它
AWidth
约束,这将是
TEdit.ClientWidth
. 我发现了
FloatToStrF
,我相信这是需要的,但即使这样也与可用的显示区域无关。
到目前为止,我看到的唯一方法是加载与画布相关联的字体,迭代所有可能的字符,寻找尽可能宽的字符。然后,看看在给定的宽度内最大字符可以容纳多少倍。然后,使用
浮动至TRF
在必要时使用科学记数法时,我如何做到这一点?