| 1 | unit ORDtTmRng;
 | 
|---|
| 2 | 
 | 
|---|
| 3 | interface
 | 
|---|
| 4 | 
 | 
|---|
| 5 | uses
 | 
|---|
| 6 |   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 | 
|---|
| 7 |   StdCtrls, ORFn, ORDtTm;
 | 
|---|
| 8 | 
 | 
|---|
| 9 | type
 | 
|---|
| 10 |   TORfrmDateRange = class(TForm)
 | 
|---|
| 11 |     lblStart: TLabel;
 | 
|---|
| 12 |     lblStop: TLabel;
 | 
|---|
| 13 |     cmdOK: TButton;
 | 
|---|
| 14 |     cmdCancel: TButton;
 | 
|---|
| 15 |     lblInstruct: TLabel;
 | 
|---|
| 16 |     procedure cmdOKClick(Sender: TObject);
 | 
|---|
| 17 |     procedure cmdCancelClick(Sender: TObject);
 | 
|---|
| 18 |     procedure FormCreate(Sender: TObject);
 | 
|---|
| 19 |     procedure FormDestroy(Sender: TObject);
 | 
|---|
| 20 |   private
 | 
|---|
| 21 |     FCalStart: TORDateBox;
 | 
|---|
| 22 |     FCalStop:  TORDateBox;
 | 
|---|
| 23 |   end;
 | 
|---|
| 24 | 
 | 
|---|
| 25 |   TORDateRangeDlg = class(TComponent)
 | 
|---|
| 26 |   private
 | 
|---|
| 27 |     FTextOfStart: string;
 | 
|---|
| 28 |     FTextOfStop: string;
 | 
|---|
| 29 |     FFMDateStart: TFMDateTime;
 | 
|---|
| 30 |     FFMDateStop: TFMDateTime;
 | 
|---|
| 31 |     FRelativeStart: string;
 | 
|---|
| 32 |     FRelativeStop: string;
 | 
|---|
| 33 |     FDateOnly: Boolean;
 | 
|---|
| 34 |     FRequireTime: Boolean;
 | 
|---|
| 35 |     FInstruction: string;
 | 
|---|
| 36 |     FLabelStart: string;
 | 
|---|
| 37 |     FLabelStop: string;
 | 
|---|
| 38 |     FFormat: string;
 | 
|---|
| 39 |     procedure SetDateOnly(Value: Boolean);
 | 
|---|
| 40 |     procedure SetFMDateStart(Value: TFMDateTime);
 | 
|---|
| 41 |     procedure SetFMDateStop(Value: TFMDateTime);
 | 
|---|
| 42 |     procedure SetTextOfStart(const Value: string);
 | 
|---|
| 43 |     procedure SetTextOfStop(const Value: string);
 | 
|---|
| 44 |     procedure SetRequireTime(Value: Boolean);
 | 
|---|
| 45 |   public
 | 
|---|
| 46 |     constructor Create(AOwner: TComponent); override;
 | 
|---|
| 47 |     function Execute: Boolean;
 | 
|---|
| 48 |     property RelativeStart: string    read FRelativeStart;
 | 
|---|
| 49 |     property RelativeStop:  string    read FRelativeStop;
 | 
|---|
| 50 |   published
 | 
|---|
| 51 |     property DateOnly:    Boolean     read FDateOnly    write SetDateOnly;
 | 
|---|
| 52 |     property FMDateStart: TFMDateTime read FFMDateStart write SetFMDateStart;
 | 
|---|
| 53 |     property FMDateStop:  TFMDateTime read FFMDateStop  write SetFMDateStop;
 | 
|---|
| 54 |     property Instruction: string      read FInstruction write FInstruction;
 | 
|---|
| 55 |     property LabelStart:  string      read FLabelStart  write FLabelStart;
 | 
|---|
| 56 |     property LabelStop:   string      read FLabelStop   write FLabelStop;
 | 
|---|
| 57 |     property RequireTime: Boolean     read FRequireTime write SetRequireTime;
 | 
|---|
| 58 |     property Format:      string      read FFormat      write FFormat;
 | 
|---|
| 59 |     property TextOfStart: string      read FTextOfStart write SetTextOfStart;
 | 
|---|
| 60 |     property TextOfStop:  string      read FTextOfStop  write SetTextOfStop;
 | 
|---|
| 61 |  end;
 | 
|---|
| 62 | 
 | 
|---|
| 63 |   procedure Register;
 | 
|---|
| 64 | 
 | 
|---|
| 65 | implementation
 | 
|---|
| 66 | 
 | 
|---|
| 67 | {$R *.DFM}
 | 
|---|
| 68 | 
 | 
|---|
| 69 | const
 | 
|---|
| 70 |   FMT_DATETIME = 'mmm d,yy@hh:nn';
 | 
|---|
| 71 |   FMT_DATEONLY = 'mmm d,yy';
 | 
|---|
| 72 | 
 | 
|---|
| 73 | { TORDateRangeDlg --------------------------------------------------------------------------- }
 | 
