我想在MEMO1中列举出DateTimePicker1.DateTime到DateTimePicker2.DateTime之间的所有指定格式的时间(前者小于后者),写了以下程序:
var
TempDateTime:TDateTime; //保存中间时间
i:integer;//循环变量
begin
For i:=0  To  MonthsBetween(DateTimePicker1.DateTime,DateTimePicker2.DateTime)  Do——①
 begin
    TempDateTime:=IncMonth(DateTimePicker1.DateTime,1);   ———————————————②
//将开始时间按月份每次增加1月。IncMonth是我自定义的函数,没问题。
    memo1.Lines.Add(DateTimeToStr(TempDateTime))  ; ————————————————③
 end;
end;执行后,为什么在Memo1中只显示DateTimePicker1.DateTime下一个月的时间?如果DateTimePicker1.DateTime到DateTimePicker2.DateTime之间有10个月,也是只显示DateTimePicker1.DateTime下一个月的时间。我看程序没错呀。①句设置循环条件,从0到两个时间之间的所有月数;②句每次累加,这样TempDateTime中就保存了所有符合条件的时间,直到循环条件不成立;③句每累加一次就朝Memo中加一次时间,这样就把所有时间加到Memo1里了,直到条件不成立。不是吗?

解决方案 »

  1.   

    当然可以呀,一个控件就可以,好象叫timer,而且循环时间随你定。小到一秒,大到多少就没试 过了了。
      

  2.   

    IncMonth是我自定义的函数??????????
    ------------
    procedure TForm1.Button1Click(Sender: TObject);
    var i: Integer;
    begin
      for i := 1 to 12 do
        Memo1.Lines.Add(DateToStr(IncMonth(Now,i)));
    end;
      

  3.   

    问题应该出在你的IncMonth函数上TempDateTime:=IncMonth(DateTimePicker1.DateTime,1);   这个IncMonth函数到底实现了什么功能? 我的猜想是: 将参数1(即这里的DateTimePicker1.DateTime)值按参数2(这里是1)增加月份之后作为函数值返回。如果我猜得没错的话,那么无论怎样循环,这个参数1的值是不会变化的,因此这个函数的返回值也总是固定为某个值,于是就出现了“执行后,为什么在Memo1中只显示DateTimePicker1.DateTime下一个月的时间?如果DateTimePicker1.DateTime到DateTimePicker2.DateTime之间有10个月,也是只显示DateTimePicker1.DateTime下一个月的时间。”(但是Memo1中应该会出现多个下一个月的时间值,勤这一点楼主没有交待,增加了分析的难度和错误性)
      

  4.   

    纠正一下,刚才受楼上的误导。其实IncMonth是Delphi的函数。正如我的分析,楼主的问题就出在这个IncMonth函数的使用上,问题的原因就是因为每次调用IncMonth时的参数1是同一个值。
      

  5.   

    修改如下:var
      TempDateTime : TDateTime; 
      i            : integer;
    begin
      TempDateTime := DateTimePicker1.DateTime;
      for i:= 0 To MonthsBetween(DateTimePicker1.DateTime,DateTimePicker2.DateTime) do
      begin
        memo1.Lines.Add(DateTimeToStr(TempDateTime));
        TempDateTime := IncMonth(TempDateTime, 1);
      end;
    end;
      

  6.   

    谢谢jadeluo(秀峰) !
    其实IncAMonth()才是Delphi的函数,而IncMonth()不是,两者就相差一个字母A。
    等我上机试一下您的程序,再……