Ввод даты в Microsoft Visual FoxPro
« Назад Кнопка , находящаяся справа от поля 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 endProc endDefine Замечания: 1. OLE-календарь позволяет выбрать из списка месяц, если ударить мышкой по названию месяца, и установить иной год, пользуясь счетчиком, появляющимся после удара мышью по номеру года. 2. Вопросы, связанные с выбором времени, обсуждаются в разд. 3.9.10. Форму календаря можно открыть немодально: clndForm.Show(0) && Показываем форму календаря немодально read events && Начинаем обработку событий Тогда в определение класса CalendarForm следует добавить обработчик события Unload: procedure Unload clear events && Завершаем обработку событий endProc При этом не нужно забывать, что может быть активной только одна команда READ EVENTS. |