限制并方便用户输入[4]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 sanjin 的 blog

        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;

本文关键:输入,input
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top