⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme.txt

📁 农历.rar VFP环境下非常好的农历软件原码
💻 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 + -