zoukankan      html  css  js  c++  java
  • Delphi WinAPI SetLocaleInfo / GetLocaleInfo

    Delphi WinAPI SetLocaleInfo / GetLocaleInfo - 设置/获取 当前区域设置的信息项(日期格式、语言格式等)

    1、SetLocaleInfo

    语法原型:

    BOOL SetLocaleInfoA(
      LCID   Locale,  //要检索其信息的区域设置标识符。
      LCTYPE LCType,  //要设置的区域设置信息的类型。
      LPCSTR lpLCData  //指向包含要设置的区域设置信息的以null结尾的字符串的指针。信息必须采用特定于指定常量的格式。应用程序对函数的Unicode版本使用Unicode字符串,对ANSI版本使用ANSI字符串。
    );
    

    参数:

    Locale  //要检索其信息的区域设置标识符。

    • LOCALE_SYSTEM_DEFAULT //表示要操作的是系统默认的设置;
    • LOCALE_USER_DEFAULT //表示要操作的是当前用户的设置。还可以取其他值,用于具体修改某种语言区域的设置。一般取 LOCALE_USER_DEFAULT。

    LCType  //表示要操作信息的类型。以下 CONSTANT Long 类型参数: 

    • LOCALE_SCURRENCY = 20 //本地语言货币符号
    • LOCALE_SINTLSYMBOL = 21 //国际货币符号
    • LOCALE_SMONDECIMALSEP = 22 //小数分隔符
    • LOCALE_SMONTHOUSANDSEP = 23 //千位分隔符
    • LOCALE_SMONGROUPING = 24 //数据分组方式
    • LOCALE_ICURRDIGITS = 25 //# 本地数字
    • LOCALE_IINTLCURRDIGITS = 26 //# 国际数字
    • LOCALE_ICURRENCY = 27 //货币正数表示模式
    • LOCALE_INEGCURR = 28 //货币负数表示模式
    • LOCALE_IPOSSIGNPOSN = 82 //货币正数符号的位置
    • LOCALE_INEGSIGNPOSN = 83 //货币负数符号的位置
    • LOCALE_IPOSSYMPRECEDES = 84 //正数中,货币符号位于值之前
    • LOCALE_IPOSSEPBYSPACE = 85 //正数中,货币符号与值之间被空格分开
    • LOCALE_INEGSYMPRECEDES = 86 //负数中,货币符号位于值之前
    • LOCALE_INEGSEPBYSPACE = 87 //负数中,货币符号与值之间被空格分开
    • LOCALE_FONTSIGNATURE = 88 //font signature
    • LOCALE_SENGCURRNAME = 4103 //货币的英语名称
    • LOCALE_SNATIVECURRNAME = 4104 //货币的当地语言名称
    • LOCALE_ILANGUAGE = 1 //语言ID
    • LOCALE_SLANGUAGE = 2 //语言区域名称
    • LOCALE_SENGLANGUAGE = 4097 //语言英语名称
    • LOCALE_SABBREVLANGNAME = 3 //语言名称缩写
    • LOCALE_SNATIVELANGNAME = 4 //当地语言名称
    • LOCALE_ICOUNTRY = 5 //国家代码
    • LOCALE_SCOUNTRY = 6 //国家本地名称
    • LOCALE_SENGCOUNTRY = 4098 //国家英语名称
    • LOCALE_SABBREVCTRYNAME = 7 //国家名称缩写
    • LOCALE_SNATIVECTRYNAME = 8 //当地语言国家名称
    • LOCALE_IDEFAULTLANGUAGE = 9 //缺省语言ID
    • LOCALE_IDEFAULTCOUNTRY = 10 //缺省国家代码
    • LOCALE_IDEFAULTCODEPAGE = 11 //缺省的OEM代码
    • LOCALE_SLIST = 12 //list item separator
    • LOCALE_IDEFAULTANSICODEPAGE = 4100 //缺省的ASCII代码
    • LOCALE_IDEFAULTMACCODEPAGE = 4113 //缺省的MACINTOH代码
    • LOCALE_IMEASURE = 13 //0 = 公制, 1 = 美制
    • LOCALE_SDECIMAL = 14 //decimal separator
    • LOCALE_STHOUSAND = 15 //thousand separator
    • LOCALE_SGROUPING = 16 //digit grouping
    • LOCALE_IDIGITS = 17 //number of fractional digits
    • LOCALE_ILZERO = 18 //leading zeros for decimal
    • LOCALE_SNATIVEDIGITS = 19 //native ascii 0-9
    • //Windows NT 4.0/2000/XP
    • LOCALE_SISO639LANGNAME = 89 //ISO 语言缩写名称
    • LOCALE_SISO3166CTRYNAME = 90 //ISO 国家缩写名称
    • //Windows 2000/XP
    • LOCALE_IDEFAULTEBCDICCODEPAGE = 4114 //缺省的EBCDIC代码
    • LOCALE_SSORTNAME = 4115 //排序名称
    • LOCALE_INEGNUMBER = 4112 //negative number mode
    • LOCALE_SDATE = 29 //日期分隔符   可以单独使用
    • LOCALE_STIME = 30 //时间风隔符   可以单独使用
    • LOCALE_SSHORTDATE = 31 //短日期格式
    • LOCALE_SLONGDATE = 32 //长日期格式
    • LOCALE_STIMEFORMAT = 4009 //时间格式
    • LOCALE_IDATE = 33 //短日期格式的排列顺序
    • LOCALE_ILDATE = 34 //长日期格式的排列顺序
    • LOCALE_ITIME = 35 //时间格式标示符号
    • LOCALE_ITIMEMARKPOSN = 4011 //时间标记符位置
    • LOCALE_ICENTURY = 36 //世纪识别符 (短日期)
    • LOCALE_ITLZERO = 37 //时间数字前面前导0
    • LOCALE_IDAYLZERO = 38 //日期数字前面前导0 (短日期)
    • LOCALE_IMONLZERO = 39 //月份数字前面前导0 (短日期)
    • LOCALE_S1159 = 40 //AM 指示符
    • LOCALE_S2359 = 41 //PM 指示符
    • LOCALE_ICALENDARTYPE = 4105 //日历类型指示符
    • LOCALE_IPAPERSIZE = 4106 //0 = letter, 1 = a4, 2 = legal, 3 = a3
    • LOCALE_IOPTIONALCALENDAR = 4107 //其它日历类型指示符
    • LOCALE_IFIRSTDAYOFWEEK = 4108 //一周中的第一天指示符
    • LOCALE_IFIRSTWEEKOFYEAR = 4109 //一年中的第一周指示符
    • LOCALE_SDAYNAME1 = 42 //星期一的长名称
    • LOCALE_SDAYNAME2 = 43 //星期二的长名称
    • LOCALE_SDAYNAME3 = 44 //星期三的长名称
    • LOCALE_SDAYNAME4 = 45 //星期四的长名称
    • LOCALE_SDAYNAME5 = 46 //星期五的长名称
    • LOCALE_SDAYNAME6 = 47 //星期六的长名称
    • LOCALE_SDAYNAME7 = 48 //星期天的长名称
    • LOCALE_SABBREVDAYNAME1 = 49 //星期一的缩写名称
    • LOCALE_SABBREVDAYNAME2 = 50 //星期二的缩写名称
    • LOCALE_SABBREVDAYNAME3 = 51 //星期三的缩写名称
    • LOCALE_SABBREVDAYNAME4 = 52 //星期四的缩写名称
    • LOCALE_SABBREVDAYNAME5 = 53 //星期五的缩写名称
    • LOCALE_SABBREVDAYNAME6 = 54 //星期六的缩写名称
    • LOCALE_SABBREVDAYNAME7 = 55 //星期日的缩写名称
    • LOCALE_SMONTHNAME1 = 56 //一月的长名称
    • LOCALE_SMONTHNAME2 = 57 //二月的长名称
    • LOCALE_SMONTHNAME3 = 58 //三月的长名称
    • LOCALE_SMONTHNAME4 = 59 //四月的长名称
    • LOCALE_SMONTHNAME5 = 60 //五月的长名称
    • LOCALE_SMONTHNAME6 = 61 //六月的长名称
    • LOCALE_SMONTHNAME7 = 62 //七月的长名称
    • LOCALE_SMONTHNAME8 = 63 //八月的长名称
    • LOCALE_SMONTHNAME9 = 64 //九月的长名称
    • LOCALE_SMONTHNAME10 = 65 //十月的长名称
    • LOCALE_SMONTHNAME11 = 66 //十一月的长名称
    • LOCALE_SMONTHNAME12 = 67 //十二月的长名称
    • LOCALE_SMONTHNAME13 = 4110 //十三月的长名称 (如果存在)
    • LOCALE_SABBREVMONTHNAME1 = 68 //一月的缩写名称
    • LOCALE_SABBREVMONTHNAME2 = 69 //二月的缩写名称
    • LOCALE_SABBREVMONTHNAME3 = 70 //三月的缩写名称
    • LOCALE_SABBREVMONTHNAME4 = 71 //四月的缩写名称
    • LOCALE_SABBREVMONTHNAME5 = 72 //五月的缩写名称
    • LOCALE_SABBREVMONTHNAME6 = 73 //六月的缩写名称
    • LOCALE_SABBREVMONTHNAME7 = 74 //七月的缩写名称
    • LOCALE_SABBREVMONTHNAME8 = 75 //八月的缩写名称
    • LOCALE_SABBREVMONTHNAME9 = 76 //九月的缩写名称
    • LOCALE_SABBREVMONTHNAME10 = 77 //十月的缩写名称
    • LOCALE_SABBREVMONTHNAME11 = 78 //十一月的缩写名称
    • LOCALE_SABBREVMONTHNAME12 = 79 //十二月的缩写名称
    • LOCALE_SABBREVMONTHNAME13 = 4111 //十三月的缩写名称 (如果存在)
    • LOCALE_SPOSITIVESIGN = 80 //positive sign
    • LOCALE_SNEGATIVESIGN = 81 //negative sign
    • LOCALE_SYEARMONTH = 4102 //year month format string
    • LOCALE_IDIGITSUBSTITUTION = 4116 //0 = none, 1 = context, 2 = native digit

    示例:

    procedure SetDateTimeFormat();
    var
      p:DWORD;
    begin
      SetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SSHORTDATE,pchar('yyyy-MM-dd')); //短日期
      SetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SLONGDATE,pchar('yyyy''年''M''月 ''d''日'''));
      SetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_STIMEFORMAT,pchar('H:mm:ss')); //设置时间
      SendMessageTimeOut(HWND_BROADCAST,WM_SETTINGCHANGE,0,0,SMTO_ABORTIFHUNG,10,p);//设置完成后必须调用,通知其他程序格式已经更改,否则即使是程序自身也不能使用新设置的格式
    end;
    

    提示:设置日期时间格式后,应该向当前系统的激活窗口广播发送 WM_SETTINGCHANGE 消息,否则即使修改了,程序里还是不能使用的。

      

    2、GetLocaleInfo 

    语法原型:

    int GetLocaleInfoA(
      LCID   Locale,  //要检索其信息的区域设置标识符。
      LCTYPE LCType,  //要检索的区域设置信息。
      LPSTR  lpLCData,  //指向缓冲区的指针,此函数在其中检索请求的区域设置信息。如果cchData设置为0,则不使用此指针。有关更多信息,请参阅备注部分。
      int    cchData  //lpLCData表示的数据缓冲区的大小,以TCHAR值为单位。或者,应用程序可以将此参数设置为0。在这种情况下,函数不使用lpLCData参数,而是返回所需的缓冲区大小,包括终止的空字符。
    );
    

    参数:

      同上 SetLocaleInfo 的 的参数。

     

    示例:

    procedure GetDateTimeFormat();
    var
      buf:pchar;
      i:integer;
      GPrevShortDate,GPrevLongDate,GPrevTimeFormat:string;
    begin
      getmem(buf,100);
      i:=100; //i必须在调用前赋值为buf缓冲区的长度。如果设为0或负值,将取不到设置的值
      GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SSHORTDATE,buf,i); //取当前用户设置,短日期格式。
      GPrevShortDate:=string(buf);
      i:=100;
      GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SLONGDATE,buf,i); //取长日期格式
      GPrevLongDate:=string(buf);
      i:=100;
      GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_STIMEFORMAT,buf,i); //取时间格式
      GPrevTimeFormat:=string(buf);
      FreeMem(buf);
    end;
    

      

    创建时间:2021.04.26  更新时间:

    博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你所有帮助,谢谢!
  • 相关阅读:
    java 反射
    java 泛型实现原理
    java 常量池
    java String的intern()方法
    HashMap和Hashtable的区别
    Java反射
    初始JSP
    JSP动态网页
    关于学习Vue的前置工作/技术储备
    Java 高级开发必修知识---反射
  • 原文地址:https://www.cnblogs.com/guorongtao/p/14703093.html
Copyright © 2011-2022 走看看