Мир программирования

 


Найти: на:


Меню
Партнеры
Счетчики
Реклама

100 компонентов общего назначения Delphi 5

3.4.3. Ввод и отображение дат и времени - компоненты DateTimePicker, MonthCalendar, Calendar


Примеры компонентов ввода и отображение дат и времени приведены на рис. 3.13.

Рис. 3.13
Примеры компонентов отображения дат и времени

Из этих компонентов наиболее удобным является DateTimePicker (на рис. 3.13, слева вверху показан этот компонент в режиме ввода времени, а ниже — в двух вариантах режима ввода даты). Компонент очень эффектен за счет появления выпадающего календаря (иногда даже слишком эффектен для строго оформленного приложения) и обеспечивает безошибочный с точки зрения синтаксиса ввод дат и времени. Его свойство Kind определяет режим работы компонента: dtkDate — ввод даты, dtkTime — ввод времени.

При вводе дат можно задать свойство DateMode равным dmComboBox — наличие выпадающего календаря, или равным dmUpDown — наличие кнопок увеличения и уменьшения (см. средний компонент DateTimePicker на рис. 3.13), напоминающих те, которые используются в описанных ранее компонентах UpDown и SpinEdit . Только в данном случае пользователь может независимо устанавливать с помощью кнопок число, месяц и год. Формат представления дат определяется свойством DateFormat , которое может принимать значения dfShort — краткий формат (например, 01.12.99), или dfLong — полный формат (например, 1 декабря 1999 г.).

Значение даты по умолчанию можно задать в Инспекторе Объектов через свойство Date . Это же свойство читается для определения заданной пользователем даты. При чтении Date надо учитывать тип этого свойства — TDateTime , представляющий собой число с плавающей запятой, целая часть которого содержит число дней, отсчитанное от некоторого начала календаря, а дробная часть равна части 24-часового дня, т.е. характеризует время и не относится к дате. Для 32-разрядных версий Delphi за начало календаря принята дата 12/30/1899 00 часов. В Delphi 1 за начало отсчета принят год 1, т.е. для перевода даты Delphi 1 в дату последующих версий Delphi надо вычесть из даты число 693594.

Для преобразования значения свойства Date в строку можно воспользоваться функцией DateToStr . Например, оператор Memol.Lines.Add('Дата: ' + DateToStr (DateTimePicker1.Date)); добавит в окно Memo1 строку вида «Дата: 01.12.98».

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

В режиме ввода времени dtkTime введенное пользователем значение можно найти в свойстве Time , тип которого — тот же рассмотренный выше TDateTime . Преобразовать время в строку можно функцией TimeToStr .

Компонент MonthCalendar похож на компонент DateTimePicker , работающий в режиме ввода дат. Правда, в компоненте MonthCalendar предусмотрены некоторые дополнительные возможности: можно допустить множественный выбор дат в некотором диапазоне (свойство MultiSelect ), можно указывать в календаре номера недель с начала года (свойство WeekNumbers ), перестраивать календарь, задавая первый день каждой недели (свойство FirstDayOfWeek ) и т.п. Для некоторых офисных приложений все это достаточно удобно.

Компонент Calendar представляет собой менее красочный и более обыденно оформленный календарь на один месяц. Вместо свойства Date в нем предусмотрены отдельные свойства Year -год, Month — месяц, Day — день. Все это целые числа, с которыми иногда удобнее иметь дело, чем с типом TDateTime . Перед отображением на экране или в процессе проектирования надо задать значения Month и Year , чтобы компонент отобразил календарь на указанный месяц указанного года. Впрочем, если вам надо иметь календарь на текущий месяц, надо установить в true значение свойства UseCurrentDate (установлено по умолчанию). В этом случае по умолчанию будет показан календарь на текущий месяц с выделенным в нем текущим днем. Свойство StartOfWeek задает день, с которого начинается неделя. По умолчанию задано 0 — воскресенье, как это принято в западных календарях. Но для нас все-таки как-то привычнее начинать неделю с рабочего дня — понедельника. Так что желательно задать StartOfWeek = 1 .

Опрос

Конкурсы
Реклама

 

Web дизайн: Бурлаков Михаил    

Web программирование: Бурлаков Михаил

Используются технологии uCoz