TDateTimePicker如果在设置maxdate及mindate后操作时做提示
设置了这两个限制后,别人想选择小于最小日期及大于最大日期的值就无法选取了,但是这时候我想提示下客户,大家有没有什么好办法指点下?

解决方案 »

  1.   


    在onchange里面检测每次修改的日期是否在你设定的日期范围内?如果不在,则提示,并把修改的日期改为你的2个临界区日期值
      

  2.   

    你可以设置,最大,最小,日期。
    同时在,onchange的地方检查最大,最小日期。
    超过界限,报错。
    这样操作,就不用改动显示的日期了。
      

  3.   

    在onchange里面检测每次修改的日期是否在你设定的日期范围内?如果不在,则提示,并把修改的日期改为你的2个临界区日期值写判断语句就能实现。
      

  4.   

    在onchange里面检测是可以,可是经常输入了一半就检测出错了,有时只输入年,我时只输入月,好像在理论上没有什么好办法吧
    我用的是updown模式
      

  5.   

    那就OnExit撒,当这个组件失去焦点地时候
      

  6.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Forms,
      Dialogs, ExtCtrls, StdCtrls, Unit2, Controls, ComCtrls;type
      TForm1 = class(TForm)
        DateTimePicker1: TDateTimePicker;
        procedure FormCreate(Sender: TObject);
      private
        FOldProc: TWndMethod;
        procedure NewProc(var Message: TMessage);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses commctrl;{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      Self.FOldProc := Self.DateTimePicker1.WindowProc;
      Self.DateTimePicker1.WindowProc := NewProc;
      Self.DateTimePicker1.DateMode := dmUpDown;
      Self.DateTimePicker1.MinDate := StrToDate('2006-1-1');
      Self.DateTimePicker1.MaxDate := StrToDate('2009-12-31');
    end;procedure TForm1.NewProc(var Message: TMessage);
    var
      TempDT: TSystemTime;
    begin
      if Message.Msg=CN_NOTIFY then
      begin
        with TWMNotify(Message).NMHdr^ do
        begin
          if code=DTN_DATETIMECHANGE then
          begin
            with PNMDateTimeChange(TWMNotify(Message).NMHdr)^ do
            begin
              if dwFlags=GDT_VALID then
              begin
                TempDT := st;
                if FormatDateTime('yyyymmdd',SystemTimeToDateTime(TempDT))=FormatDateTime('yyyymmdd',Self.DateTimePicker1.Date) then
                  showmessage('ÈÕÆÚÔ½½ç');
              end;
            end;
          end;
        end;
      end;
      Self.FOldProc(Message);
    end;end.
      

  7.   

    需要那么麻烦吗?
    杀鸡也用大炮? 直接在onClick事件里判断一下选择的日期就可以了啥.
    软件运行的框架和流程很重要,如果你做不到就是框架或者流程不够好.
      

  8.   

    onClick里肯定是不行的,应该大多数人是直接输入,而不是去点击,好像唯的一就是在onchange里面了,onexit里面判断的我再想想,或许会方便一些,但是有的时候是输完日接,我直接点另一个按钮了,onexit发生时,应该另一个按钮的onclick事件也发生了.jjwwang的方法是用消息来处理,不是很看得懂,等有空测试下,谢谢!