Распечатать страницу

Использование Ole-календаря в Microsoft VFP

« Назад

Создаваемый на базе класса MSComCtl2.MonthView.2 Ole-календарь, позволяющий выбирать дату, рассмотрен в разд. 2.5.4.3.

Воспользуемся теперь классом MSComCtl2.DTPicker.2, чтобы выбирать из календаря дату и иметь возможность устанавливать время, а затем употреблять их по назначению.

На этот раз создадим форму d:\DateAndTime.scx, содержащую 2 OLE-объекта и 2 кнопки (рис. 3.8).

70.1.-OLE-дата-и-время

Рис. 3.8. OLE-дата и время

Для добавления нужного элемента управления ActiveX Control (OleControl) на панели инструментов Form Controls выбирается иконка , а затем в процессе вставки элемента управления в форму в появившемся списке (рис. 3.9) разыскивается строчка Microsoft Date and Time Picker Control (SP4).

70.2.-Добавление-OLE-элемента-управления

Рис. 3.9. Добавление OLE-элемента управления

Второй элемент добавим, копируя первый. Оба элемента после вставки имеют заданные по умолчанию свойства (рис. 3.10) (окно свойств открывается при выборе пункта DTPicker Properties меню, появляющегося после нажатия на правую кнопку мыши, позиционированной на элементе).

70.3.-Заданные-по-умолчанию-свойства-DTPicker

Рис. 3.10. Заданные по умолчанию свойства DTPicker

Значение свойства Name OLE-объектов установим соответственно равными OleControlDate и OleControlTime.

Свойство Format имеет значение dtpShortDate, то есть элемент отображает дату в коротком формате. Оставим это свойство неизменным для левого элемента (OleControlDate), а для правого (OleControlTime) установим значение свойства равным dtpTime, то есть приспособим элемент для отображения и задания времени.

После добавления 2-х кнопок, регулировки размеров объектов и формы и изменения свойства Caption формы и кнопок получим приведенную на рис. 3.8 форму. При воздействии на отображающую дату поле OleControlDate открывается имеющийся на рис. 2.21 календарь; поле OleControlTime устроено в виде счетчика, позволяющего, увеличить или уменьшить значение (с единичным шагом) выбранной части времени.

Обе кнопки имеют обработчиков события Click. Обработчик этого события кнопки "Дата и время" отображает в WAIT-окне выбранные дату и время.

&& Обработчик события Click кнопки "Дата и время"

&&

&& Формирует и отображает дату и время, используя значения свойств

&& Year, Month, Day, Hour, Minute и Second элемента управления DTPicker

with ThisForm

                                            nYear = .OlecontrolDate.Year

                                            nMonth = .OlecontrolDate.Month

                                            nDay = .OlecontrolDate.Day

                                            nHour = .OlecontrolTime.Hour

                                            nMinute = .OlecontrolTime.Minute

                                            nSecond = .OlecontrolTime.Second

endWith

selectedDateTime = DateTime(nYear, nMonth, nDay, nHour, nMinute, nSecond)

&& Отображаем дату и время

wait selectedDateTime window

 

&& Обработчик события Click кнопки "Закрыть"

&&

ThisForm.Release               && Закрываем форму

Кроме того, обработчик события Init формы устанавливает свойства объектов OleControlDate и OleControlTime таким образом, что они отвечают началу текущего месяца и времени 8:00:00 (по умолчанию при открытии формы устанавливаются системные дата и время).

&& Обработчик события Init формы

&&

&& Устанавливает свойства объектов OleControlDate и OleControlTime

currentDate = Date( )

&&

with ThisForm

                                            && Свойства объекта OleControlDate

                                            .OlecontrolDate.Year = Year(currentDate)

                                            .OlecontrolDate.Month = Month(currentDate)

                                            .OlecontrolDate.Day = 1

                                            &&

                                            && Свойства объекта OleControlTime

                                            .OlecontrolTime.Hour = 8

                                            .OlecontrolTime.Minute = 0

                                            .OlecontrolTime.Second = 0

endWith