Delphi 的 DateTimePicker 組件有一個CalColors屬性,可以設置 DropDown 打開的日歷節目的風格。但如果不使用 Delphi 自帶的 Style,在這裡設置屬性看不到期望的效果。
而使用了 delphi 自帶的style,效果又存在瑕疵——日歷面板大小有問題。 如果把自帶 style 的 client 項關閉,大小倒是對了,之前設置的MonthBackColor屬性在邊框上也體現出來了,但是和窗體的風格又不統一了。 網上一搜,Stack Overflow 給出了方案——去掉自動繪制 style,去提取 style 的相關元素來設置 CalColors 屬性。 嘗試一下,效果基本能接受了。記在這裡備查。 http://stackoverflow.com/questions/10335310/style-properties-for-tdatetimepicker1 uses 2 Winapi.CommCtrl, 3 Vcl.Styles, 4 Vcl.Themes, 5 uxTheme; 6 7 Procedure SetVclStylesColorsCalendar( DateTimePicker: TDateTimePicker); 8 Var 9 LTextColor, LBackColor : TColor; 10 begin 11 uxTheme.SetWindowTheme(DateTimePicker.Handle, '', '');//disable themes in the calendar 12 //get the vcl styles colors 13 LTextColor:=StyleServices.GetSystemColor(clWindowText); 14 LBackColor:=StyleServices.GetSystemColor(clWindow); 15 16 DateTimePicker.Color:=LBackColor; 17 //set the colors of the calendar 18 DateTimePicker.CalColors.BackColor:=LBackColor; 19 DateTimePicker.CalColors.MonthBackColor:=LBackColor; 20 DateTimePicker.CalColors.TextColor:=LTextColor; 21 DateTimePicker.CalColors.TitleBackColor:=LBackColor; 22 DateTimePicker.CalColors.TitleTextColor:=LTextColor; 23 DateTimePicker.CalColors.TrailingTextColor:=LTextColor; 24 end; 25 26 procedure TForm2.DateTimePicker1DropDown(Sender: TObject); 27 var 28 hwnd: WinAPi.Windows.HWND; 29 begin 30 hwnd := SendMessage(TDateTimePicker(Sender).Handle, DTM_GETMONTHCAL, 0,0); 31 uxTheme.SetWindowTheme(hwnd, '', '');//disable themes in the drop down window 32 end; 33 procedure TForm2.FormCreate(Sender: TObject); 34 begin 35 SetVclStylesColorsCalendar(DateTimePicker1); 36 end;
如果只是顯示日期,假如我是軟件的用戶,我寧願在一個EDIT編輯框中直接輸入日期,DateTimePicker用起來太麻煩了,要使它顯示自己需要的日期,點擊鼠標會到手軟,用它直接輸入日期也不好用.
Delphi中FormatDateTime的用法-南山古桃-關鍵詞:Delphi,FormatDateTime...
關鍵詞:Delphi,FormatDateTime,日期函數,格式化
聲明為:
function FormatDateTime(const Format: string; DateTime: TDateTime): string;
overload;
返回值是一種格式化後的字符串,重點來看Format參數中的指令字符
c 以短時間格式顯示時間,即全部是數字的表示
FormatdateTime('c',now);
輸出為:2004-8-7 9:55:40
d 對應於時間中的日期,日期是一位則顯示一位,兩位則顯示兩位
FormatdateTime('d',now);
輸出可能為1~31
dd 和d的意義一樣,但它始終是以兩位來顯示的
FormatdateTime('dd',now);
輸出可能為01~31
ddd 顯示的是星期幾
FormatdateTime('ddd',now);
輸出為: 星期六
dddd 和ddd顯示的是一樣的。但上面兩個如果在其他國家可能不一樣。ddddd 以短時間格式顯示年月日
FormatdateTime('ddddd',now);
輸出為:2004-8-7
dddddd 以長時間格式顯示年月日
FormatdateTime('dddddd',now);
輸出為:2004年8月7日
(**** 轉載敬請注明-本文出處:南山古桃(nsgtao)的百度空間:hi.baidu.com/nsgtao/ ****)
e/ee/eee/eeee 以相應的位數顯示年
FormatdateTime('ee',now);
輸出為:04 (表示04年)
m/mm/mmm/mmmm 表示月
FormatdateTime('m',now);
輸出為:8
FormatdateTime('mm',now);
輸出為 08
FormatdateTime('mmm',now);
輸出為 八月
FormatdateTime('mmmm',now);
輸出為 八月
和ddd/dddd 一樣,在其他國家可能不同yy/yyyy 表示年
FormatdateTime('yy',now);
輸出為 04
FormatdateTime('yyyy',now);
輸出為 2004,
h/hh,n/nn,s/ss,z/zzz 分別表示小時,分,秒,毫秒
t 以短時間格式顯示時間
FormatdateTime('t',now);
輸出為 10:17
tt 以長時間格式顯示時間
FormatdateTime('tt',now);
輸出為10:18:46
ampm 以長時間格式顯示上午還是下午
FormatdateTime('ttampm',now);
輸出為:10:22:57上午
大概如此,如果要......余下全文>>