DateTimePickerのDateを設定した時にイベントを発生させたい

解決


みみ  2005-06-02 01:46:38  No: 15252

お世話になります。
今、DateTimePickerを使って日付の選択を行おうと思っているのですが、
それと同時に、ボタンを使って前月や次月などの移動をやりたいと思っています。
そこで、ボタンを押した際、DateTimePickerのDateを更新して、DatetimePickerのChangeイベントを拾えたら日付の移動と同じ処理を共有できると考えました。しかし、Dateを変更しただけではChangeイベントが発生しないようなのでどうしようかな〜と考えているところです。
処理を関数にするのもありですが、こういう経験がある型もいるのでは?と思い質問させていただきました。
よろしくお願いします。


deldel  2005-06-02 02:18:58  No: 15253

TMonthCalendarじゃあ、だめなんですか?


みみ  2005-06-03 20:23:18  No: 15254

常時カレンダーを表示させておきたくないのです。
前後の日付移動がベースにあって、必要なときにカレンダーでも日付を選択できるという形にしたいと思っています。
なので、DateTimePickerがベストだと思ったのですが。


にしの  2005-06-03 20:48:03  No: 15255

関数を作ってみました。
TNMDateTimeChangeを使うのに、CommCtrlをuses節に追加する必要があります。

procedure SetDateTimePickerDateTime(dtp: TDateTimePicker; dt: TDateTime);
var
  nmDtc: TNMDateTimeChange;
  st: TSystemTime;
begin
      DateTimeToSystemTime(dt, st);
      nmDtc.nmhdr.hwndFrom := dtp.Handle;
      nmDtc.nmhdr.idFrom := 0;
      nmDtc.nmhdr.code := DTN_DATETIMECHANGE;
      nmDtc.dwFlags := GDT_VALID;
      nmDtc.st := st;

      dtp.Perform( WM_NOTIFY, 0, Integer(@nmDtc) );
end;


駄目?  2005-06-03 20:53:02  No: 15256

>しかし、Dateを変更しただけではChangeイベントが発生しない…
イベントハンドラを呼び出すのはダメなの?

procedure TForm1.Button1Click(Sender: TObject);
begin
  DateTimePicker1.Date := IncMonth(DateTimePicker1.Date, -1);
  DateTimePicker1Change(Self);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  DateTimePicker1.Date := IncMonth(DateTimePicker1.Date, +1);
  DateTimePicker1Change(Self);
end;


みみ  2005-06-03 23:09:54  No: 15257

ボタンを押した際に、イベントハンドラを毎回コールする方法をとった場合、
日付の更新を処理的に組み込むところには必ずそのイベントハンドラを記述する必要があり、それは避けてDateTimePickerのイベントだけでハンドリングしたいと思ったのです。

にしの様
関数の提供ありがとうございます。
本関数でDateTimePickerのDateを更新することで、更新イベントが発生しました。無事解決しました。ありがとうございました。

便乗して質問なのですが、
DateTimePickerのカレンダーを開いて、カレンダーの日付をクリックすると、
OnClickイベントが続けて2回発生するようなのですが、これはMonthCalendarのOnClickとPickerのOnClickなのでしょうか?


みみ  2005-06-07 22:36:13  No: 15258

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加