全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3034
推到 Plurk!
推到 Facebook!

請問一個DateTimePicker的問題~

尚未結案
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-28 15:55:49 IP:61.221.xxx.xxx 未訂閱
請問各位~ 如何讓DateTimerPicker只有秀出 年度和月份~ 並且顯示時是以民國秀出來~ 但是資料儲存時是西元來存放~ 謝謝~
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-28 23:34:42 IP:61.64.xxx.xxx 未訂閱
你要自行處理 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-29 09:20:17 IP:61.221.xxx.xxx 未訂閱
請問~    錯誤訊息出現在 if PNMHdr(msg.LParam)^.code = DTN_DATETIMECHANGE then 如何去設定 你要自行處理 WM_NOTIFY的DTN_DATETIMECHANGE 並用DTM_SETFORMAT設定日期格式 謝謝~
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-29 09:32:12 IP:210.243.xxx.xxx 未訂閱
引言: 請問~ 錯誤訊息出現在 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-29 10:01:32 IP:61.221.xxx.xxx 未訂閱
謝謝~ 真是不好意思~ ><" 另外~請問可否一開始就預設它是以 民國年來設呢~ 而不用由使用自行去點選~ 麻煩你~
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-29 10:31:54 IP:61.221.xxx.xxx 未訂閱
請問Zard~ 目前我在測試時發生一個問題~ 就是我點選不同月份日期~ 所出現的西元日期都是相同的~ 是不是我那裡設定有錯嗎~ 謝謝您~^^
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-29 11:25:25 IP:210.243.xxx.xxx 未訂閱
引言: 謝謝~ 真是不好意思~ ><" 另外~請問可否一開始就預設它是以 民國年來設呢~ 而不用由使用自行去點選~ 麻煩你~
大大....可否先看完我給你的碼呢..... 下面這段就是在程式啟動時, 設定 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-29 11:48:59 IP:210.243.xxx.xxx 未訂閱
引言: 請問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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-12-29 11:52:20 IP:61.221.xxx.xxx 未訂閱
謝謝麻煩您~    再請問兩個問題~ (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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-12-29 13:13:57 IP:210.243.xxx.xxx 未訂閱
引言: 謝謝麻煩您~ 再請問兩個問題~ (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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-12-31 11:37:04 IP:61.221.xxx.xxx 未訂閱
謝謝Zard~ 已經解決嘍~ 麻煩 ^^
系統時間:2024-04-30 0:20:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!