DateTimePicker的时间的设置问题,为什么我改变了日期,可是读出来时,还是不变!
  我是在界面上上手动修改的日期,但是测试的时候在onChange事件函数中读取出来的date值却始终都是初始化的值,我是用的系统时间来进行初始化。

解决方案 »

  1.   

       两个组件dtpStartTime、dtpEndTime都为datetimepicher类型
       初始化:(日期部分用的是系统默认的值)
        dtpStartTime.Time := StrToTime('00:00:00');
        dtpEndTime.Time := StrToTime('00:00:00');
       
       在调试时取出日期值:(写在dtpEndTime的onChange事件函数中)
         strngrdOutlineInfo.cells[1,1] :=  DateToStr(dtpStartTime.Date);            
         strngrdOutlineInfo.cells[1,2] :=  DateToStr(dtpEndTime.Date); 
       结果在运行时每一次更改dtpEndTime组件中的值时dtpEndTime组件中显示的值变了,但是  strngrdOutlineInfo.cells[1,1]和strngrdOutlineInfo.cells[1,2]中的值(即从)dtpEndTime中取出来的值没有改变,还是初始化时的值
      

  2.   

    楼主:我帮你试了一下,没有发现任何问题:procedure TForm1.FormCreate(Sender: TObject);
    begin
      dtpStartTime.Time := StrToTime('00:00:00');
      dtpEndTime.Time := StrToTime('00:00:00');
    end;procedure TForm1.dtpEndTimeChange(Sender: TObject);
    begin
      strngrdOutlineInfo.cells[1,1] := DateToStr(dtpStartTime.Date);
      strngrdOutlineInfo.cells[1,2] := DateToStr(dtpEndTime.Date);
    end;strngrdOutlineInfo.cells[1,1]和strngrdOutlineInfo.cells[1,2]中的值,可以随着dtpStartTime、dtpEndTime而改变。你初始化dtpStartTime、dtpEndTime的语句是写在哪里的?
      

  3.   

    先显示到其他的组件里试试,例如:Edit或label。
      

  4.   

    很奇怪,我按照楼主你的代码在我的D2010中测试没有发现你所遇到的问题呀!
    楼主给DateTimePicker组件赋初始值仅仅是初始化了其时间的部分,其日期部分仍然是添加组件当天的日期,这应该没有异议的。
    那么楼主改变DateTimePicker组件的值,然后再显示在StringGrid的cell中应该没有问题啊。
      

  5.   


    初始化在TForm1.FormCreate(Sender: TObject);函数里
      

  6.   

    delphi6里面应该也是没问题的,楼上几位的分析没错,你的初始化只对时分秒起作用,对日期是没用的,日期默认是程序设计时控件加入界面当天的日期。procedure TForm1.FormCreate(Sender: TObject);
    begin
    dtpStartTime.datetime := Now();
    dtpEndTime.datetime := Now();dtpStartTime.Time := StrToTime('00:00:00');
    dtpEndTime.Time := StrToTime('00:00:00');end;procedure TForm1.dtpStartTimeChange(Sender: TObject);
    begin
      strngrdOutlineInfo.cells[1,1] := DateToStr(dtpStartTime.Date);
      strngrdOutlineInfo.cells[1,2] := DateToStr(dtpEndTime.Date);
    end;这是delphi5里面的代码,测试通过。
      

  7.   

    我猜测,楼主的单元中,dtpStartTime、dtpEndTime两组件均各有两个实例,比如,窗体通过拖放摆了两个DateTimePicker组件,分别命名为dtpStartTime、dtpEndTime,然后,在语句中,动态地又再建立了这两个名字的实例:  dtpEndTime:=TDateTimePicker.Create(self);
      dtpStartTime:=TDateTimePicker.Create(self);注意,由于摆放的组件与动态建立的组件同名,故此,并不需使用var dtpStartTime、dtpEndTime:TDateTimePicker;这样来定义,上述语句同样能通过编译,运行时就会出现楼主描述的现象了。复制别处工程代码时,往往容易存在这种情形,楼主是否这样呢?请细核。
      

  8.   

    要查核有否动态建立这两个实例,很简单,只要搜索“TDateTimePicker.Create”即可。
      

  9.   

    问题已经解决了,那个东西用起来是很恼火的,最好的解决办法
    var
      Buffer: PChar;
      Size: Byte;
    begin        Size := dtpStartTime.GetTextLen;
           Inc(Size);
           GetMem(Buffer,Size);
           dtpStartTime.GetTextBuf(Buffer,Size);
           StartTime := Buffer;       FreeMem(Buffer,Size);
    end;这样是一点问题都没有得