📄 readme.txt
字号:
*--
*-- 1.取农历数据
*-- 注册:DECLARE INTEGER _GetLunarData IN Lunar.dll STRING @
*-- 输入:LUNARDATA 结构地址,输入阳历数据填写在结构中
*-- 返回:0 - 成功,返回数据在 LUNARDATA 结构中
*-- 2.取对应阳历年月的天数
*-- 注册:DECLARE INTEGER _GetMonthDays IN Lunar.dll INTEGER,INTEGER
*-- 输入:年份,月份
*-- 返回:天数
*-- 3.检测对应年份是否闰年
*-- 注册:DECLARE INTEGER _IsLeapYear IN Lunar.dll INTEGER
*-- 输入:年份
*-- 返回:1 - 闰年 0 - 非闰年
*--
*-- 注册外部动态链接库Lunar.dll中的_GetLunarData函数
DECLARE INTEGER _GetLunarData IN Lunar.dll STRING @
*-- 准备数据交换内存 - 设置需转换的日期
cLunardata = DecToAscii(YEAR(DATE()),4) + ; && 年,例如 2003
DecToAscii(MONTH(DATE()),4) + ; && 月,例如 5
DecToAscii(DAY(DATE()),4) + ; && 日,例如 28
SPACE(60)
IF _GetLunardata( @cLunardata ) = 0
*-- 数值型农历日期
nLunarYear = AsciiToDec(SUBSTR(cLunardata,13,4)) && 农历年,如 2003
nLunarMonth = AsciiToDec(SUBSTR(cLunardata,17,4)) && 农历月,如 5
nLunarDay = AsciiToDec(SUBSTR(cLunardata,21,4)) && 农历日,如 28
nWeekDay = AsciiToDec(SUBSTR(cLunardata,25,4)) && 星期,0 - 星期日,1 - 星期一 ...依此类推
IsLeapMonth = AsciiToDec(SUBSTR(cLunardata,29,4)) && 1 - 闰月,其他为非闰月
? nLunarYear PICTURE '9999年'
?? nLunarMonth PICTURE '99月'
?? nLunarDay PICTURE '99日'
?? IIF(IsLeapMonth=1,'[闰月]','')
?? ' 星期'+SUBSTR('日一二三四五六',2*(nWeekDay+1)-1,2)
*-- 字符型农历日期
cLunarYear = STRTRAN(SUBSTR(cLunardata,33,6),CHR(0)) && 天干年字符串,如“辛亥”
cLunarYearA = STRTRAN(SUBSTR(cLunardata,39,4),CHR(0)) && 属相字符串,如“鼠”
cLunarMonth = STRTRAN(SUBSTR(cLunardata,43,10),CHR(0)) && 月份字符串,如“闰十二月”
cLunarDay = STRTRAN(SUBSTR(cLunardata,53,6),CHR(0)) && 日字符串,如“初十”
cLunarHolDay = STRTRAN(SUBSTR(cLunardata,59,6),CHR(0)) && 节气字符串,如“大暑”
cWeekDay = STRTRAN(SUBSTR(cLunardata,65,8),CHR(0)) && 星期字符串,如“星期一”
? '农历'+cLunarYear+'年【'+ALLTRIM(cLunarYearA)+'】'+cLunarMonth+cLunarDay+' '+cWeekDay+' '+cLunarHolDay
ENDIF
RETURN
*-- 将十进制数转换成ASCII字符串
PROCEDURE DecToAscii
LPARAMETER tn_i,tn_j
LOCAL lc_i,ln_i
M.lc_i = ''
FOR M.ln_i = 1 TO M.tn_j
M.lc_i = M.lc_i + CHR(MOD(M.tn_i,256))
M.tn_i = INT(M.tn_i / 256)
ENDFOR
RETURN M.lc_i
*-- 将ASCII字符串转换成十进制数
PROCEDURE AsciiToDec
LPARAMETER Bytes
LOCAL ln_i,ln_j
M.ln_j = 0
FOR M.ln_i = LEN(M.Bytes) TO 1 STEP -1
M.ln_j = M.ln_j * 256 + ASC(SUBSTR(M.Bytes,M.ln_i,1))
ENDFOR
RETURN M.ln_j
CALENDAR.OCX为农历控件
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -