Unit2 unit Dates;
interfacetype
  TDate = class
  private
    fDate: TDateTime;
    procedure SetDay(const Value: Integer);
    procedure SetMonth(const Value: Integer);
    procedure SetYear(const Value: Integer);
    function GetDay: Integer;
    function GetMonth: Integer;
    function GetYear: Integer;
  public
    constructor Create; overload;                           <---这段有被引用吗??
    constructor Create (y, m, d: Integer); overload;
    procedure SetValue (y, m, d: Integer); overload;            <---这段有被引用吗??
    procedure SetValue (NewDate: TDateTime); overload;
    function LeapYear: Boolean;
    procedure Increase (NumberOfDays: Integer = 1);
    procedure Decrease (NumberOfDays: Integer = 1);
    function GetText: string;
    property Year: Integer read GetYear write SetYear;          <---这段有被引用吗??
    property Month: Integer read GetMonth write SetMonth;       <---这段有被引用吗??
    property Day: Integer read GetDay write SetDay;             <---这段有被引用吗??
  end;implementation
uses
  SysUtils, DateUtils;procedure TDate.SetValue (y, m, d: Integer);
begin
  fDate := EncodeDate (y, m, d);
end;function TDate.LeapYear: Boolean;
begin
  Result := IsInLeapYear(fDate);
end;procedure TDate.Increase (NumberOfDays: Integer = 1);
begin
  fDate := fDate + NumberOfDays;
end;function TDate.GetText: string;
begin
  GetText := DateToStr (fDate);
end;procedure TDate.Decrease (NumberOfDays: Integer = 1);
begin
  fDate := fDate - NumberOfDays;
end;constructor TDate.Create (y, m, d: Integer);
begin
  fDate := EncodeDate (y, m, d);
end;constructor TDate.Create;
begin
  fDate := Date;
end;procedure TDate.SetValue(NewDate: TDateTime);
begin
  fDate := NewDate;
end;procedure TDate.SetDay(const Value: Integer);
begin
  fDate := RecodeDay (fDate, Value);
end;procedure TDate.SetMonth(const Value: Integer);
begin
  fDate := RecodeMonth (fDate, Value);
end;procedure TDate.SetYear(const Value: Integer);
begin
  fDate := RecodeYear (fDate, Value);
end;function TDate.GetDay: Integer;
begin
  Result := DayOf (fDate);
end;function TDate.GetMonth: Integer;
begin
  Result := MonthOf (fDate);
end;function TDate.GetYear: Integer;
begin
  Result := YearOf (fDate);
end;
end.
Unit1unit DateF;
interfaceuses
  SysUtils, Windows, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, Dates, StdCtrls;type
  TDateForm = class(TForm)
    LabelDate: TLabel;
    BtnIncrease: TButton;
    BtnDecrease: TButton;
    BtnAdd10: TButton;
    BtnSubtract10: TButton;
    BtnLeap: TButton;
    BtnToday: TButton;
    procedure BtnIncreaseClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BtnDecreaseClick(Sender: TObject);
    procedure BtnAdd10Click(Sender: TObject);
    procedure BtnSubtract10Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure BtnLeapClick(Sender: TObject);
    procedure BtnTodayClick(Sender: TObject);
  private
    TheDay: TDate;
  public
    { Public declarations }
  end;var
  DateForm: TDateForm;implementation{$R *.DFM}procedure TDateForm.FormCreate(Sender: TObject);
begin
  TheDay := TDate.Create (2001, 12, 25);
  LabelDate.Caption := TheDay.GetText;
end;procedure TDateForm.BtnIncreaseClick(Sender: TObject);
begin
  TheDay.Increase;
  LabelDate.Caption := TheDay.GetText;
end;procedure TDateForm.BtnDecreaseClick(Sender: TObject);
begin
  TheDay.Decrease;
  LabelDate.Caption := TheDay.GetText;
end;procedure TDateForm.BtnAdd10Click(Sender: TObject);
begin
  TheDay.Increase (10);
  LabelDate.Caption := TheDay.GetText;
end;procedure TDateForm.BtnSubtract10Click(Sender: TObject);
begin
  TheDay.Decrease (10);
  LabelDate.Caption := TheDay.GetText;
end;procedure TDateForm.FormDestroy(Sender: TObject);
begin
  TheDay.Free;
end;procedure TDateForm.BtnLeapClick(Sender: TObject);
begin
  if TheDay.LeapYear then
    ShowMessage ('Leap year')
  else
    ShowMessage ('NON Leap year');
end;procedure TDateForm.BtnTodayClick(Sender: TObject);
begin
  TheDay.SetValue (Date);                       <--- TheDay.SetValue (Date 和 Now 的功能有什么分别???);
  LabelDate.Caption := TheDay.GetText;
end;
end.

解决方案 »

  1.   

    Date是取得当前日期,不包括时分秒
    now是取得当前时间,包括日期和时分秒毫秒
      

  2.   

    這個貼子之前有回覆過:
    1.當你知道那段代碼有沒有被引用或調用過,你可以設置斷點和註釋、showmessage等方法去確認;
    2.SetValue有被引用,這裡的SetValue(date或now,date只取日期部分,而now精確到年月日時分秒)。
      

  3.   

    constructor Create; overload;  没用到
    但是constructor Create (y, m, d: Integer); overload;
    在TheDay := TDate.Create (2001, 12, 25);时用到
     当你创建这个类时被用到
    procedure SetValue (y, m, d: Integer); overload 没用到
    但是procedure SetValue (NewDate: TDateTime); overload;
    在TheDay.SetValue 时用到
      

  4.   

    问题:系统关键字TDate会有重复
    调用就有用到,否则没有。
      

  5.   

    严重失去方向了 >.<ll
    已学了 9个月..
      

  6.   

    你学9个月啦?那不是比我在CSDN混得还久。这个马甲是5月份声请滴,5个月了,还没升到星星。
      

  7.   

    可以给个例子吗??
    showmessage 该放在哪里??
      

  8.   

    楼主的问题,总结一下,基础知识不牢,前2问,说明楼主对OVERLOAD不了解,不清楚OVERLOAD的功能,意义。其内容较多,建议楼主回头再看看书。关于属性的那3问,可以这么解释,DELPHI在编译的时候,有自动优化代码的功能,在对于你没有被调用的代码,也就是你实现了,但没有任何使用者,不会运行到的代码,编译器会自动优化掉。最后关于Date 和Now的分别,我建议楼主再编译器里按下F1,在帮助里查一下Date和Now的说明,这个方法应该是最高效的吧。E文不好,就用金山词霸呗。