Delphi WinAPI SetLocaleInfo / GetLocaleInfo - 设置/获取 当前区域设置的信息项(日期格式、语言格式等)
Delphi WinAPI SetLocaleInfo / GetLocaleInfo - 设置/获取 当前区域设置的信息项(日期格式、语言格式等)
1、SetLocaleInfo
语法原型:
1 2 3 4 5 | 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
示例:
1 2 3 4 5 6 7 8 9 | 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
语法原型:
1 2 3 4 5 6 | int GetLocaleInfoA( LCID Locale, //要检索其信息的区域设置标识符。 LCTYPE LCType, //要检索的区域设置信息。 LPSTR lpLCData, //指向缓冲区的指针,此函数在其中检索请求的区域设置信息。如果cchData设置为0,则不使用此指针。有关更多信息,请参阅备注部分。 int cchData //lpLCData表示的数据缓冲区的大小,以TCHAR值为单位。或者,应用程序可以将此参数设置为0。在这种情况下,函数不使用lpLCData参数,而是返回所需的缓冲区大小,包括终止的空字符。 ); |
参数:
同上 SetLocaleInfo 的 的参数。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 希望内容对你有所帮助,谢谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
2015-04-26 Delphi 取整函数round、trunc、ceil和floor
2015-04-26 delphi 判断两个时间差是否在一个指定范围内