История переиздания | ||
---|---|---|
Издание 1.0 | 2003.11.11 |
Завершим тему автоматизации выбора данных за заданный период функцией, которая формирует диалоговое окно, позволяющее выбрать данные за определенный месяц.
Для этого создадим новую модальную форму, наследующую форму TfrmModal (см. статью "Работа с модальными формами"). Добавим фрейм с кнопками «Готово» и «Отмена» (см. статью "Работа с фреймами"). Выбор требуемого месяца будем осуществлять при помощи компонента TComboBox. В дизайнере свойства Items, построчно добавим в список все 12 месяцев года. Составляющую года удобно выбирать при помощи компоненты TRxSpinEdit, которая содержит две кнопки, позволяющие менять год при помощи мыши. Пример возможного дизайна диалогового окна показан на рисунке.
Рисунок 1. Диалог выбора месяца и года
Код созданной функции:
//Функция фозвращает true при подтверждении выбора месяца
//При этом в aFirstDay возвращается 1-е число выбранного месяца
function SelectMonth(var aFirstDay: TDateTime):boolean;
var
fYear, fMonth, fDay: Word;
begin
result:=false;
try
DecodeDate(aFirstDay, fYear, fMonth, fDay);
if Not Assigned(frmSelectMonth) then
Application.CreateForm(TfrmSelectMonth,frmSelectMonth);
frmSelectMonth.cbMonthFromList.ItemIndex:=fMonth - 1;
frmSelectMonth.spedtYearFrom.Value:= fYear;
frmSelectMonth.ShowModal;
if frmSelectMonth.ModalResult=mrOk then
begin
fMonth:=frmSelectMonth.cbMonthFromList.ItemIndex+1;
fYear:=frmSelectMonth.spedtYearFrom.AsInteger;
aFirstDay:=EncodeDate(fYear, fMonth, 1);
result:=true;
end
else
result:=false;
finally
FreeAndNil(frmSelectMonth);
end;
end;
Пример вызова созданной функции:
gPeriodFrom:=Now; if SelectMonth(gPeriodFrom) then dmReports.CreateWareMovementReport(gPeriodFrom);
При успешном подтверждении выбора, функция возвращает 1-е число месяца типа TDateTime. Извлечь составляющие месяца и года не составляет труда при помощи функции DecodeDate и привести к требуемому формату.
Скачать модуль bs_lib