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

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

Вывести месяц [D7, WinXP]


Страницы:   1 2

Бэтман ©   (2008-03-10 23:07:00) 

Нужно вывести месяц в строковой форме
например
Февраля
Декабря
Есть ли какая то функция для этого ?


DVM   (2008-03-12 14:38:00) [1]

я тот код из [3] писал из расчета не использовать SysUtils.


DVM   (2008-03-12 14:36:00) [2]

А понял, ты говорил про переменную LongDateFormat из SysUtils.


DVM   (2008-03-12 14:33:00) [3]


> Семеныч   (12.03.08 02:08) [17]


> Как и ожидалось, код в [3] оказался избыточным, потому что
> строку FormatString определять не нужно, ее можно взять
> уже готовую, из той самой обертки.

Где ты взял "из обертки" FormatString ?
В своем коде ты жестко задал  Format = 'ddMMMM', я же ее получил в соответствии с настройками текущего пользователя. У пользователя не обязательно должно быть 'ddMMMM'


Семеныч   (2008-03-12 08:33:00) [4]

> Германн ©   (12.03.08 02:25) [18]

А, понял. Ну да, неточно сказал. Да и хрен бы с ним. Кто хотел понять - тот понял, кто хотел не понять - да и пусть себе. Мир не рухнет.


Семеныч   (2008-03-12 08:13:00) [5]

> Германн ©   (12.03.08 02:25) [18]

Не понял. А куда же он входит?


Германн   (2008-03-12 02:25:00) [6]


> Семеныч   (12.03.08 02:08) [17]


> "родные" для VCL

Опять ты "нарываешься". Ну когда модуль SysUtils входил в VCL-Source?


Семеныч   (2008-03-12 02:08:00) [7]

> begin...end ©   (11.03.08 19:46) [14]
> Leonid Troyanovsky ©   (11.03.08 22:18) [15]

Обертка есть и найти ее несложно. Ею является модуль SysUtils (конкретно - его переменные и функции для работы с локалью). После просмотра кода стало ясно, что обертка хотя и есть, но с точки зрения сабжа имеет недостаток. Однако, заключается этот недостаток всего лишь в том, что для инициализации массива LongMonthNames используется (по понятным причинам) GetLocaleInfo, а не GetDateFormat (причем GetDateFormat можно подсмотреть в том же модуле - процедура DateTimeToString). Как и ожидалось, код в [3] оказался избыточным, потому что строку FormatString определять не нужно, ее можно взять уже готовую, из той самой обертки.

Вся исходная информация для написания следующего кода взята из модуля SysUtils (за исключением параметров GetDateFormat, которые взяты из дельфишной же справки по WinAPI). После однократного исполнения процедуры SetGenitiveMonthNames все "родные" для VCL преобразования даты в строку по длинному формату (FormatDateTime  и пр.) начинают выдавать названия месяцев в правильном падеже.

implementation

{$R *.dfm}

procedure SetGenitiveMonthNames;
const
 Format = 'ddMMMM';
 MaxLen = 11;
var
 Locale: LCID;
 ST: TSystemTime;
 Buff: packed array[1..MaxLen] of char;
 I, Len: Word;
begin
 Locale := GetThreadLocale;
 GetSystemTime(ST);
 ST.wDay := 1;
 for I := 1 to 12 do
 begin
   ST.wMonth := I;
   Len := GetDateFormat(Locale, 0, @ST, Format, @Buff[1], MaxLen);
   SetString(LongMonthNames[I], PChar(@Buff[3]), Len - 3);
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Caption := FormatDateTime(LongDateFormat, Date);
end;

initialization
 SetGenitiveMonthNames;
end.


Германн   (2008-03-12 01:08:00) [8]


> begin...end ©   (11.03.08 19:46) [14]


> Leonid Troyanovsky ©   (11.03.08 22:18) [15]

Уверен что Семеныч просто неправильно сформулировал тезис. Не
> VCL-обёртка
, а "перевод на паскаль неких сущностей из WinAPI" .


Leonid Troyanovsky   (2008-03-11 22:18:00) [9]


> begin...end ©   (11.03.08 19:46) [14]

> А можно пояснить, какая именно VCL-обёртка решает задачу
> автора?

IMHO, и не д.б. таковой, бо дельфийский метод локализации
не лежит в русле MS.

--
Regards, LVT.


begin...end   (2008-03-11 19:46:00) [10]

> Семеныч   (11.03.08 18:51) [10]

> 2. Есть ли соответствующая обертка в VCL? Наверняка да.

А можно пояснить, какая именно VCL-обёртка решает задачу автора?


clickmaker   (2008-03-11 18:59:00) [11]

чтение MSDN по GetDateFormat поможет


Семеныч   (2008-03-11 18:57:00) [12]

> {RASkov} ©   (11.03.08 18:54) [11]

Да, но частично. Только п. 1.


{RASkov}   (2008-03-11 18:54:00) [13]

> [10] Семеныч   (11.03.08 18:51)

Ну так вот в [3] - это как раз и решено вроде бы...)


Семеныч   (2008-03-11 18:51:00) [14]

Навожу мышь "туда, где часики" (точнее, на сами часики). Вижу хинт: 11 март а 2008 г.

Теперь три вопроса с ответами:
1. Кто сформировал строку с правильным падежом? Windows.
2. Есть ли соответствующая обертка в VCL? Наверняка да.
3. Сложно ли ее найти? Наверняка нет.


Amoeba   (2008-03-11 13:18:00) [15]


> KSergey ©   (11.03.08 13:04) [8]
>
> Если нужно всегда точно по-русски, то массив с вбитыми именами
> месяцев в нужном падеже. Да и все.

В QStrings так и сделано.


KSergey   (2008-03-11 13:04:00) [16]

Если нужно всегда точно по-русски, то массив с вбитыми именами месяцев в нужном падеже. Да и все.


DVM   (2008-03-11 12:22:00) [17]


> Игорь Шевченко ©   (11.03.08 00:38) [4]
> FormatDateTime не помогает ?

Там с падежами проблема. Феврал я - там не получить.


Amoeba   (2008-03-11 12:19:00) [18]

Библиотека QStrings. Раздел Функции для работы с датами.
http://www.torry.net/vcl/vcltools/text/adqstrings.zip


KilkennyCat   (2008-03-11 00:55:00) [19]

> [2] Бэтман   (10.03.08 23:18)
> То есть через case только ?


А про перечисляемые типы читали? Они обычно описываются на первой полусотни страниц книжки про Делфи.


Игорь Шевченко   (2008-03-11 00:38:00) [20]

FormatDateTime не помогает ?


Страницы:   1 2

Наверх

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