線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2171
推到 Plurk!
推到 Facebook!

如何固守自己程式的日期顯示格式?

答題得分者是:aquarius
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-27 00:27:29 IP:211.76.xxx.xxx 未訂閱
關於日期格式的相關問題, 在站上已有很多的前輩們提出與解答 有設定程式公用變數的方式: ShortDateFormat:='yyyy/mm/dd' 也有改動系統環境變數的方式: procedure TMainForm.FormCreate(Sender: TObject); begin SetDateTimeFormat('1', 'yyyy/MM/dd'); end; procedure SetDateTimeFormat(pCType, pShortDate: PChar); begin SetLocaleInfo(LocID, LOCALE_ICALENDARTYPE, pCType); //設定日期國別 SetLocaleInfo(LocID, LOCALE_SSHORTDATE, pShortDate); //設定短日期格式 SendMessage(HWND_BROADCAST , WM_WININICHANGE, 0, 0); //通知系統現有的 AP 日期格式改變了 end; 不過如果A程式執行了公用變數的方式, 影響的範圍只有A程式內, 一但A程式在執行時而另一個B程式執行卻設定系統環境變數的方式導致影響A程式的顯示狀況(例如用前述函數:SetDateTimeFormat('1', 'MM/dd/yyyy');), 若我想避免此一狀況. 不知道是否有簡單的方式可以解決. 目前可以想到的就是偵測 WM_WININICHANGE 的 Message 再做一次指定公用變數的方法. 我是雪龍
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
aquarius
資深會員


發表:3
回覆:347
積分:330
註冊:2003-05-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-27 11:22:33 IP:211.23.xxx.xxx 未訂閱
要是不要受到系統變數的影響, 就使用 FormatDateTime 來產生. 例如: s:=FormatDateTime('yyyy-mm-dd hh:nn:ss',now) ; 這樣不管別人怎麼設, 都不會影響到你的顯示. ...Aquarius
------
水瓶男的blog: http://791909.blogspot.com
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-27 11:45:35 IP:211.22.xxx.xxx 未訂閱
引言: 要是不要受到系統變數的影響, 就使用 FormatDateTime 來產生. 例如: s:=FormatDateTime('yyyy-mm-dd hh:nn:ss',now) ; 這樣不管別人怎麼設, 都不會影響到你的顯示. ...Aquarius
就變數的操作上這樣是可以解決, 但是有些可視元件碰到日期的格式例如 DBGrid 中顯示資料庫的日期欄位就還要逐一的處理 DisplayFormat 的屬性. 要是碰到欄位的數量與格式都是在執行期動態決定的, 還要用搜尋的方式設定. 這樣處理的範圍太廣且複雜增加出錯的機率. 所以看到一些程式可以覆寫 Windows Message 的程式, 才想到可以利用偵測的方式來處理 我是雪龍
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
5997
一般會員


發表:1
回覆:7
積分:1
註冊:2003-01-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-28 09:16:39 IP:61.63.xxx.xxx 未訂閱
procedure TMainForm.FormCreate(Sender: TObject); begin    ShortDateFormat:='yyyy/mm/dd';    longtimeformat:='hh:mm:ss';    DateSeparator:='/';    TimeSeparator:=':'; end; 這個也不錯用, 帥哥
------
帥哥
aquarius
資深會員


發表:3
回覆:347
積分:330
註冊:2003-05-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-28 10:42:15 IP:211.23.xxx.xxx 未訂閱
攔 WM_WININICHANGE 當然也是一種方法呀, 不過萬一有兩支程式用同樣的方法做, 嘿, 那可就有趣了.. 互相設來設去改不完. 應該還是用改程式公用變數的方式會好些, 然後在使用前先 CHECK 一下格式是否為你要使用的格式, 若不是再重設就好了. ...Aquarius
------
水瓶男的blog: http://791909.blogspot.com
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-29 19:56:12 IP:211.20.xxx.xxx 未訂閱
引言: procedure TMainForm.FormCreate(Sender: TObject); begin ShortDateFormat:='yyyy/mm/dd'; longtimeformat:='hh:mm:ss'; DateSeparator:='/'; TimeSeparator:=':'; end; 這個也不錯用, 帥哥 < face="Verdana, Arial, Helvetica"> 這樣設定是沒錯, 不過只有畫面建立才會設定, 在這之後若有另一支程式做了設定系統日期格式的處理並做了 SendMessage 廣播通知所有程式的話, 顯示的格式依然會被更動. 我是雪龍
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-11-29 20:03:20 IP:211.20.xxx.xxx 未訂閱
引言: 攔 WM_WININICHANGE 當然也是一種方法呀, 不過萬一有兩支程式用同樣的方法做, 嘿, 那可就有趣了.. 互相設來設去改不完. 應該還是用改程式公用變數的方式會好些, 然後在使用前先 CHECK 一下格式是否為你要使用的格式, 若不是再重設就好了. ...Aquarius
當然, 所以我想做的是設定程式的公用變數的方法, 又要防止其他程式重設格式影響到, 所以要用偵測 WM_WININICHANGE Message 的方式, 再作一次設定程式的公用變數, 不然就要用輪詢的方式檢查目前的公用變數(目前能想到最簡單的處理方式), 這樣會增加系統的負載. 我是雪龍
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
5997
一般會員


發表:1
回覆:7
積分:1
註冊:2003-01-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-12-01 00:34:01 IP:218.32.xxx.xxx 未訂閱
procedure TMainForm.FormCreate(Sender: TObject); begin ShortDateFormat:='yyyy/mm/dd'; longtimeformat:='hh:mm:ss'; DateSeparator:='/'; TimeSeparator:=':'; end; 有很多程式啟動後都會去修改日期時間的設定值 我以前也都用SendMessage的方法,但是客戶一啟動其他的程式 又會被她改掉,所以我現在都把它加在每一個formshow裡面 雖然笨但卻都沒有在遇到任何問題,提供你參考. 帥哥
------
帥哥
aquarius
資深會員


發表:3
回覆:347
積分:330
註冊:2003-05-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-12-01 12:34:33 IP:211.23.xxx.xxx 未訂閱
ShortDateFormat:='yyyy/mm/dd'; longtimeformat:='hh:mm:ss'; DateSeparator:='/'; TimeSeparator:=':';    這都是 DELPHI 內部的公用變數. 若要不被別的程式或系統設定影響, 只要在 FormCreate 中加上一行    Application.UpdateFormatSettings:=False ;    這樣就可以了... ...
------
水瓶男的blog: http://791909.blogspot.com
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-12-01 12:38:35 IP:61.222.xxx.xxx 未訂閱
行家一出手 便知有沒有 好一個四兩撥千金
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-12-01 13:06:43 IP:211.22.xxx.xxx 未訂閱
引言: ShortDateFormat:='yyyy/mm/dd'; longtimeformat:='hh:mm:ss'; DateSeparator:='/'; TimeSeparator:=':'; 這都是 DELPHI 內部的公用變數. 若要不被別的程式或系統設定影響, 只要在 FormCreate 中加上一行 Application.UpdateFormatSettings:=False ; 這樣就可以了... ...>< face="Verdana, Arial, Helvetica"> 原來還有這一招. 真是太強了. 我是雪龍
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
系統時間:2024-03-29 18:44:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!