странности с DecimalSeparator

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

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

странности с DecimalSeparator

Сообщение serge#LVL » 23.08.2016 16:49:22

Всем добрый день!

На intuit в курсе "Программирование на Lazarus" приводится функция для проверки ввода вещественных чисел. Я только заменил в ней DecimalSeaparator на DefaultFormatSettings.DecimalSeparator.
Цифры, знак, bechspace, десятичный разделитель - разрешаются, остальные символы - подавляются. При вводе разделителя ',' или '.' производится замена на разделитель DecimalSeaparator.
Код: Выделить всё
{проверка правильности символа в вещественном числе}
function TrueFloatKeys(key:char; str:string): char;
begin
  //сначала укажем, что возвращается тот же символ, что ввел пользователь:
  Result:= key;
  //далее делаем проверку на правильность символа. если символ не правильный,
  //мы его запретим:
  case key of
    //все числа разрешаем:
    '0'..'9': ;
    //backspace разрешаем:
    #8: ;
    //если разделителя еще нет - выводим правильный разделитель,
    //иначе ничего не выводим
    '.' , ',' : if Pos(DefaultFormatSettings.DecimalSeparator, str)= 0 then
                  Result:=DefaultFormatSettings.DecimalSeparator
                else Result := #0;
    //разрешаем минус при условии, что минус - первый символ в строке:
    '-': if Length(str) = 0 then Result:= key
         else Result:= #0; //если минус не первый, запрещаем
  //все остальные символы запрещаем:
  else Result:= #0;
  end; //case
end;

Проблема в том, что не выполняется эта замена. Если скомпилировать проект под Виндовз - все работает нормально, а под linux mint Rosa x64 - не работает.
Код: Выделить всё
'.' , ',' : if Pos(DefaultFormatSettings.DecimalSeparator, str)= 0 then
                  Result:=DefaultFormatSettings.DecimalSeparator
                else Result := #0;

Если ввести вначале '.' , то else Result := #0; выполняется. Но, если вначале ввести ',' , то Result:=DefaultFormatSettings.DecimalSeparator не выполняет замены на '.' . В результате в TEdit (функция вставляется в OnKeyPress) получается ввести строку, состоящую из множества запятых ',,,,,,,,,,'

В чем причина такого поведения?
serge#LVL
новенький
 
Сообщения: 13
Зарегистрирован: 19.08.2016 13:17:36

Вернуться в Lazarus

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

Сейчас этот форум просматривают: Google [Bot] и гости: 106

Рейтинг@Mail.ru
cron