本人想通过TEdit来解决日期的录入形式问题,但网上一直没找到合适的方法,今晚憋了1小时,只能用如下的方法解决,如高手们有简单的方法,请赐教。var
Form1: TForm1;
numedit:integer;//实际输入或剩余多少字符。implementation{$R *.dfm}procedure TForm1.FormShow(Sender: TObject);
begin
edit1.Text:=' - - ';//空的xxxx-xx-xx形式
end;procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var sit:integer;//xxxx-xx-xx形式的日期字符串中numedit所在位置
var text:string; //xxxx-xx-xx形式的日期字符串
begin //#8 退格键
//sit : 12345678910
// : xxxx-xx-xx
//numedit: 1234 56 78 if not (key in ['0'..'9',#8,#13]) then
begin
key:=#0 ;
exit;
end; if (numedit=0) and (key=#8) then exit; if not( key=#13) then
begin
if (not (numedit =0)) and (key=#8) then
dec(numedit)
else
inc(numedit); if (numedit > 4) and (numedit <7) then
sit:=numedit+1
else if (numedit >= 7) then
sit:=numedit+2
else
sit:=numedit; if ( not (sit=0)) and (not (key=#8)) then
begin
text:=edit1.Text;
Text[sit]:=key;
edit1.text:=text;
end
else if (key=#8) then
begin
if (numedit <= 3) or (numedit = 5)
or (numedit = 7) then
begin
text:=edit1.Text;
Text[sit+1]:=' ' ;
edit1.text:=text;
end; if (numedit = 4) then
begin
text:=edit1.Text;
Text[numedit+2]:=' ' ;
edit1.text:=text;
end; if (numedit = 6) then
begin
text:=edit1.Text;
Text[numedit+3]:=' ' ;
edit1.text:=text;
end;
end;
end;
end;
实在是拿不到桌面上来的,望高手指正。
Form1: TForm1;
numedit:integer;//实际输入或剩余多少字符。implementation{$R *.dfm}procedure TForm1.FormShow(Sender: TObject);
begin
edit1.Text:=' - - ';//空的xxxx-xx-xx形式
end;procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var sit:integer;//xxxx-xx-xx形式的日期字符串中numedit所在位置
var text:string; //xxxx-xx-xx形式的日期字符串
begin //#8 退格键
//sit : 12345678910
// : xxxx-xx-xx
//numedit: 1234 56 78 if not (key in ['0'..'9',#8,#13]) then
begin
key:=#0 ;
exit;
end; if (numedit=0) and (key=#8) then exit; if not( key=#13) then
begin
if (not (numedit =0)) and (key=#8) then
dec(numedit)
else
inc(numedit); if (numedit > 4) and (numedit <7) then
sit:=numedit+1
else if (numedit >= 7) then
sit:=numedit+2
else
sit:=numedit; if ( not (sit=0)) and (not (key=#8)) then
begin
text:=edit1.Text;
Text[sit]:=key;
edit1.text:=text;
end
else if (key=#8) then
begin
if (numedit <= 3) or (numedit = 5)
or (numedit = 7) then
begin
text:=edit1.Text;
Text[sit+1]:=' ' ;
edit1.text:=text;
end; if (numedit = 4) then
begin
text:=edit1.Text;
Text[numedit+2]:=' ' ;
edit1.text:=text;
end; if (numedit = 6) then
begin
text:=edit1.Text;
Text[numedit+3]:=' ' ;
edit1.text:=text;
end;
end;
end;
end;
实在是拿不到桌面上来的,望高手指正。
为什么不用MASKEDIT?
多此一举
也可以用DATETIMEPICKER来输入啊;
你只需要把结果给格式化输出就行了!