|---|
| 74 | 
 | 
|---|
| 75 | constructor TORDateRangeDlg.Create(AOwner: TComponent);
 | 
|---|
| 76 | begin
 | 
|---|
| 77 |   inherited Create(AOwner);
 | 
|---|
| 78 |   FInstruction := 'Enter a date range -';
 | 
|---|
| 79 |   FLabelStart  := 'Begin Date';
 | 
|---|
| 80 |   FLabelStop   := 'End Date';
 | 
|---|
| 81 |   FFormat      := FMT_DATETIME;
 | 
|---|
| 82 | end;
 | 
|---|
| 83 | 
 | 
|---|
| 84 | function TORDateRangeDlg.Execute: Boolean;
 | 
|---|
| 85 | var
 | 
|---|
| 86 |   frmDateRange: TORfrmDateRange;
 | 
|---|
| 87 | begin
 | 
|---|
| 88 |   frmDateRange := TORfrmDateRange.Create(Application);
 | 
|---|
| 89 |   try
 | 
|---|
| 90 |     with frmDateRange do
 | 
|---|
| 91 |     begin
 | 
|---|
| 92 |       FCalStart.Text        := FTextOfStart;
 | 
|---|
| 93 |       FCalStop.Text         := FTextOfStop;
 | 
|---|
| 94 |       if FFMDateStart > 0 then
 | 
|---|
| 95 |       begin
 | 
|---|
| 96 |         FCalStart.FMDateTime := FFMDateStart;
 | 
|---|
| 97 |         FCalStart.Text := FormatFMDateTime(FFormat, FFMDateStart);
 | 
|---|
| 98 |       end;
 | 
|---|
| 99 |       if FFMDateStop > 0 then
 | 
|---|
| 100 |       begin
 | 
|---|
| 101 |         FCalStop.FMDateTime := FFMDateStop;
 | 
|---|
| 102 |         FCalStop.Text := FormatFMDateTime(FFormat, FFMDateStop);
 | 
|---|
| 103 |       end;
 | 
|---|
| 104 |       FCalStart.DateOnly    := FDateOnly;
 | 
|---|
| 105 |       FCalStop.DateOnly     := FDateOnly;
 | 
|---|
| 106 |       FCalStart.RequireTime := FRequireTime;
 | 
|---|
| 107 |       FCalStop.RequireTime  := FRequireTime;
 | 
|---|
| 108 |       lblInstruct.Caption  := FInstruction;
 | 
|---|
| 109 |       lblStart.Caption     := FLabelStart;
 | 
|---|
| 110 |       lblStop.Caption      := FLabelStop;
 | 
|---|
| 111 | 
 | 
|---|
| 112 |       Result := (ShowModal = IDOK);
 | 
|---|
| 113 |       if Result then
 | 
|---|
| 114 |       begin
 | 
|---|
| 115 |         FTextOfStart   := FCalStart.Text;
 | 
|---|
| 116 |         FTextOfStop    := FCalStop.Text;
 | 
|---|
| 117 |         FFMDateStart   := FCalStart.FMDateTime;
 | 
|---|
| 118 |         FFMDateStop    := FCalStop.FMDateTime;
 | 
|---|
| 119 |         FRelativeStart := FCalStart.RelativeTime;
 | 
|---|
| 120 |         FRelativeStop  := FCalStop.RelativeTime;
 | 
|---|
| 121 |       end;
 | 
|---|
| 122 |     end;
 | 
|---|
| 123 |   finally
 | 
|---|
| 124 |     frmDateRange.Free;
 | 
|---|
| 125 |   end;
 | 
|---|
| 126 | end;
 | 
|---|
| 127 | 
 | 
|---|
| 128 | procedure TORDateRangeDlg.SetDateOnly(Value: Boolean);
 | 
|---|
| 129 | begin
 | 
|---|
| 130 |   FDateOnly := Value;
 | 
|---|
| 131 |   if FDateOnly then
 | 
|---|
| 132 |   begin
 | 
|---|
| 133 |     FRequireTime := False;
 | 
|---|
| 134 |     FMDateStart  := Int(FFMDateStart);
 | 
|---|
| 135 |     FMDateStop   := Int(FFMDateStop);
 | 
|---|
| 136 |     if FFormat = FMT_DATETIME then FFormat := FMT_DATEONLY;
 | 
|---|
| 137 |   end;
 | 
|---|
| 138 | end;
 | 
|---|
| 139 | 
 | 
|---|
| 140 | procedure TORDateRangeDlg.SetRequireTime(Value: Boolean);
 | 
|---|
| 141 | begin
 | 
|---|
| 142 |   FRequireTime := Value;
 | 
|---|
| 143 |   if FRequireTime then
 | 
|---|
| 144 |   begin
 | 
|---|
| 145 |     if FFormat = FMT_DATEONLY then FFormat := FMT_DATETIME;
 | 
|---|
| 146 |     SetDateOnly(False);
 | 
|---|
| 147 |   end;
 | 
|---|
| 148 | end;
 | 
|---|
| 149 | 
 | 
|---|
| 150 | procedure TORDateRangeDlg.SetFMDateStart(Value: TFMDateTime);
 | 
|---|
| 151 | begin
 | 
|---|
| 152 |   FFMDateStart := Value;
 | 
|---|
| 153 |   FTextOfStart := FormatFMDateTime(FFormat, FFMDateStart);
 | 
|---|
| 154 | end;
 | 
|---|
| 155 | 
 | 
|---|
| 156 | procedure TORDateRangeDlg.SetFMDateStop(Value: TFMDateTime);
 | 
|---|
| 157 | begin
 | 
|---|
| 158 |   FFMDateStop := Value;
 | 
|---|
| 159 |   FTextOfStop := FormatFMDateTime(FFormat, FFMDateStop);
 | 
|---|
| 160 | end;
 | 
|---|
| 161 | 
 | 
|---|
| 162 | procedure TORDateRangeDlg.SetTextOfStart(const Value: string);
 | 
|---|
| 163 | begin
 | 
|---|
| 164 |   FTextOfStart := Value;
 | 
|---|
| 165 |   FFMDateStart := 0;
 | 
|---|
| 166 | end;
 | 
|---|
| 167 | 
 | 
|---|
| 168 | procedure TORDateRangeDlg.SetTextOfStop(const Value: string);
 | 
|---|
| 169 | begin
 | 
|---|
| 170 |   FTextOfStop := Value;
 | 
|---|
| 171 |   FFMDateStop := 0;
 | 
|---|
| 172 | end;
 | 
|---|
| 173 | 
 | 
|---|
| 174 | 
 | 
|---|
| 175 | { TORfrmDateRange --------------------------------------------------------------------------- }
 | 
|---|
| 176 | 
 | 
|---|
| 177 | procedure TORfrmDateRange.cmdOKClick(Sender: TObject);
 | 
|---|
| 178 | var
 | 
|---|
| 179 |   ErrMsg: string;
 | 
|---|
| 180 | begin
 | 
|---|
| 181 |   FCalStart.Validate(ErrMsg);
 | 
|---|
| 182 |   if ErrMsg <> '' then
 | 
|---|
| 183 |   begin
 | 
|---|
| 184 |     Application.MessageBox(PChar(ErrMsg), 'Start Date Error', MB_OK);
 | 
|---|
| 185 |     Exit;
 | 
|---|
| 186 |   end;
 | 
|---|
| 187 |   FCalStop.Validate(ErrMsg);
 | 
|---|
| 188 |   if ErrMsg <> '' then
 | 
|---|
| 189 |   begin
 | 
|---|
| 190 |     Application.MessageBox(PChar(ErrMsg), 'Stop Date Error', MB_OK);
 | 
|---|
| 191 |     Exit;
 | 
|---|
| 192 |   end;
 | 
|---|
| 193 |   ModalResult := mrOK;
 | 
|---|
| 194 | end;
 | 
|---|
| 195 | 
 | 
|---|
| 196 | procedure TORfrmDateRange.cmdCancelClick(Sender: TObject);
 | 
|---|
| 197 | begin
 | 
|---|
| 198 |   ModalResult := mrCancel;
 | 
|---|
| 199 | end;
 | 
|---|
| 200 | 
 | 
|---|
| 201 | procedure Register;
 | 
|---|
| 202 | { used by Delphi to put components on the Palette }
 | 
|---|
| 203 | begin
 | 
|---|
| 204 |   RegisterComponents('CPRS', [TORDateRangeDlg]);
 | 
|---|
| 205 | end;
 | 
|---|
| 206 | 
 | 
|---|
| 207 | procedure TORfrmDateRange.FormCreate(Sender: TObject);
 | 
|---|
| 208 | { Create date boxes here to avoid problem where TORDateBox is not already on component palette. }
 | 
|---|
| 209 | begin
 | 
|---|
| 210 |   FCalStart := TORDateBox.Create(Self);
 | 
|---|
| 211 |   FCalStart.Parent := Self;
 | 
|---|
| 212 |   FCalStart.SetBounds(8, 58, 121, 21);
 | 
|---|
| 213 |   FCalStart.TabOrder := 0;
 | 
|---|
| 214 |   FCalStop := TORDateBox.Create(Self);
 | 
|---|
| 215 |   FCalStop.Parent := Self;
 | 
|---|
| 216 |   FCalStop.SetBounds(145, 58, 121, 21);
 | 
|---|
| 217 |   FCalStop.TabOrder := 1;
 | 
|---|
| 218 |   ResizeAnchoredFormToFont(self);
 | 
|---|
| 219 | end;
 | 
|---|
| 220 | 
 | 
|---|
| 221 | procedure TORfrmDateRange.FormDestroy(Sender: TObject);
 | 
|---|
| 222 | begin
 | 
|---|
| 223 |   FCalStart.Free;
 | 
|---|
| 224 |   FCalStop.Free;
 | 
|---|
| 225 | end;
 | 
|---|
| 226 | 
 | 
|---|
| 227 | end.
 | 
|---|