Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

разделитель дробной части [D7, 95/98, 2000, XP]


zorik ©   (2008-05-20 17:56:00) 

Как узнать разделитель дробной части в Win95, 2000, XP
DecimalSeparator всегда возвращает точку


zorik   (2008-05-22 10:28:00) [1]


> tormoz   (21.05.08 10:47) [13]

спасибо


tormoz   (2008-05-21 10:47:00) [2]

var tRg: TRegistry;
begin
 tRg := TRegistry.Create;
 tRg.RootKey := HKEY_CURRENT_USER;
 if tRg.OpenKey('\Control Panel\International',False) then
   begin
     Result := tRg.ReadString('sDecimal');
     tRg.CloseKey;
   end;
 tRg.Free;
end;


zorik   (2008-05-21 09:00:00) [3]

спасибо, если есть баги, то осталяю так как есть все.


Юрий Зотов   (2008-05-20 22:42:00) [4]

> zorik ©   (20.05.08 22:24) [10]

Если не менял, то DecimalSeparator должен возвращать системную установку для текущего юзера. И оффис должен брать ее же - то есть, теоретически проблем быть не должно.

Но в русском оффисе 2003 я однажды напоролся на баг локализации - там жестко прописана запятая (по крайней мере, в значениях межстрочных интервалов). Раз так, то возможно, что этот баг не единственный.


zorik   (2008-05-20 22:24:00) [5]

Переменную не менял. Да Office русский


Anatoly Podgoretsky   (2008-05-20 21:09:00) [6]

> Юрий Зотов  (20.05.2008 19:02:05)  [5]

Это не потокобезопасная переменная, глобальное и есть некоторое количество кривых компонент, да и советы типа измени переменную DecimalSeparator.
С данной переменной Борланд уже давно не рекомендует работать и у него уже есть потокобезопасные методы.
Значение надо считывать в локальную переменную функциями АПИ сразу перед использованием и ни секундой раньше.


Юрий Зотов   (2008-05-20 19:10:00) [7]

> Reindeer Moss Eater ©   (20.05.08 19:06) [7]

А, тогда не новость. Но хочется надеяться, что автор эту переменную не менял.

> zorik

Или менял?


Reindeer Moss Eater   (2008-05-20 19:06:00) [8]

Это же просто паблик переменная, которую можно изменить и сделать так, что бы изменения региональных настрокек системы во время работы приложения не меняли её значение.


Юрий Зотов   (2008-05-20 19:03:00) [9]

> zorik

Office русский?


Юрий Зотов   (2008-05-20 19:02:00) [10]

> Reindeer Moss Eater ©   (20.05.08 18:07) [2]

Хм... для меня это новость, чес-слово. А можно подробнее?


zorik   (2008-05-20 18:10:00) [11]

но это не дело так оставлять ((


zorik   (2008-05-20 18:08:00) [12]

В региональных установках точно зяпятая.
Дело в том, что я делаю экспорт в ексель. Форматирую число свойством Range.NumberFormat := '0.000'-- записал и посмотрел в макросе.
Так вот если в системе стоит точка. то все нормально, а если запятая, то непонятно как он себя ведет. Макрос показывает что надо Range.NumberFormat := '0.000'. При таком раскладе первая область нормально заполняется, а остальные надо Range.NumberFormat := '0,000', т.е. через зяпятую.
Пока выкрутился так:

ANumber1 := '0.000';
ANumber2 := '0,000';
for i := 0 to Count - 1 do
 try
   Range[i].NumberFormat := ANumber1;
 except
   try
     Range[i].NumberFormat := ANumber2;
   except
     on E:Exception do
       raise Exception.Create(E.Message);
   end;
 end;

У меня офис 2007, на 2003 такая же ситуация


Reindeer Moss Eater   (2008-05-20 18:07:00) [13]

DecimalSeparator может возвращать точку, в то время как в системе текущий сеанс имеет разделителем запятую.
или наоборот.


Юрий Зотов   (2008-05-20 18:00:00) [14]

Значит, в региональных настройках системы точка и установлена. Это от версии системы не зависит.


Наверх

Титульная страница Поиск, карта сайта Написать письмо