看一看,它能不能行;
======================
procedure Tm_dzxjxxform.Edit4KeyPress(Sender: TObject; var Key: Char);
var
  i:integer;
begin
  if key=#13 then
  edit5.SetFocus;
  if key=#8 then
  begin
    edit4.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(edit4.text)=6 then
  begin
    edit4.SelStart:=5;
    edit4.Text :=copy(edit4.Text,1,5)+'0'+copy(edit4.text,6,1);//'-';
    edit4.SelStart:=8;
  end;
  //end;
  if (length(edit4.text)<>4) and (length(edit4.text)<>7) then
  begin
    key:=#0;
    exit;
  end;
  end;
//***************************************************************判断输入的年是否有效
////////////////////////////////////////////////////////////
if (length(edit4.text))=4 then
   if (strtoint(copy(edit4.text,1,4))<1000) or (strtoint(copy(edit4.text,1,4))>2050) then
    begin
      application.MessageBox('不是有效的年,您的输入范围只能在1000-2050之间','提示',mb_ok+mb_iconinformation);
      key:=#0;
      edit4.Clear;
      exit;
    end;
////////////////////////////////////////////////////////////
//////////////////////////是滞能进行-的插入////////////////////////////
  if (length(edit4.Text)=4)and (key<>'-')and(key<>#8) then
  begin
    edit4.SelLength:=0;
    edit4.SelStart:=4;
    edit4.Text :=edit4.Text +'-';
    edit4.SelStart:=5;
  end;
  if (length(edit4.Text)=7) and (key<>'-')and(key<>#8) then
  begin
    edit4.SelStart:=7;
    edit4.Text :=edit4.Text+'-';
    edit4.SelStart:=8;
  end;////////////////////////////////////////////////////////////////////
  if (length(edit4.Text)>4) and(length(edit4.Text)<6)then
  begin
    if key in ['2'..'9'] then
    begin
      edit4.SelStart:=7;
      edit4.Text:=edit4.Text+'0';
      edit4.SelStart:=8;
    end;
  end; //月
//////////////////////////////////////////
  if length(edit4.Text)=6 then
  begin
    if copy(edit4.Text,6,1)='1' then
      if not(key in ['0'..'2',#8]) then
      begin
        key:=#0;
        exit;
      end;
    if copy(edit4.text,6,1)='0' then
    begin
      if not (key in['1'..'9',#8]) then
      begin
        key:=#0;
        exit;
      end;
    end;
  end; //以1打头的月
/////////////////////////////////////////////////////////
  if length(edit4.Text)=8 then
  if strtoint(copy(edit4.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(edit4.Text)>8 then
  begin
   i:=strtoint(copy(edit4.Text,6,2));
   ////////////////////////////////////////////////
     if length(edit4.text)=9 then
     if i=2 then
     begin
       if (copy(edit4.text,9,1))='2' then
       begin
        if not sfrn(copy(edit4.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(edit4.Text)=9 then
       if strtoint(copy(edit4.Text,9,1))=3 then
        if not(key in['0','1',#8]) then
        begin
         key:=#0;
         exit;
        end;
      end else
   begin
    if (not (key in ['0',#8])) and (copy(edit4.Text,9,1)='3')then
    begin
    key:= #0;
    exit;
    end;
   end;
  end;
end;
=======
function Tm_dzxjxxform.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
  begin
   if (strtoint(str)<1000) or (strtoint(str)>2050) then
    begin
      result:=false;
      exit;
    end;
  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;

解决方案 »

  1.   

    if edit4.text = '' then
    ...
      

  2.   

    设置TDateTimePicker 的kind属性为dtkTime就可以了。
      

  3.   

    这个问题有意思。不过应该可能变通处理,你肯定应该有一个地方是填党派的。
    你要以在该地方设置DATETIMEPICKER控件是否有效(或隐藏),如果党派为空即没有入党。如果党派有值,让DATETIMEPICKER有效(或显示)。
      

  4.   

    我看有些程序 的控件 上可以不显示时间 只显示      -  -  -
    如果有时间的话是这样的    2000-02-11  是什么控件呢,TDateTimePicker 能不能不能实现?
      

  5.   

    sorry,没看清题目。
    如果你手头上有dx系列控件的话,可以使用TdxDBDateEdit,设置他的dateOnError属性为denull就行了,如果不是数据敏感的,就用TdxDateEdit,就可以了。
    也可以使用两个控件,上边是Tedit,下面是TDateTimePicker,当入党时间为空时,设置tedit显示为空就可以了
      

  6.   

    这个问题简单!你双击table控件,选择时间字段,设置他的displayformat为
    yyyy-mm-dd.搞定!
      

  7.   

    在Form  Creat的事件里写:
      DateTimePicker1.time:=0;
      

  8.   

    可以,但有点麻烦,我觉得用edit会更方便