手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>delphi>列表

限制并方便用户输入

来源:互联网 作者:西部数码 时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

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
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!