现在的位置: 首页 >> 图形图像 >> Illustrator >> 用编程来实现24小时制到12小时制的转换
添加时间:2005-12-7 来源:网教中国 作者: 未知
用编程来实现24小时制到12小时制的转换


昨天有一位网友在群聊中提到了这个问题,晚上回去想了很久。花了三个小时,终于找到了解决的方法,现在拿出来与大家分享:
  
  首先想到的是TDateTimePicker控件有没有属性来实现这一功能的转换,因为这样做的好处不言而知。在我看了TDateTimePicker、

  TCommonCalendar这两个类的源码后得出了结论,不能用控件的属性或过程来实现这一转换。

  于是只好改变思路:

  我们知道,在Windows下可以修改时间的显示方式,具体方法如下:
  “控制面板”->“区域选项”(WINXP则是“日期与时间的显示方式”)->“时
  间”。在“时间格式”一栏中可以修改时间的显示格式,具的显示格式可在在“外观
  示例”中可以看到。
  现在可以知道“H:mm:ss”显示的是24小时制,而“tth:mm:ss”显示的则是12小时
  制。
  
  我们把“时间格式”设置为“tth:mm:ss”后再点击“确定”按钮退出。
  现在再来在窗体上放一个TDateTimePicker控件,OK,达到的预期的效果。
  
  刚准备舒一口气,又转念一想,程序到了别人的电脑那不是又不行了??
  看来,还得继续工作。
  
  我们知道Windows的系统设置一般都保存在注册表中。现在的关键是找到时间显示格式所保存的注册表主键。

  想一下,用的注册表搜索功能。
  我现在的系统时间是12小时制,它的显示格式是“tth:mm:ss”。好,就来搜索这个
  吧。终于找到了第一个,仔细思量一下,应该是的:主键是:
  HKEY_CURRENT_USER\ControlPanel\International
  而其中的sTimeFormat键值名就是时间格式。
  但是,里边还有那么多的键值,要修改哪些呢?又是一个问题。

  想了一下,行,就用这个办法:

  1、导出主键
  2、在控制面板中把系统时间改为24小时制
  3、再导出主键
  4、运行两个记事体实例,分别打开刚才导出的主键(扩展名为.reg)
  5、比较,删除键值名和数据都相同的行


现在出来了结果:
  12小时制和24小时制有三个键值的数据不同
  键值名12小时频闹?4小时制的值
  iTime01
  iTimePrefix10
  sTimeFormatH:mm:sstth:mm:ss
  
  现在余下的问题就是如何编程序来实现了。
  Delphi对注册表的操作一般都是用TRegistry类来实现,具体的操作请参考相关资料。
  现在贴出其源码:
  
  unitSetTimeSotryUnit;
  
  interface
  
  uses
  Windows,Registry;
  
  Type
  Time_Story=(ts_12,{12小时制}
  ts_24{24小时制}
  );
  
  procedureSetTimeStory(constStory:Time_Story);
  functionGetTimeStory:Time_Story;
  
  implementation
  
  {---------------------------------------------------------------------------
  //
  //把系统时间的显示方式设置为指定类型
  //
  //参数:
  //Story:指定类型
  //
  --------------------------------------------------------------------------}
  procedureSetTimeStory(constStory:Time_Story);
  var
  Reg:TRegistry;
  begin
  Reg:=TRegistry.Create;
  {设置根主键为HKEY_CURRENT_USER}
  Reg.RootKey:=HKEY_CURRENT_USER;
  {打开主键'\ControlPanel\International'}
  Reg.OpenKey('\ControlPanel\International',False);
  Try{写入数据}
  CaseStoryof
  ts_12:{12小时制}
  begin
  Reg.WriteString('iTime','0');
  Reg.WriteString('iTimePrefix','1');
  Reg.WriteString('sTimeFormat','tth: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小时制
  //
  -----------------------------------------------------------------------}
  functionGetTimeStory:Time_Story;
  var
  Reg:TRegistry;
  begin
  Result:=ts_24;
  Reg:=TRegistry.Create;
  Reg.RootKey:=HKEY_CURRENT_USER;
  Reg.OpenKey('\ControlPanel\International',False);
  Try
  ifReg.ReadString('sTimeFormat')='tth:mm:ss'then
  Result:=ts_12
  else
  Result:=ts_24;
  Finally;
  Reg.CloseKey;
  Reg.Free;
  end;
  end;
  
  end.
  
  以上的实现功能的转换,而我们要在TDateTimePicker创建之前就要设置好系统时间格式。
  所以还要修改.dpr的文件,如下:
  programProject1;
  
  uses
  Forms,
  SetTimeSotryUnitin'SetTimeSotryUnit.pas'{Form1};
  
  {$R*.res}
  
  begin
  Application.Initialize;
  ifGetTimeStory=ts_12then{如果为12小时制则显示为24小时制}
  SetTimeStory(ts_24)
  else{//如果为24小时制则显示为12小时制}
  SetTimeStory(ts_12);
  Application.CreateForm(TForm1,Form1);
  Application.Run;
  end.
  
  至此全部完成....
  
        

上一篇:JavaBean使用技巧 下一篇:EJB轻松进阶之二
大部分文章摘自网上,如有侵犯您的权益请与我们联系,我们会第一时间进行处理,谢谢! [ 打印文章 ] [ 关闭窗口 ]
推荐文章
·Adobe lllustrator的排版功能
·AI的Color面板使用技巧
·Illustrator 10新增绘图工具概述
·AI的Appearance面板浅析
·Illustrator制作精确六面体
·AI裁剪标志制作与使用
·Illustrator和PS制作美丽芦苇丛
·Illustrator绘制图案
·Illustrator 巧制透明按钮
·Illustrator CS的新功能
相关文章
 
最新文章
·Adobe lllustrator的排版功能
·Adobe Illustrator CS2十大新功
·Adobe Illustrater绘制萝卜
·Illustrator制作磨损图章效果
·AI的Color面板使用技巧
·Illustrator 10新增绘图工具概述
·AI的Appearance面板浅析
·Illustrator教你画粉红色的小猪
·Illustrator绘制美丽的玫瑰
·Illustrator制作精确六面体
Google