Секреты Delphi. Отбор данных за период
Секреты Delphi. Отбор данных за период
Продолжая тему упрощения процесса создания программ, хочется поделиться с вами еще одним блоком кода, позволяющим выбирать требуемый временной период.
Для этого создадим новую модальную форму frmPeriod (желательно типа TfrmModal (КГ №32)). Добавим два элемента TDateTimePicker для выбора даты и TactionList, в котором создадим события (см. пример кода). Модуль bs_lib.pas можно скачать по адресу: http://bs_elbis.at.tut.by/downloads/bs_lib.zip .
Berdachuk@tochka.by
Продолжая тему упрощения процесса создания программ, хочется поделиться с вами еще одним блоком кода, позволяющим выбирать требуемый временной период.
Для этого создадим новую модальную форму frmPeriod (желательно типа TfrmModal (КГ №32)). Добавим два элемента TDateTimePicker для выбора даты и TactionList, в котором создадим события (см. пример кода). Модуль bs_lib.pas можно скачать по адресу: http://bs_elbis.at.tut.by/downloads/bs_lib.zip .
uses dmuImages, BS_LIB, DateUtil, StrUtils; // Функция формирования диалогового окна выбора пе риода данных. True — если сделан выбор aPeriodFrom — начало, и aPeriodTo — конец периода function Ch angePeriod(var aPeriodFrom, aPeriodTo:TDateTime):boolean; var oldShortDateFormat, oldLongDateFor-mat : String; oldDateSeparator:Char; begin oldShortDateFormat:=ShortDateFormat; oldLongDateFormat:=Long DateFormat; oldDateSeparator:=DateSeparator; ShortDateFormat:='DD/MM/YYYY'; LongDateFormat:='DD/MM/Y YYY'; DateSeparator:='/'; try if Not Assigned(frmPeriod) then frmPeriod:=TfrmPeriod.Create (Applicat ion); frmPeriod.dePeriodFrom.DateTime:= aPeriodFrom; frmPeriod.dePeriodTo.DateTime:= aPeriodTo; if f rmPeriod.ShowModal=mrOk then begin aPeriodFrom:=CutTime(frmPeriod. dePeriodFrom.DateTime); aPeriodTo :=CutTime(frmPeriod. dePeriodTo.DateTime); Result:=True; end else Result:=False; finally ShortDateFo rmat:=oldShortDateFormat; LongDateFormat:=oldLongDateFormat; DateSeparator:=oldDateSeparator; FreeAn dNil(frmPeriod); end; end; //Обработка нажатия кнопки OK procedure TfrmPeriod.bbtnApplyClick (Sender : TObject); var errorStatus:boolean; begin errorStatus:=False; if frmPeriod.dePeriodFrom.DateTime &g t; frmPeriod.dePeriodTo.DateTime then begin errorStatus:=True; frmPeriod.dePeriodFrom.Date Time:=frm Period.dePeriodTo.DateTime; end; if Not(errorStatus) then ModalResult:=mrOk else begin Application.P rocessMessages; frmPeriod.SetFocus; end; end; //Нажатие кнопки "текущий день" procedure Tf rmPeriod.actTodayFilter Execute(Sender: TObject); begin frmPeriod.dePeriodFrom.DateTime:= CutTime(No w); frmPeriod.dePeriodTo.DateTime:= CutTime(Now); end; //Нажатие кнопки "текущий месяц" pr ocedure TfrmPeriod.actMonthFilter Execute(Sender: TObject); begin frmPeriod.dePeriodFrom.DateTime:= BS_FirstDayCurMonth; frmPeriod.dePeriodTo.DateTime:= BS_LastDayCurMonth; end; //Нажатие кнопки " ;сброс периода отбора" procedure TfrmPeriod.actFullPeriod FilterExecute(Sender: TObject); begin frmPeriod.dePeriodFrom.DateTime:=0; frmPeriod.dePeriodTo.DateTime:= BS_LastDayCurMonth; end; //Нажа тие кнопки "предыдущий месяц" procedure TfrmPeriod.actPrevMonthExe-cute(Sender: TObject); begin frmPeriod.dePeriodFrom.DateTime:=BS_ FirstDay(IncMonth(frmPeriod.dePeriodTo. DateTime,-1)); fr mPeriod.dePeriodTo.DateTime:=BS_ Last Day(frmPeriod.dePeriodFrom.DateTime); end; //Нажатие кнопки &q uot;следующий месяц" procedure TfrmPeriod.actNextMonth Execute(Sender: TObject); begin frmPerio d.dePeriodFrom.DateTime:=BS_ FirstDay(IncMonth(frmPeriod.dePeriodTo. DateTime,1)); frmPeriod.dePerio dTo.DateTime:=BS_ LastDay(frmPeriod.dePeriodFrom.DateTime); end;Окончательным штрихом будет панель кнопок TtoolBar с привязанным к ней набором картинок компоненты TImageList. Добавим в эту панель пять кнопок для быстрого выбора заданных интервалов и кнопку подтверждения btnOk. Пример возможного дизайна диалога выбора показан на рисунке. Пример вызова данной функции достаточно тривиален:
procedure TfrmPayDoc.actPayDocSetPeriodExecute(Sender: TObject); begin if ChangePeriod(gPeriod From,gPeriod To) then begin cdsPayDoc.Close; cdsPayDoc.Params[0].Value:=gPe-riodFrom; cdsPayDoc.Para ms[1].Value:=gPe-riodTo; cdsPayDoc.Open; Self.Caption:='Платежные документы' + BS_GetBetweenDateCapt ionStr (gPeriodFrom,gPeriodTo); end; end;
Сергей Бердачук,
Berdachuk@tochka.by
Компьютерная газета. Статья была опубликована в номере 44 за 2003 год в рубрике программирование :: delphi