新!日期处理控件。  不使用任何其它日期控件,直接在 TEdit 中实现,  只能输入日期格式 如: 2007-1-10   月份不能大于12,天最好能控制不能超过月的最大天。  如何实现,有没有代码???

解决方案 »

  1.   

    用KEYPRESS事件去处理可以实现的。不过太麻烦了。
      

  2.   


    function isdate(str: string): Boolean; 
    const datastr = '1234567890-';
    var i: integer;
      datestrlist: tstringlist;
    begin
      Result := False;
      if length(trim(str)) < 1 then exit;
      for i := 1 to length(str) do
        if (pos(str[i], datastr) < 1) then exit;
      datestrlist := tstringlist.Create;
      datestrlist := split(str, '-');
      try
        with datestrlist do
        begin
          if Count <> 3 then exit;
          if not isInteger(Strings[0]) then exit;
          if not isInteger(Strings[1]) then exit;
          if not isInteger(Strings[2]) then exit;
          if (strtoint(Strings[0]) < 1500) or (strtoint(Strings[0]) > 5000) then exit;
          if (strtoint(Strings[1]) < 1) or (strtoint(Strings[1]) > 12) then exit;
          if (strtoint(Strings[2]) < 1) or (strtoint(Strings[2]) > 31) then exit;
        end;
        Result := true;
      finally
        datestrlist.Free;
      end;
    end;//这个函数基本能够实现,但是不能检查2-31这样的错误,你如果需要就加上吧,我用是够了。
      

  3.   

    procedure TfrmCHECKE.Edit1Exit(Sender: TObject);
    begin
      inherited;
      if trim(Edit1.Text)='' then exit;
      if not GF_Is_Date(Edit1.Text) then
      begin
        uf_Alert(''''+Edit1.Text+'''是无效的日期值!');
        Edit1.Text:='';
        Edit1.SetFocus;
      end;
    end;function GF_Is_Date(StrDate: String): Boolean;
    var
      s_Date: String;
    begin
      s_Date:= Trim(StrDate);
      begin
        try
          StrToDate(s_Date);
          result:= true;
        except
          result:= false;
        end;
      end;
    end;
    试试这个!
      

  4.   

    用TEDITMASK控件,更改其中一个属性EditMask,在里面选择你要的格式就行了
    有个小缺点是,在输入时会有一条细线在控制你的输入
      

  5.   

    应该是很容易的,首先是限定为数据输入,再用delphi的函数判断是否是有效的日期