同上,
或者方法也可以

解决方案 »

  1.   

    MaskEdit 合法性就靠自己喽。
      

  2.   

    tMaskEdit
    或者是两个控件一起用:tedit,tmonthcalendar(samples)
      

  3.   

    为什么不用datetimepicker呢
    难道你表中的字段是文本型的?
      

  4.   

    使用TDateTimePacker控件,设置其DateMode属性为dmUpDown,这样输入时间具方便
      

  5.   

    TDateTimePacker
      edit1.text:=formatdatetime('YYYYMMDD',DateTimePacker1.Date)
      

  6.   

    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    var
      i:integer;
    begin
      if key=#8 then
      begin
        edit1.Clear;
        key:=#0;
        exit;
      end;
      if not (key in ['0'..'9',#13,'-',#8] ) then
      begin
      key:=#0;
      exit;
      end;
    //////////////////////////是滞能进行-的插入///////////////////////////////
      if key='-'then
      begin
      if length(edit1.text)=6 then
      begin
        edit1.SelStart:=5;
        edit1.Text :=copy(edit1.Text,1,5)+'0'+copy(edit1.text,6,1);//'-';
        edit1.SelStart:=8;
      end;
      //end;
      if (length(edit1.text)<>4) and (length(edit1.text)<>7) then
      begin
        key:=#0;
        exit;
      end;
      end;
    //***************************************************************判断输入的年是否有效
    ////////////////////////////////////////////////////////////
    if (length(edit1.text))=4 then
       if (strtoint(copy(edit1.text,1,4))<1000) or (strtoint(copy(edit1.text,1,4))>2050) then
        begin
          application.MessageBox('不是有效的年,您的输入范围只能在1000-2050之间','提示',mb_ok+mb_iconinformation);
          key:=#0;
          edit1.Clear;
          exit;
        end;
    ////////////////////////////////////////////////////////////
    //////////////////////////是滞能进行-的插入////////////////////////////
      if (length(edit1.Text)=4)and (key<>'-')and(key<>#8) then
      begin
        edit1.SelLength:=0;
        edit1.SelStart:=4;
        edit1.Text :=edit1.Text +'-';
        edit1.SelStart:=5;
      end;
      if (length(edit1.Text)=7) and (key<>'-')and(key<>#8) then
      begin
        edit1.SelStart:=7;
        edit1.Text :=edit1.Text+'-';
        edit1.SelStart:=8;
      end;////////////////////////////////////////////////////////////////////
      if (length(edit1.Text)>4) and(length(edit1.Text)<6)then
      begin
        if key in ['2'..'9'] then
        begin
          edit1.SelStart:=7;
          edit1.Text:=edit1.Text+'0';
          edit1.SelStart:=8;
        end;
      end; //月
    //////////////////////////////////////////
      if length(edit1.Text)=6 then
      begin
        if copy(edit1.Text,6,1)='1' then
          if not(key in ['0'..'2',#8]) then
          begin
            key:=#0;
            exit;
          end;
        if copy(edit1.text,6,1)='0' then
        begin
          if not (key in['1'..'9',#8]) then
          begin
            key:=#0;
            exit;
          end;
        end;
      end; //以1打头的月
    /////////////////////////////////////////////////////////
      if length(edit1.Text)=8 then
      if strtoint(copy(edit1.Text,6,2))=2 then
        begin
          if not (key in['0'..'2',#8])then
          begin
           key:=#0;
           exit;
          end;
        end else
        begin
         if not (key in['0'..'3',#8]) then
          begin
            key:=#13;
            exit;
          end;
        end;
    ////////////////////////////////////////////////////
      if length(edit1.Text)>8 then
      begin
       i:=strtoint(copy(edit1.Text,6,2));
       ////////////////////////////////////////////////
         if length(edit1.text)=9 then
         if i=2 then
         begin
           if (copy(edit1.text,9,1))='2' then
           begin
            //if not sfrn(copy(edit1.text,1,4)) then
            if Not IsLeapYear(StrToInt(Copy(Edit1.Text,1,4))) then
            if not (key in ['0'..'8',#8]) then
            begin
              key:=#0;
              exit;
            end;
           end;
         end; { }
       ///////////////////////////////////////////////// 闰年
       if i=0 then
       begin
        key:=#0;
        exit;
       end;
       if (i=1) or (i=3) or (i=5) or (i=7) or (i=8) or(i=10) or(i=12) then
         begin
          if not (key in['0'..'3',#8])then
          begin
           key:=#0;
           exit;
          end;
          if length(edit1.Text)=9 then
           if strtoint(copy(edit1.Text,9,1))=3 then
            if not(key in['0','1',#8]) then
            begin
             key:=#0;
             exit;
            end; // if not(key in['0','1',#8]) then
          end else
       begin
        if (not (key in ['0',#8])) and (copy(edit1.Text,9,1)='3')then
        begin
        key:= #0;
        exit;
        end;
       end;
      end;
    end;function TForm1.sfrn(str: string): boolean;
    var
      i,j,h:integer;
    begin
     if length(str)>4 then
      begin
       i:=length(str);
       application.MessageBox('不是有效的年','提示',mb_ok+mb_iconinformation);
       result:=false;
       exit;
      end else//i:=length]
      begin
       if (strtoint(str)<1000) or (strtoint(str)>2050) then
        begin
          //application.MessageBox('不是有效的年,您的输入范围只能在1000-2050之间','提示',mb_ok+mb_iconinformation);
          result:=false;
          exit;
        end;//if strtoint(str)<1000
      end;
      i:=strtoint(str);
      if (i mod 400=0 )or ((i mod 4=0) and(i mod 100<>0)) then
      begin
       result:=true;
     end
     else
     begin
      result:=false;
     end;
    end;
      

  7.   

    函数可以用IsLeapYear代替//Uses DateUtils
    将其写成'年'、‘月’‘日’就可以了;
    也可以写成一个公用函数
      

  8.   

    用datetiempicker设置fomat为:'MM年dd'即可
      

  9.   

    很多啦??
    tMaskEdit
    最好用datetiempicker
      

  10.   

    就算只要(月-日)
    TMaskEdit也可以
    自己定义过滤属性就可以