#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;