Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VisualFoxPro.doc
Скачиваний:
15
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

2.5.4.3. Ввод даты

Кнопка , находящаяся справа от поля InputDate рассматриваемой формы, а точнее обработчик события Click этой кнопки открывает форму Ole-календаря, приспособленного для выбора даты (рис. 2.21).

Рис. 2.21. Выбор даты в Ole-календаре

При открытии календаря в нем устанавливается либо значение InputDate.Value, либо текущая дата, если это значение пустое. Выбранная в календаре дата возвращается передаваемым по ссылке параметром selectedDate и устанавливается в качестве значения свойства Value поля InputDate формы AuthorEdit.

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

&&

local selectedDate

do (appPath + 'Prgs\OleCalendar') with ThisForm.InputDate.Value, selectedDate

if not Empty(selectedDate) then

ThisForm.InputDate.Value = selectedDate

endif

В файле OleCalendar.prg создается форма, в которую добавлены объект oCln класса OleCalendar и две кнопки – "Дата" и "Закрыть".

Класс OleCalendar строится на базе класса OleControl, имя которого содержит свойство OleClass. Выбранная дата фиксируется тремя свойствами объекта oCln – Year, Month и Day, возвращающими соответственно год, месяц и день выбранной даты.

parameters InDate, selectedDate

&&

clndForm = CreateObject("CalendarForm")

&&

SetProp(clndForm) && Устанавливаем свойства объектов

&&

clndForm.Show(1) && Показываем форму календаря модально

&& Устанавливает свойства формы и ее элементов управления

&&

procedure SetProp(clndForm)

with clndForm

.Autocenter = .T.

.oShowDate.Left = clndForm.oCln.Width + 10

.oClose.Left = .oShowDate.Left

.oClose.Top = .oShowDate.Top + 32

.Width = .oShowDate.Left + .oShowDate.Width + 10

.Height = .oCln.Height + 10

if not Empty(InDate) then

with .oCln

.Year = Year(InDate)

.Month = Month(InDate)

.Day = Day(InDate)

endWith

endif

endWith

endProc

define class CalendarForm as Form

&& Календарь

Caption = "Выбор даты"

add object oCln as OleCalendar

&& Кнопки "Дата" и "Закрыть"

add object oShowDate as cmdShowDate

add object oClose as cmdClose

endDefine

define class OleCalendar as OleControl

&& Определяем значение свойства OleClass

OleClass = "MSComCtl2.MonthView.2"

&& Размеры календаря

Height = 200

Width = 200

endDefine

&& Определяем 2 класса для задания кнопок

define class cmdShowDate as CommandButton

Caption = "Выбрать"

Width = 84

Height = 27

Top = 10

&&

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

&& Year, Month и Day объекта oCln класса OleCalendar

procedure Click

with ThisForm.oCln

selectedDate = Date(.Year, .Month, .Day)

endWith

ThisForm.Release

endProc

endDefine

define class cmdClose as CommandButton

Caption = "Отказ"

Width = 84

Height = 27

procedure Click

ThisForm.Release

endProc

endDefine

Замечания:

  1. OLE-календарь позволяет выбрать из списка месяц, если ударить мышкой по названию месяца, и установить иной год, пользуясь счетчиком, появляющимся после удара мышью по номеру года.

  2. Вопросы, связанные с выбором времени, обсуждаются в разд. 3.9.10.

Форму календаря можно открыть немодально:

clndForm.Show(0) && Показываем форму календаря немодально

read events && Начинаем обработку событий

Тогда в определение класса CalendarForm следует добавить обработчик события Unload:

procedure Unload

clear events && Завершаем обработку событий

endProc

При этом не нужно забывать, что может быть активной только одна команда READ EVENTS.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]