請問一個DateTimePicker的問題~ |
尚未結案
|
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
|
Zard
尊榮會員 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
你要自行處理 WM_NOTIFY的DTN_DATETIMECHANGE 並用DTM_SETFORMAT設定日期格式, 範例如下:
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, Commctrl; type TForm1 = class(TForm) DateTimePicker1: TDateTimePicker; Button1: TButton; procedure FormShow(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } Procedure HandleNotify(var msg: TMessage); Message WM_NOTIFY; end; var Form1: TForm1; implementation {$R *.DFM} Procedure TForm1.HandleNotify(var msg: TMessage); var szDateFormat: String; begin if (msg.Msg = WM_NOTIFY) then begin if PNMHdr(msg.LParam)^.code = DTN_DATETIMECHANGE then begin szDateFormat := Format('民國%d年MM月', [PNMDateTimeChange(msg.LParam)^.st.wYear - 1911]); SendMessage(DateTimePicker1.Handle, DTM_SETFORMAT, 0, LPARAM(@szDateFormat[1])); end; end; end; procedure TForm1.FormShow(Sender: TObject); var szDateFormat: String; year, month, day: Word; begin DecodeDate(DateTimePicker1.DateTime, year, month, day); szDateFormat := Format('民國%d年MM月', [year - 1911]); SendMessage(DateTimePicker1.Handle, DTM_SETFORMAT, 0, LPARAM(@szDateFormat[1])); end; procedure TForm1.Button1Click(Sender: TObject); begin // 顯示西元日期 ShowMessage(DateToStr(DateTimePicker1.DateTime)); end; end. |
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
|
Zard
尊榮會員 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
引言: 請問~ 錯誤訊息出現在 if PNMHdr(msg.LParam)^.code = DTN_DATETIMECHANGE then 如何去設定 你要自行處理 WM_NOTIFY的DTN_DATETIMECHANGE 並用DTM_SETFORMAT設定日期格式 謝謝~我不是把所有的碼都貼上來了嗎..... class="code"> 我貼給你的碼開頭有這段碼. uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, Commctrl; 如何處理WM_NOTIFY的DTN_DATETIMECHANGE 並用DTM_SETFORMAT設定日期格式, 就是下面這段 Procedure TForm1.HandleNotify(var msg: TMessage); var szDateFormat: String; begin if (msg.Msg = WM_NOTIFY) then begin if PNMHdr(msg.LParam)^.code = DTN_DATETIMECHANGE then begin szDateFormat := Format('民國%d年MM月', [PNMDateTimeChange(msg.LParam)^.st.wYear - 1911]); SendMessage(DateTimePicker1.Handle, DTM_SETFORMAT, 0, LPARAM(@szDateFormat[1])); end; end; end;我給你的碼是完整的, 直接就可以跑了, 所以你直接用就可以了. |
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
|
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
|
Zard
尊榮會員 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
引言: 謝謝~ 真是不好意思~ ><" 另外~請問可否一開始就預設它是以 民國年來設呢~ 而不用由使用自行去點選~ 麻煩你~大大....可否先看完我給你的碼呢..... 下面這段就是在程式啟動時, 設定 class="code"> procedure TForm1.FormShow(Sender: TObject); var szDateFormat: String; year, month, day: Word; begin DecodeDate(DateTimePicker1.DateTime, year, month, day); szDateFormat := Format('民國%d年MM月', [year - 1911]); SendMessage(DateTimePicker1.Handle, DTM_SETFORMAT, 0, LPARAM(@szDateFormat[1])); end; |
Zard
尊榮會員 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
引言: 請問Zard~ 目前我在測試時發生一個問題~ 就是我點選不同月份日期~ 所出現的西元日期都是相同的~ 是不是我那裡設定有錯嗎~ 謝謝您~^^新增下列紅字部份, 其它不變 Procedure TForm1.HandleNotify(var msg: TMessage); var szDateFormat: String; begin if (msg.Msg = WM_NOTIFY) then begin if PNMHdr(msg.LParam)^.code = DTN_DATETIMECHANGE then begin DateTimePicker1.DateTime := EncodeDate( PNMDateTimeChange(msg.LParam)^.st.wYear, PNMDateTimeChange(msg.LParam)^.st.wMonth, PNMDateTimeChange(msg.LParam)^.st.wDay); szDateFormat := Format('民國%d年MM月', [PNMDateTimeChange(msg.LParam)^.st.wYear - 1911]); SendMessage(DateTimePicker1.Handle, DTM_SETFORMAT, 0, LPARAM(@szDateFormat[1])); end; end; end; |
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
謝謝麻煩您~ 再請問兩個問題~
(1)以下~為什麼無法點選已選擇的日期呢~
procedure TForm1.Button1Click(Sender: TObject);
begin
// 顯示西元日期
ShowMessage(DateToStr(DateTimePicker1.DateTime));
end;
(2)另外~如果有兩個DateTimePicker物件時~如何在以下處理判斷它為
DateTimePicker1 或 DateTimePicker2 呢
Procedure TForm1.HandleNotify(var msg: TMessage); 不好意思~ 再次麻煩您~
謝謝~
|
Zard
尊榮會員 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
引言: 謝謝麻煩您~ 再請問兩個問題~ (1)以下~為什麼無法點選已選擇的日期呢~ procedure TForm1.Button1Click(Sender: TObject); begin // 顯示西元日期 ShowMessage(DateToStr(DateTimePicker1.DateTime)); end; (2)另外~如果有兩個DateTimePicker物件時~如何在以下處理判斷它為 DateTimePicker1 或 DateTimePicker2 呢 Procedure TForm1.HandleNotify(var msg: TMessage); 不好意思~ 再次麻煩您~ 謝謝~ Procedure TForm1.HandleNotify(var msg: TMessage); var szDateFormat: String; begin if (msg.Msg = WM_NOTIFY) then begin if ((PNMHdr(msg.LParam)^.code = DTN_DATETIMECHANGE)) and // 你的第二個問題的解法 // 只攔截DateTimePicker1 ((PNMHdr(msg.LParam)^.hwndFrom = DateTimePicker1.Handle)) then begin // 你的第一個問題的解法 DateTimePicker1.DateTime := EncodeDate( PNMDateTimeChange(msg.LParam)^.st.wYear, PNMDateTimeChange(msg.LParam)^.st.wMonth, PNMDateTimeChange(msg.LParam)^.st.wDay); szDateFormat := Format('民國%d年MM月', [PNMDateTimeChange(msg.LParam)^.st.wYear - 1911]); SendMessage(DateTimePicker1.Handle, DTM_SETFORMAT, 0, LPARAM(@szDateFormat[1])); end; end; end; |
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |