Login ProductsSalesSupportDownloadsAbout |
Home » Technical Support » Elevate Web Builder Technical Support » Support Forums » Elevate Web Builder General » View Thread |
Messages 1 to 1 of 1 total |
Time Entry Helper |
Thu, May 29 2014 8:48 AM | Permanent Link |
Walter Matte Tactical Business Corporation | I'm doing another Time Sheet Entry and this client wants people to enter Start, Stop and Break Start, Stop times. To make things smoother on data entry I present a grid with one row per day and..... 3 things: Grid KeyPress, Dataset SetText (FixTime function) and Combo Box. Grid KeyPress - I only allow specifc values: function TfrmTime.grdDetKeyPress(Sender: TObject; Key: Char; ShiftKey, CtrlKey, AltKey: Boolean): Boolean; begin if (CTRLKey) or (ALTKey) then begin result := false; end else if ord(key) = 13 then begin TimeDet.Next; end else begin if IsDigit(Key) or (Key = ':') or (Key = ' ') or (Key = 'a') or (Key = 'A') or (Key = 'p') or (Key = 'P') or (Key = 'm') or (Key = 'M') then result := true else result := false; end; end; On the Dataset Fields I trigger the SetText event to validate and also parse for specific patterns to allow quicker entry. I allow "a" or "p" not just AM PM and single digits are assume to be hour values. 5 -> 5:00 AM 5a -> 5:00 AM function TfrmTime.TimeDetStartTimeSetText(Sender: TObject; const Value: String): String; begin result := FixTime(value); end; function FixTime(sTime : string) : string; var i, c : integer; ap, hr, mn : string; begin result := ''; sTime := Trim(UpperCase(sTime)); hr := ''; mn := ''; ap := ''; c := Pos(':', stime); for i := 1 to length(sTime) do begin if ((sTime[i] >= '0') and (sTime[i] <= '9')) or (sTime[i] = ':') then begin if (i < c) or (c = 0) then hr := hr + sTime[i] else if i > c then mn := mn + sTime[i]; end else begin break; end; end; if (hr = '') and (mn = '') then begin exit; end; if mn = '' then mn := '00'; if strtoint(hr) > 23 then exit; if strtoint(mn) > 59 then exit; if Pos('P', sTime) > 1 then ap := ' PM'; if Pos('A', sTime) > 1 then ap := ' AM'; i := StrToInt(mn); if i < 15 then mn := '00' else if i < 30 then mn := '15' else if i < 45 then mn := '30' else mn := '45'; if hr = '12' then begin result := hr + ':' + mn; end else begin result := hr + ':' + mn + ap; end; end; And in the grid I set I have the start/stop fields set to ComboBox and initialize They only allow 15 minute intervals. procedure TfrmTime.frmTimeCreate(Sender: TObject); var i, j : integer; s : string; begin // Load Combo Time for i := 6 to 11 do begin s := inttostr(i); if length(s) = 1 then s := '0' + s; for j := 1 to 4 do begin grdDet.Columns.Column[j].Items.Add(s+':00 AM'); grdDet.Columns.Column[j].Items.Add(s+':15 AM'); grdDet.Columns.Column[j].Items.Add(s+':30 AM'); grdDet.Columns.Column[j].Items.Add(s+':45 AM'); end; end; for i := 12 to 12 do begin s := inttostr(i); if length(s) = 1 then s := '0' + s; for j := 1 to 4 do begin grdDet.Columns.Column[j].Items.Add(s+':00 PM'); grdDet.Columns.Column[j].Items.Add(s+':15 PM'); grdDet.Columns.Column[j].Items.Add(s+':30 PM'); grdDet.Columns.Column[j].Items.Add(s+':45 PM'); end; end; for i := 1 to 11 do begin s := inttostr(i); if length(s) = 1 then s := '0' + s; for j := 1 to 4 do begin grdDet.Columns.Column[j].Items.Add(s+':00 PM'); grdDet.Columns.Column[j].Items.Add(s+':15 PM'); grdDet.Columns.Column[j].Items.Add(s+':30 PM'); grdDet.Columns.Column[j].Items.Add(s+':45 PM'); end; end; end; Walter |
This web page was last updated on Friday, March 29, 2024 at 03:30 AM | Privacy PolicySite Map © 2024 Elevate Software, Inc. All Rights Reserved Questions or comments ? E-mail us at info@elevatesoft.com |