盒子资源分类
ChnCalendar v3.2 beta 饭桶牌农历控件
关键字:ChnCalendar 饭桶牌农历控件 TChnCalendar TChnCalendarPicker 月历 年号 任务
来 自:原创
平 台:Win2k/XP/NT,Win2003
下载所需:0 火柴
深浅度:高级
完成时间:2009/8/10
发布者:xzhifei
发布时间:2009/8/10
编辑器:DELPHI7
语 种:简体中文
分 类:日期与时间
下载浏览:7540/17500
v3.2 beta 修正无法放到容器(TPanel)的问题 添加公历农历重绘事件,用于控件显示块(Cell),基本上可以实现任务定制显示的功能,如示例图 v3.1 beta 修正一些发现的BUG 当前农历算法采用了CnPack的农历单元,由于Delphi日期类型的限制,只支持公元1年到2100年的农历换算,感谢CnPack组的人。 增加了年号功能(公元1年到1948年) ,比如1410年,会显示:[明]成祖 朱棣 永乐8年,另外在显示元朝的年号时,可能会存在显示不全的现象,由于那些酋长的名字太长了。。。年号的数据来源于寿星万年历Web版,可能会存在年号不正确的现象,感谢寿星万年历的作者许剑伟先生。 农历范围增加到公元1年到2100年。 修改DEMO程序,增加了一些常用控制演示。 需要说明的是,这只是个日历控件,不是用来做预测占卜的
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们 !
相关文章
相关评论
共有评论25条
当前显示最后6条评论
dioxio2002
2010/4/22 19:26:25
千万不要误导,你1900-2100可能是准的,其他时间公农历基本是不对的。请参照国家基本准确的“寿星万年历”。 寿星万年历是一款采用现代天文算法制作的农历历算程序,含有公历与回历信息,可以很方便的进行公、农、回三历之间的转换。提供公元-4712年到公元9999年的日期查询功能。其中1500年到1940农历数据已经与陈垣的《二十史朔闰表》核对;含有从公420元(南北朝/宋武帝元年)到今的基本年号。在过去几百年中,寿星万年历的误差是非常小的,节气时刻计算及日月合朔时刻的平均误差小于1秒,太阳坐标的最大可能误差为0.2角秒,月亮坐标的最大可能误差为3角秒,平均误差为最大可能误差的1/6。万年历中含有二千多个国内城市的经纬度,并且用户可根据自已的需要扩展经纬度数据。 在寿星万年历中,还可以查询日出日没、月出月没时间等,与国内外著名的天文软件或天文年历比较,结果完全一致。此外,万年历中还即时显示了“月亮被照亮部分比例”、太阳和月亮的地心黄道坐标、地心赤道坐标、站心地平坐标等。其中日月的地心黄道、赤道则采用高精度算法;“月亮被照亮部分比例”的计算采用低精度的算法,但可以满足一般需求;地平坐标的计算已适当考虑了大气折射,由于大气的气压及气温变化具有许多不确定的因素,所以只考虑平均情况下的大气折射修正,在本软件中,地平坐标被描述为方位角与高度角,它是以观测点为中心的坐标,所以已经考虑了周日视差修正。 受到各地的地形地貌、大气状态、海拔高度等的影响,日出日没、月出月没时间无法计算得很准确,通常只能精确到1分钟,因此,软件中时间显示精确到到了秒数量级,但这并不表明日出日没时间的计算达到了这个精度。日月中天时刻受大气等因素的影响要小得多,所以可以精确到秒。日月的“出、中天、没”的计算不需要高精度日月位置坐标(因为一天中,日月在视野中的位置主要由地球自转决定),程序中使用非常低精度的方法计算日月坐标仍可以把中天时刻精确到秒。 寿星万年历在进行月历推算时采用了最先进的现代天文算法,它是基于2002年巴黎天文台西尔特处Jean CHAPRONT 和 Gerard FRANCOU发表的ELP/MPP02月球运动理论,在几百年范围内,该理论与当今世界上公认的最精密的DE405/406系列星历表仅相差3毫角秒,在几千年范围相差不超过4角秒。由于农历的计算不需要这么高的精度,我们做了一些截断处理及实质性的简化处理,但仍可以满足高精度历算的要求。 程序中采用了1988年法国巴黎天文台Pierre Bretagnon与Gerard Francou发表的VSOP87行星运动理论计算太阳坐标。由于该理论与DE405/406星历表存在少量差异,我们对VSOP87进行少量修正,大大提高了计算精度。 目前的农历是严格的天文历,按理说古人计算的农历应与今人计算的农历是相同的,但是由于种种原因(当时计算工具落后、观测精度有限、时间系统不同、动力学理论不完善),古人计算的农历与今人计算的农历有点出入。通常,古人的日历是皇家日历,不能随便更改。我们以古人的农历为标准,具体订正信息详见“第二大点” 寿星万年历是开放源代的,我并不打算作任何加密处理。月历生成部分涉及多种历法,而且还经处理纪年、节日等信息、日历订正等,所以相应的程序比较长。天文算法部分的程序比较短,只要算法已知,编写起来是比较容易的,困难的是如何设计出我们所需高精度、高速的算法。要设计算良好的天文算法,需参考较多资料并作认真的推导、验证等工作,工作量比较大,所以最好不要更改这部分代码,以免发生错误。
chengkuang
2010/9/9 22:01:36
大侠 我有些知识想请教 请问你的QQ好是多少呀?
gxnxz
2010/9/28 21:15:47
// 获得公历年月日时的天干地支 function GetBaZi(ADT:TDatetime ; out YearG, MonthG, DayG, HourG,YearZ,MonthZ,DayZ,HourZ:Integer):Boolean;//八字天干地支 Var AYear,AMonth,ADay,AHour,AMinitre,ASec,AMSec: Word; JMonth,JDay,JHour,JMinitue:Integer; QMonth,QDay,QHour,QMinitue:Integer; Jie,Qi:Integer; JDT,QDT:TDatetime; DGan,DZhi,HGan,HZhi: Integer; begin Result :=False; DecodeDate(ADT, AYear, AMonth, ADay); DecodeTime(ADT, AHour,AMinitre,ASec,AMSec); Case AMonth of //根据公历月定节及气 1:begin Jie:=0;Qi:=1; end; //小寒 大寒 丑2 2:begin Jie:=2;Qi:=3; end; //立春 雨水 寅3 3:begin Jie:=4;Qi:=5; end; //惊蛰 春分 卯4 4:begin Jie:=6;Qi:=7; end; //清明 谷雨 辰5 5:begin Jie:=8;Qi:=9; end; //立夏 小满 巳6 6:begin Jie:=10;Qi:=11;end; //芒种 夏至 午7 7:begin Jie:=12;Qi:=13;end; //小暑 大暑 未8 8:begin Jie:=14;Qi:=15;end; //立秋 处暑 申9 9:begin Jie:=16;Qi:=17;end; //白露 秋分 酉10 10:begin Jie:=18;Qi:=19;end; //寒露 霜降 戌11 11:begin Jie:=20;Qi:=21;end; //立冬 小雪 亥12 12:begin Jie:=22;Qi:=23;end; //大雪 冬至 子1 End; GetJieQiInAYear(AYear,Jie,JMonth,JDay,JHour,JMinitue); //交节时分 GetJieQiInAYear(AYear,Qi ,QMonth,QDay,QHour,QMinitue); //交气时分 JDT:= StrToDateTime(IntToStr(AYear)+'-'+IntToStr(JMonth)+'-'+IntToStr(JDay)+' '+IntToStr(JHour)+':'+IntToStr(JMinitue)+':00'); QDT:= StrToDateTime(IntToStr(AYear)+'-'+IntToStr(QMonth)+'-'+IntToStr(QDay)+' '+IntToStr(QHour)+':'+IntToStr(QMinitue)+':00'); //年柱 if (Jie=0) or ((ADT < JDT) and (Jie=2)) then //小寒或立春前 begin YearG:=((AYear-1) +7 -1 ) mod 10+1; YearZ:=((AYear-1) +9 -1 ) mod 12+1; end else begin YearG:=(AYear +7 -1 ) mod 10+1; YearZ:=(AYear +9 -1 ) mod 12+1 ; end; //月柱 If ADT > JDT then begin MonthZ:= (Jie div 2 +2 -1) mod 12+1; //月 支 end else begin MonthZ:= (Jie div 2 +2 -2) mod 12+1; end; //方法从寅月的天干向前推进(月支 - 3(寅)) 位 ,年天干:((YearG-1) mod 5+1) 寅月的天干等于 (2*干+1) 除以10的余 MonthG := (((2 *((YearG-1) mod 5+1)+1-1) mod 10+1) +((MonthZ -3+12) mod 12) -1) mod 10+1; //日柱 if AHour = 23 then ExtractGanZhi(GetGanZhiFromDay(AYear,AMonth,ADay+1),DGan,DZhi) else ExtractGanZhi(GetGanZhiFromDay(AYear,AMonth,ADay),DGan,DZhi); DayG:=DGan+1; DayZ:=DZhi+1; //时柱 ExtractGanZhi(GetGanZhiFromHour(AYear,AMonth,ADay,AHour),HGan,HZhi); HourG:=HGan+1; HourZ:=HZhi+1; Result :=True; end;
hbug
2011/5/9 10:18:10
不错,好用。谢谢。
xsjwb1
2011/6/2 17:25:07
好用,唯一发现字体放大有点问题
gykthh
2012/3/26 12:05:50
修改字体后 就不好看了
我要发表评论
查看全部评论