国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

如何用編程實現TDateTimePicker的24小時制到12小時制的轉換?

2019-11-18 18:29:27
字體:
來源:轉載
供稿:網友
 

昨天有一位網友在群聊中提到了這個問題,晚上回去想了很久。花了三個小時,終于找到了解決的方法,現在拿出來與大家分享:

  首先想到的是TDateTimePicker控件有沒有屬性來實現這一功能的轉換,因為這樣做的好處不言而知。在我看了TDateTimePicker、
TCommonCalendar這兩個類的源碼后得出了結論,不能用控件的屬性或過程來實現這一轉換。
  于是只好改變思路:
    我們知道,在Windows下可以修改時間的顯示方式,具體方法如下:
    “控制面板”->“區域選項”(WINXP則是“日期與時間的顯示方式”)->“時
     間”。在“時間格式”一欄中可以修改時間的顯示格式,具的顯示格式可在在“外觀
     示例”中可以看到。
    現在可以知道“H:mm:ss”顯示的是24小時制,而“tt h:mm:ss”顯示的則是12小時
    制。

  我們把“時間格式”設置為“tt h:mm:ss”后再點擊“確定”按鈕退出。
  現在再來在窗體上放一個TDateTimePicker控件,OK,達到的預期的效果。

剛準備舒一口氣,又轉念一想,程序到了別人的電腦那不是又不行了??
看來,還得繼續工作。

我們知道Windows的系統設置一般都保存在注冊表中。現在的關鍵是找到時間顯示格式所保存的注冊表主鍵。
想一下,用的注冊表搜索功能。
    我現在的系統時間是12小時制,它的顯示格式是“tt h:mm:ss”。好,就來搜索這個
    吧。終于找到了第一個,仔細思量一下,應該是的:主鍵是:
        HKEY_CURRENT_USER/Control Panel/International
    而其中的sTimeFormat鍵值名就是時間格式。
    但是,里邊還有那么多的鍵值,要修改哪些呢?又是一個問題。
    想了一下,行,就用這個辦法:
       1、導出主鍵
       2、在控制面板中把系統時間改為24小時制
       3、再導出主鍵
       4、運行兩個記事體實例,分別打開剛才導出的主鍵(擴展名為.reg)
       5、比較,刪除鍵值名和數據都相同的行
    現在出來了結果:
      12小時制和24小時制有三個鍵值的數據不同
        鍵值名      12小時制的值          24小時制的值
         iTime                   0                                      1
              iTimePRefix           1                                      0
             sTimeFormat       H:mm:ss                        tt h:mm:ss

  現在余下的問題就是如何編程序來實現了。
  Delphi對注冊表的操作一般都是用TRegistry類來實現,具體的操作請參考相關資料。
  現在貼出其源碼:

unit SetTimeSotryUnit;

interface

uses
  Windows, Registry;


Type
  Time_Story  =   (ts_12,       {12 小時制}
                          ts_24        {24 小時制}
                           );

procedure SetTimeStory(const Story: Time_Story);
function GetTimeStory: Time_Story;

implementation

{ ---------------------------------------------------------------------------
//
//   把系統時間的顯示方式設置為指定類型
//
//   參數   :
//          Story       :       指定類型
//
  --------------------------------------------------------------------------}
procedure SetTimeStory(const Story: Time_Story);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  {設置根主鍵為  HKEY_CURRENT_USER}
  Reg.RootKey := HKEY_CURRENT_USER;
  {打開主鍵   '/Control Panel/International'}
  Reg.OpenKey('/Control Panel/International', False);
  Try   {寫入數據}
    Case Story of
      ts_12:    {12 小時制}
        begin
          Reg.WriteString('iTime', '0');
          Reg.WriteString('iTimePrefix', '1');
          Reg.WriteString('sTimeFormat', 'tt h:mm:ss');
        end;
      ts_24:    {24 小時制}
        begin
          Reg.WriteString('iTime', '1');
          Reg.WriteString('iTimePrefix', '0');
          Reg.WriteString('sTimeFormat', 'H:mm:ss');
        end;
    end;
  Finally;
    Reg.CloseKey;       {關閉主鍵}
    Reg.Free;
  end;
end;

{ ------------------------------------------------------------------------
//
//   返回當前系統時間的顯示方式
//
//   返回值 :
//          默認的返回為 24 小時制
//
  -----------------------------------------------------------------------}
function GetTimeStory: Time_Story;
var
  Reg: TRegistry;
begin
  Result := ts_24;
  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_CURRENT_USER;
  Reg.OpenKey('/Control Panel/International', False);
  Try
    if Reg.ReadString('sTimeFormat') = 'tt h:mm:ss' then
       Result := ts_12
    else
       Result := ts_24;
  Finally;
    Reg.CloseKey;
    Reg.Free;
  end;
end;

end.

以上的實現功能的轉換,而我們要在TDateTimePicker創建之前就要設置好系統時間格式。
所以還要修改.dpr的文件,如下:
program Project1;

uses
  Forms,
  SetTimeSotryUnit in 'SetTimeSotryUnit.pas' {Form1};

{$R *.res}

begin
  application.Initialize;
  if GetTimeStory = ts_12 then {如果為 12 小時制則顯示為 24 小時制}
     SetTimeStory(ts_24)
  else                         {//如果為 24 小時制則顯示為 12 小時制}
     SetTimeStory(ts_12);
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

至此全部完成....


上一篇:一個實際的OLE服務器的開發和使用

下一篇:源代碼的學習(如何學習)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 曲水县| 濉溪县| 北辰区| 竹溪县| 岳普湖县| 临沂市| 威信县| 隆化县| 萨迦县| 紫云| 古浪县| 凌海市| 巫溪县| 松潘县| 乐山市| 渭源县| 师宗县| 金溪县| 凌源市| 时尚| 佛山市| 涿州市| 安顺市| 买车| 长宁区| 甘孜县| 大英县| 大方县| 贵定县| 鹤山市| 长沙市| 谷城县| 贺州市| 双城市| 湘西| 波密县| 云和县| 文山县| 柯坪县| 昌图县| 佛教|