Странное поведение DecimalSeparator

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Ответить
yozh
новенький
Сообщения: 25
Зарегистрирован: 01.04.2006 16:17:05

Сообщение yozh »

В Delphi у меня DecimalSeparator и прочие переменные такого типа брались из локали. Т.е. винда немецкая, и DecimalSeparator=','. В Lazarus под linux я почему-то получаю DecimalSeparator='.', хотя LC_NUMERIC=de_DE. Это как понимать? Как вообще выставляется DecimalSeparator по дефолту? Или я сам принудительно должен её менять?
Janus
постоялец
Сообщения: 134
Зарегистрирован: 07.11.2005 16:06:49

Сообщение Janus »

Ну сам видишь, что он меняется от системы к системе, так что лучше бы самому выставлять. Такие вещи вообще лучше самому делать, т.к. никогда не угадаешь...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Из беглого взгляда в исходники следует, что для Linux просто вообще отсутствует код инициализации DecimalSeparator по системной локали. В Windows, OS/2 и EMX таковой код присутствует...
yozh
новенький
Сообщения: 25
Зарегистрирован: 01.04.2006 16:17:05

Сообщение yozh »

Да, я уже понял, пришлось писать:

Код: Выделить всё

  {$IFDEF LINUX}
  S:=Application.EnvironmentVariable['LC_NUMERIC'];
  if (Pos('de',LowerCase(S))<>0) then begin ThousandSeparator:='.'; DecimalSeparator:=','; end;
  if (Pos('ru',LowerCase(S))<>0) then begin ThousandSeparator:='.'; DecimalSeparator:=','; end;
  if (Pos('en',LowerCase(S))<>0) then begin ThousandSeparator:=','; DecimalSeparator:='.'; end;
  {$ENDIF}


:))

Они, похоже, в первую очередь двигают виндовую версию.
yozh
новенький
Сообщения: 25
Зарегистрирован: 01.04.2006 16:17:05

Сообщение yozh »

Кстати, а нажатие ENTER на TStringGrid только в линуксе НЕ генерит KeyPress или в windows тоже? А то я гляжу - в Delphi работало, в лазаре перестало. Начал разбираться и наткнулся. Пришлось переделывать на OnKeyUp, там-то Key=13 распознаётся.
Ответить