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

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

本文简介:选择自 sanjin 的 blog

    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;

本文关键:输入,input
 

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

go top