用户选择日期时更正datetimepicker上的值

时间:2010-02-10 15:58:05

标签: delphi events

当用户在我的TDateTimePicker中选择一个值时,我想将要设置的值覆盖到与所选值一起的周开始。

我尝试在OnChange事件中设置它,但是在完成事件后,将立即设置最​​初选择的值。

我该怎么做?

3 个答案:

答案 0 :(得分:2)

使用onUserInput事件!

答案 1 :(得分:2)

使用“ONCloseUp”事件 - 此示例适用于我(Delphi 7,WinXP)

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, DateUtils, StdCtrls;

type
  TForm1 = class(TForm)
    dtp1: TDateTimePicker;
    btn1: TButton;
    edt1: TEdit;
    procedure btn1Click(Sender: TObject);
    procedure dtp1CloseUp(Sender: TObject);
  private
    { Private declarations }
    procedure SetDayToMonday();
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SetDayToMonday;
begin
   dtp1.DateTime := dtp1.DateTime - DayOfTheWeek(dtp1.DateTime) + 1;
end;

procedure TForm1.dtp1CloseUp(Sender: TObject);
begin
   SetDayToMonday;
end;

end.

- reinhard: - )

答案 2 :(得分:0)

我会在表单中发布消息,定义消息(WM_USER + 1000 + X),发布消息并处理它。如果你不像这样“挂”它,你也可以做一个PendingDateTimeTimer:在OnChange事件设置PendingDateTimeTimer.Enabled:= true之后稍稍稍后(例如10毫秒)进行验证的TTimer。