unit Xdatedit; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Naptar; type datestr=string[2]; TXDateEdit = class(TEdit) private { Private declarations } fyet1900: datestr; fnaptar: TNaptar; protected { Protected declarations } procedure KeyPress(var Key: char); override; procedure KeyUp(var Key: Word; Shift: TShiftState); override; procedure DoExit; override; public { Public declarations } constructor Create(AOwner: TComponent); override; published { Published declarations } property yet1900: datestr read fyet1900 write fyet1900; Property DateNaptar: TNaptar read FNaptar write FNaptar; end; procedure Register; implementation uses DsgnIntf; type TNaptarProperty = class(TComponentProperty) public procedure GetValues(Proc: TGetStrProc); override; end; procedure Register; begin RegisterComponents('Samples', [TXDateEdit]); RegisterPropertyEditor(TypeInfo(TNaptar), TXDateEdit, 'DateNaptar', TNaptarProperty); end; constructor TXDateEdit.Create(AOwner: TComponent); begin inherited Create(AOwner); fyet1900:='80'; fnaptar:=nil; end; procedure TNaptarProperty.GetValues(Proc: TGetStrProc); var I, J: Integer; Component: TComponent; begin for I := 0 to Designer.Form.ComponentCount - 1 do begin Component := Designer.Form.Components[I]; if (Component is TNaptar) and (Component.Name <> '') then Proc(Component.Name); end; end; procedure TXDateEdit.KeyPress(var Key: char); begin if ((Key>='0') and (Key<='9')) or (key=#8) or (Key=DateSeparator) then inherited keypress(key) else begin messagebeep(0); key:=#0; end; end; procedure TXDateEdit.KeyUp(var Key: Word; Shift: TShiftState); var s: string; begin s:=Text; if Key<>VK_BACK then begin if ((length(s)=2) and (s<>'19') and (s<>'20')) then begin {Elso pont} if (s>=yet1900) and (s<='99') then {19.. vagy 20.. hozzafuzese} s:='19'+s else s:='20'+s; Text:=s; end; if (length(s)=4) then begin Text:=Text+DateSeparator; selstart:=5; end; if (length(s)=7) and (s[5]=DateSeparator) then begin {Masodik pont} Text:=Text+DateSeparator; selstart:=8; end; end; inherited keyup(key, shift); if (key=VK_DOWN) and assigned(fnaptar) then begin fnaptar.show; fnaptar.setfocus; end; end; procedure TXDateEdit.DoExit; begin inherited DoExit; end; end.