dts.dataset.edit;
//////////////////////////////////////
textsave:=ctl.text;
selstartsave:=ctl.selstart;
sellengthsave:=ctl.sellength;
case selstartsave of
0,1: editingpos:=1;
3,4: editingpos:=2;
6,7: editingpos:=3;
else editingpos:=0;
end;
if selstartsave=length(textsave) then
editingpos:=timeformat;
if key=vk_delete then begin
if sellengthsave=length(textsave) then textsave:=''
else begin
if not (selstartsave in [2,5]) then textsave[selstartsave+1]:='0';
if sellengthsave>1 then begin
for i:=selstartsave+2 to selstartsave+sellengthsave do
if i in [1,2,4,5,7,8] then textsave[i]:='0';
sellengthsave:=1;
end;
end;
key:=0;
end;
if key=vk_back then begin
if sellengthsave=length(textsave) then textsave:=''
else if sellengthsave<=1 then begin
if not (selstartsave in [3,6]) then begin
textsave[selstartsave]:='0';
selstartsave:=selstartsave-1;
end else begin
textsave[selstartsave-1]:='0';
selstartsave:=selstartsave-2;
end;
sellengthsave:=1;
end else begin
for i:=selstartsave+1 to selstartsave+sellengthsave do
if i in [1,2,4,5,7,8] then textsave[i]:='0';
sellengthsave:=1;
end;
key:=0;
end;
///////////////////////////////////////
if (key=vk_up) or (key=vk_down ) then begin
if trim(textsave)=':' then begin
if timeformat=2 then textsave:='00:00'
else textsave:='00:00:00'
end else begin
if key=vk_up then
case editingpos of
1: textsave:=timeadd(textsave,timeformat,1,0,0);
2: textsave:=timeadd(textsave,timeformat,0,1,0);
3: textsave:=timeadd(textsave,timeformat,0,0,1);
end;
if key=vk_down then
case editingpos of
1: textsave:=timeadd(textsave,timeformat,-1,0,0);
2: textsave:=timeadd(textsave,timeformat,0,-1,0);
3: textsave:=timeadd(textsave,timeformat,0,0,-1);
end;
end;
end;
///////////////////////////////////////
ctl.text :=textsave;
ctl.selstart :=selstartsave;
ctl.sellength :=sellengthsave;
end;
以上函数的timeformat参数代表时间的类型:1-时:分;2-时:分:秒
要完成对时间的输入限制,只需调用上面的mxformattimekeypress,
mxformattimekeydown两个函数。
调用示例:
(1)tmaskedit
procedure tform1.maskedit1keydown(sender: tobject; var key: word;
shift: tshiftstate);
begin
mxformattimekeydown(sender as tcustommaskedit,2,key,shift,nil);
end;
procedure tform1.maskedit1keypress(sender: tobject; var key: char);
begin
mxformattimekeypress(sender as tcustommaskedit,2,key,nil);
end;
并且,tmaskedit的editmask属性设为'99:99'
(2)tdbedit
procedure tform1.dbedit1keypress(sender: tobject; var key: char);
begin
mxformattimekeypress(sender as tcustommaskedit,2,key,(sender as tdbedit).datasource);
end;
procedure tform1.dbedit1keydown(sender: tobject; var key: word;
shift: tshiftstate);
begin
mxformattimekeydown(sender as tcustommaskedit,2,key,shift,(sender as tdbedit).datasource);
end;
在tdbedit所连接的数据源打开后,设定所连字段的editmask属性为99:99:
dbedit1.field.editmask :='99:99';
(三)日期的输入
采用rx的日期组件tdateedit、tdbdateedit。如果你还没安装,请在本站下载。
无需对日期的输入作限制,只需方便用户的输入。即:箭头键可以改变相应的
日期元素,因为rx五次功能。函数如下:
procedure mxspinrxdateedit(edit:tcustomdateedit;key:word;shift:tshiftstate;