Предыстория. Нужно поле доя ввода чисел с плавающей точкой. Я долго лазил по форумам и пришел к выводу, что MaskEdit для этого не подходит. Но можно сделать простенький обработчик OnKeyPress и разрешить нажимать числа, точку (в количестве одной шт.) и backspace.
История.
Показал одному юзеру, ему вроде нравится, но он хочет, чтобы при вводе число сразу само форматировалось (т. е. группы разрядов по 3 отделялись пробелами). Пока рабочая версия форматирует по событию OnExit, а в процессе ввода числа идут без форматирования. Отформатировать не проблема с помощью FloatToStrF, а вот обратная функция TryStrToFloat не умеет (или это я не умею?) определять пробелы в форматированной строке (или что там за символ?). Плюс к этому прибавляется проблема управлением курсором в случаях, когда из-за форматирования меняется число символов в поле для ввода.
Как-то можно такое сделать?
Добавлено спустя 4 минуты 58 секунд:
- Код: Выделить всё
function FloatFromString(str: string): extended;
{ Преобразование форматированнй строки вида "123 456 789,00" с пробелами в число }
var tempstr, astr: ansistring;
i: longint;
begin
astr:=UTF8ToSys(str);
for i:=1 to length(astr) do
if astr[i] <> ' ' then
tempstr:=tempstr + astr[i];
if not TryStrToFloat(tempstr, Result) then
Result:=0;
end;
Форматирую так:
procedure TForm1.Edit1Change(Sender: TObject);
begin
Edit1.Text:=SysToUTF8(FloatToStrF(FloatFromString(Edit1.Text), ffNumber, 15, 2));
end;