Юзер хочет продвинутое форматирование чисел

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Юзер хочет продвинутое форматирование чисел

Сообщение Climber » 27.09.2010 14:59:04

Ну то есть не совсем странного, но тем не менее.
Предыстория. Нужно поле доя ввода чисел с плавающей точкой. Я долго лазил по форумам и пришел к выводу, что 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;
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Юзер хочет продвинутое форматирование чисел

Сообщение Vadim » 27.09.2010 15:20:58

На вкладке RTTI есть ещё один элемент типа MaskEdit. Его не пробовали?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Юзер хочет продвинутое форматирование чисел

Сообщение Nik » 27.09.2010 15:27:50

Во вложении мой компонент CurrencuEdit. Наследуется от обычного TEdit, фильтрует ввод, умеет возвращать числовое значение через свойство Value (нет нужны в использовании CurrToStr и StrToCurr). Если немного поколдовать, пробелы можно легко добавить.

Если подойдёт - пользуйтесь :)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Юзер хочет продвинутое форматирование чисел

Сообщение GrayEddy » 27.09.2010 15:34:32

GrayEddy
постоялец
 
Сообщения: 375
Зарегистрирован: 06.05.2005 09:37:56

Re: Юзер хочет продвинутое форматирование чисел

Сообщение Climber » 27.09.2010 15:46:48

Vadim писал(а):На вкладке RTTI есть ещё один элемент типа MaskEdit. Его не пробовали?

Нет, не пробовал пока. А вообще, что там за компоненты на этой вкладке?

Добавлено спустя 46 секунд:
Nik
GrayEddy
Спасибо, попробую оба, но чуть позже.
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Юзер хочет продвинутое форматирование чисел

Сообщение Vadim » 27.09.2010 17:13:51

Climber писал(а):А вообще, что там за компоненты на этой вкладке?

Тоже никогда не пользовался. :) Судя по описанию, они должны подключаться к каким-нибудь стандартным компонентам, published свойствам, и получать run-time информацию.

Кстати, в наборе компонентов RXFPC алекса тоже есть компонент CurrencyEdit, кгде можно задать маску.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Юзер хочет продвинутое форматирование чисел

Сообщение alexkam » 01.10.2010 09:19:46

Как в CurrencyEdit выровнять текст по правому краю при вводе значения?
alexkam
постоялец
 
Сообщения: 152
Зарегистрирован: 07.09.2009 20:03:59

Re: Юзер хочет продвинутое форматирование чисел

Сообщение Climber » 01.10.2010 10:38:01

alexkamЯ пока этот компонент не смотрел, но если это наследник от TCustomEdit, то так же, как и везде - с помощью Aligment...
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

Рейтинг@Mail.ru