![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
разделитель дробной части [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]Значит, в региональных настройках системы точка и установлена. Это от версии системы не зависит.