Already this available a 0.3.5.8 version of the report generator FortesReport4Lazarus.Thanks for all, collaborates with the development of this project. Among the carried through corrections they are distinguished: .preview in time of design, what it sufficiently speeds up the development of the reports. .The exportation for pdf also was improved, with support the UTF8 Link to download.Please, doubt, suggestions, claims, write here. In any document, generally we have that to inform dates, in way that if becomes necessary to speed the input of keyboard. Then, i created two routines, that already use have 6 years. If you are experienced, is something easy, but for the beginning ones, this tip can be interesting. How it functions the routines?They are two routines: Validakeydatas and Validakeydatas2. Using keyboard key RETURN functions validating the date when. In mine in case that it has been very useful, therefore these routines beyond validating the dates have other advantages: . .It speeds in the digitacao, therefore when typing the date does not need to place the separator, in the case the bar ' /' , and additionally, it does not need to inform the year of the date, that the complete routine automatically .It can be used in any component, as Edit, DBEdit, DBGrid.These routines intercept the keyboard input of the user, returning to caracter null in the case to type something invalid date.The difference of Validakeydatas and Validakeydatas2 is that in the second function the year for automatic fulfilling can be informed.For example, the date '01/12/2009' you type only ' 01122009' or ' 0112' and uses a keyboard RETURN.How to use the routines?It is enough to configure the OnKeyPress event of the component, the following form: Form creates one It inserts two TEdit components in form Of a double click in the OnKeyPress event of the Edit1 Example 1 Validakeydatasprocedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);begin//Validakeydatas flame, not accepted blank dateValidakeydatas(Sender,Key,False);if key=#13 then Edit2.setfocus;if key=#27 then close;end;Example 2 Validakeydatasprocedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);begin//alidakeydatas flame, but accepted blank dateValidakeydatas(Sender,Key,True);if key=#13 then Edit2.setfocus;if key=#27 then close;end;Example 3 Using Validakeydatas2 procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);begin//Call Validakeydatas//don't accept blank date//if not to inform the year, fills with ' 2009'Validakeydatas2(Sender,Key,False,'2009');if key=#13 then Edit2.setfocus;if key=#27 then close;end;Source codeIt follows below an example of Unit that could be used to store the functions:unit funcoes1;interfaceusesLCLIntf, Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,EditBtn, ExtCtrls, StdCtrls;Function IsDate(wData:String):Boolean;Procedure ValidaKeyDatas(Const Sender:TObject; var key: char; Const AceitaNulo: Boolean);Procedure ValidaKeyDatas2(Const Sender:TObject; var key: char; Const AceitaNulo: Boolean;Const zAno:String);implementationFunction IsDate(wData:String):Boolean;varT:TDateTime;BeginTryT:=StrToDateTime(wData);Result:=True;exceptResult:=False;end;end;Procedure ValidaKeyDatas(Const Sender:TObject; var key: char; Const AceitaNulo: Boolean);varD1:String;L:integer;beginif not (key in ['0'..'9','/',#8,#13,#27]) Then key:=#0;if Sender.ClassName='TEdit' Thenbegin D1:=TEdit(Sender).Text; if (key=#13) and (D1='') then if not (AceitaNulo) Then key:=#0; if (key=#13) and (D1<>'') then begin L:=length(D1); if (pos('/',TEdit(Sender).Text)=0) and ((L=6) or (L=8)) then begin if L=6 then //original version brazilian //D1:=copy(D1,1,2)+'/'+copy(D1,3,2)+'/'+copy(D1,5,2) //English version D1:=copy(D1,3,2)+'/'+copy(D1,1,2)+'/'+copy(D1,5,2) else //original version brazilian //D1:=copy(D1,1,2)+'/'+copy(D1,3,2)+'/'+copy(D1,5,4); //English version D1:=copy(D1,3,2)+'/'+copy(D1,1,2)+'/'+copy(D1,5,4); end; if isdate(D1) Then TEdit(Sender).Text:=D1; if not isdate(D1) Then begin key:=#0; //original version brazilian //ShowMessage('Data Invalida'); //English version ShowMessage('Invalid Date'); TEdit(Sender).SetFocus; end; end;end;end;{AceitaNulo: Accept Blank DatezAno: Year to substitute}Procedure ValidaKeyDatas2(Const Sender:TObject; var key: char; Const AceitaNulo: Boolean;Const zAno:String);varD1:String;L:integer;beginif not (key in