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;
dts:TDataSource);
var
DateStr,Mark,str:string;
MarkPos1,MarkPos2:integer;
DateOrd:TDateOrder;
DateFlag,step:integer;
OldSelStart:integer;
begin
if Shift<>[] then exit;
if not (Key in [vk_up,vk_down] ) then exit;
if (dts<>nil ) and (not dts.DataSet.Active ) then exit;
if (dts<>nil ) and (not dts.DataSet.Modified) then
dts.DataSet.Edit;
OldSelStart:=Edit.SelStart;
DateStr:=Edit.EditText;
Mark:=GetDateMark(DateStr);
MarkPos1:=pos(Mark,DateStr);
str:=copy(DateStr,MarkPos1 1,length(DateStr)-MarkPos1);
MarkPos2:=MarkPos1 pos(Mark,str);
DateOrd:=GetDateOrder(ShortDateFormat);
DateFlag:=GetDateFlag(MarkPos1,MarkPos2,Edit.SelStart,DateOrd);
if Key=vk_up then step:=1
else if Key=vk_down then step:=-1
else step:=0;
case DateFlag of
1: Edit.Date := IncYear(Edit.Date ,step);
2: Edit.Date := IncMonth(Edit.Date ,step);
3: Edit.Date := IncDay(Edit.Date ,step);
end;
Edit.SelStart :=OldSelStart;
end;
此函数在组件的OnKeyDown事件中调用,对于TDateEdit,DataSoure参数为nil。
记着引用Rx的单元ToolEdit和DateUtil。
调用示例:
procedure TForm1.DateEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
MxSpinRxDateEdit(Sender as TCustomDateEdit,Key,Shift,nil);
end;
procedure TForm1.DBDateEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
MxSpinRxDateEdit(Sender as TCustomDateEdit,Key,Shift,(Sender as TDBDateEdit).DataSource);
end;
更多文章请访问三金主页http://vip.6to23.com/tianmingxin
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




