Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Региональные настройки  (Прочитано 20052 раз)
0 Пользователей и 7 Гостей смотрят эту тему.
Lan
Гость
« : 09-10-2003 07:15 » 

(Один вопрос отправил, но он куда-то ушел. Повторим однако.)
Где-то шло обсуждение: как отвязаться от региональных настроек системы в своей программе (разделители в дате). Но немогу найти.
Подскажите где или как. Я шокирован!
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #1 : 09-10-2003 08:03 » 

Что сие значит...
Где отвязаться с какой целью и т.д. и т.п.
Записан

А птичку нашу прошу не обижать!!!
Lan
Гость
« Ответ #2 : 09-10-2003 08:34 » 

Поясняю!
В программе пытаюсь выполнить преобразование даты (в виде строки) в тип TDateTime. Возникает косяк. Т.к. в тексте указаны разделитель точка между годами,месяцами и днями, в настройках ОС указан разделитель (-). Я конечно ручками устаканил недоразумение, но на другой машине может случиться аналогичное явление.
Поэтому хотелось бы при запуске программы сделать локальные настройки (для своего процесса), чтобы не зависеть от ОС.
Что скажете? Я шокирован!
Записан
Lan
Гость
« Ответ #3 : 09-10-2003 08:37 » 

Добавлю, что включение строки типа:
DateSeparator:= '.';
почему-то не влияет Жаль
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #4 : 09-10-2003 09:10 » 

вообще-то, должен. как ты его юзал?

ест альтернативный вариант.

StrToDate поддерживает два варианты работы: с текущими установки форматов, и с любыми назначенными. функций, собственно, две и они являютяс перегружаемыми:
Код:
function StrToDate)const S{ string:{ TDateTime; overload;
function StrToDate)const S{ string; const FormatSettings{ TFormatSettings:{ TDateTime; overload;


нас интересует вторая. TFormatSettings описывает практически все региональные настройки. задача сводится к тому, чтобы получить их, переопределить то, что нам надо, и вызвать StrToDate во втором варианте:

Код:
procedure TForm1.FormCreate)Sender{ TObject:;
var
  fs{ TFormatSettings;
  d{ TDateTime;
begin
  GetLocaleFormatSettings )0, fs:; // LCID = 0 для текущих нстроек
  fs.DateSeparator {= 'Ы';
  d {= StrToDate )'01Ы07Ы2004', fs:;
  ShowMessage )DateToStr )d::;
end;


это абсолютно идентично следующему:

Код:
procedure TForm1.FormCreate)Sender{ TObject:;
var
  d{ TDateTime;
begin
  DateSeparator {= 'Ы';
  d {= StrToDate )'01Ы07Ы2004':;
  ShowMessage )DateToStr )d::;
end;
Записан

x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #5 : 09-10-2003 09:12 » 

з.ы. код проверен, поэтому просьба: не говори, что "ничего не работает", а приводи свой код Улыбаюсь
Записан

Lan
Гость
« Ответ #6 : 10-10-2003 02:19 » 

Привожу свой код:
Но прежде, в OC установите разделитель, например, '-'.

procedure TForm1.Button1Click(Sender: TObject);
var
  s: String;
begin
  DateSeparator:= '.';
  s:= DateToStr(date());
  s:= 'result: '+s;
end;

У меня не работает.  Так больше нельзя...
Может это ОС косячит.
Записан
_kvlasov
Гость
« Ответ #7 : 10-10-2003 05:10 » 

А может там не только сепаратор? Например, формат mm-dd-yy.
Записан
p0s0l
Гость
« Ответ #8 : 10-10-2003 06:37 » new

Из хелпа
Код:
var DateSeparator{ Char;
var ShortDateFormat{ string;
var LongDateFormat{ string;

var TimeSeparator{ Char;
var TimeAMString{ string;
var TimePMString{ string;
var ShortTimeFormat{ string;
var LongTimeFormat{ string;

var ShortMonthNames{ array[1..12( of string;
var LongMonthNames{ array[1..12( of string;

var ShortDayNames{ array[1..7( of string;
var LongDayNames{ array[1..7( of string;

var SysLocale{ TSysLocale;
var EraNames{ array[1..7( of string;
var EraYearOffsets{ array[1..7( of Integer;
var TwoDigitYearCenturyWindow{ Word = 50;


Так что настроить можно как угодно...
Записан
Lan
Гость
« Ответ #9 : 10-10-2003 07:36 » 

Я всегда в конструкторе главной формы втыкаю такой блок:

TwoDigitYearCenturyWindow:= 0;
TimeSeparator:= ':'; LongTimeFormat:= 'hh:mm:ss';
DateSeparator:= '.'; LongDateFormat:= 'yyyy.mm.dd';

И до недавнего времени с проблемой не сталкивался
А тут что-то произошло, а что не пойму.
У меня Winda ведет себя странно, поэтому есть подозрение на нее.
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #10 : 11-10-2003 01:45 » 

Цитата
procedure TForm1.Button1Click(Sender: TObject);
var
s: String;
begin
DateSeparator:= '.';
s:= DateToStr(date());
s:= 'result: '+s;
end;


Что здесь происходит? ты ставишь разделитель дат в '.'. Строке присваиваешь дату, причём преобразование происходит с учётом DateSeparator. В конечном итоге ты всегда получишь то, чтоназначил. Т. е., если DateSeapator был равен "-", - ты получишь, к примеру, "11-10-2002". В твоём коде ведь ничего неменяется. Или я чего не понимаю? Улыбаюсь
Записан

Lan
Гость
« Ответ #11 : 13-10-2003 01:30 » 

До недавнего времени так и было. Но сейчас DateSeparator:= '.'; перестал работать. Почему я не пойму. Может и раньше была эта проблема, но я в настройках ОС всегда аккуратно прописывал разделитель '.' и это скрывало проблему. Надо запустить тестовую программу на других машинах да посмотреть как там это выглядит. Короче кто-то косячит. Может Winda, может Delphяк, а может быть и ... Я шокирован!
Записан
p0s0l
Гость
« Ответ #12 : 15-10-2003 03:53 » 

Если посмотреть DateToStr, которая в свою очередь использует DateTimeToString (Result, ShortDateFormat, DateTime), то возникает вопрос:
почему же в формате ShortDateFormat yy, mm и dd отделяются ТОЧКАМИ, хотя в функции DateTimeToString точка является обычным ничего незначащим символом? А вот символ "/" заменятется на DateSeparator...
Так что заменив значение переменной ShortDateFormat на "dd/mm/yyyy" всё заработало...
Тут видимо недодумали борландовцы, неправильно сделав DateTimeToString...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines