Есть ли способ отформатировать TNumberBox.text?

#delphi #format #firemonkey

#delphi #форматировать #firemonkey

Вопрос:

Я хочу, чтобы отображаемый текст в TNumberBox был отформатирован, например. при значении = 0 показывать ‘ноль’, показывая разделитель тысяч и т.д.

Есть ли способ сделать это?

Комментарии:

1. Если вы хотите пользовательское форматирование, вам нужно будет написать что-нибудь самостоятельно. TNumberBox это примитивный элемент управления с несколькими опциями. Это незначительное дополнение к TCustomEditBox — взгляните, как это реализовано в FMX framework. Я бы предложил создать свой собственный таким же образом, реализовав ваше пользовательское форматирование в ConvertTextToValue и ConvertToText методах нового потомка TEditBoxModel .

Ответ №1:

Вы можете сделать это в OnPaint() событии следующим образом:

 procedure TForm14.NumberBox1Paint(Sender: TObject; Canvas: TCanvas;
  const ARect: TRectF);
var
  nb: TNumberBox;
  rf: TRectF;
  tx: string;
begin
  nb := Sender as TNumberBox;

  if nb.Value = 0 then
    tx := 'zero'
  else
    tx := format('%.0n',[nb.Value]);

  rf := ARect;
  Canvas.ClearRect(ARect, TAlphaColors.Lightpink);
  rf.inflate(-4, -2);
  Canvas.Fill.Color := TAlphaColors.Black;

  Canvas.FillText(rf, tx, False, 1, [], TTextAlign.Leading, TTextAlign.Center);
end;