Board logo

Subject: 日历控件的BUG [Print This Page]

Author: sadanboy2010    Time: 2010-11-7 21:46     Subject: 日历控件的BUG

在用到组件包中的月历组件时候发现一点问题。当日期调整到1582年的时候,月份为11月之后不会出现问题如图:
11月分之前就出现错误

Image Attachment: cuo.jpg (2010-11-7 21:46, 35.15 K) / Download count 37
http://bbs.cnpack.org/attachment.php?aid=773


Author: Passion    Time: 2010-11-8 12:50

感谢报告,我查一下。
Author: sadanboy2010    Time: 2010-11-8 13:23

这个问题应该和1582年的改历有关系,那个月直接被砍掉了10天,日期不连续了,但星期应该是连续。而程序中计算星期的时候好像没有考虑这个问题

[ 本帖最后由 sadanboy2010 于 2010-11-8 13:26 编辑 ]
Author: Passion    Time: 2010-11-8 21:52

确实是我们绘制的时候没处理好这历史上不存在的10天所致,目前已修正,最新的SVN上已提交了修正版。

您可通过以下介绍访问我们的SVN:
http://www.cnpack.org/showdetail.php?id=639&lang=zh-cn
Author: sadanboy2010    Time: 2010-11-9 13:47

谢谢,你们!新的文件我一下载,但是发现了新的问题直接进入1582年10月显示是正常的,当用鼠标点击在本月隐形显示的下个月数据时候,却出现问题,不是直接跳转到11月而是1变22,下面的一次类推变化,应该是那不存在的10天又回来了

[ 本帖最后由 sadanboy2010 于 2010-11-9 13:49 编辑 ]

Image Attachment: xin.jpg (2010-11-9 13:49, 40.45 K) / Download count 37
http://bbs.cnpack.org/attachment.php?aid=774


Author: Passion    Time: 2010-11-9 16:39

,我今晚再改改。
Author: sadanboy2010    Time: 2010-11-9 22:34

十分感谢刘潇,我22点的时候去SVN上下载您今天刚修改过的文件,我在5楼提到的问题,表面上看是解决了,实际上还是没有解决,只是用了一个偷巧的方法,就是点击下个月的日期是就跳的11月去了,而10月页面的上的日期是变了的,比如1日就变成了22日,您可以点击日期后鼠标先不要放开看看有没有这个现象。还有一个问题,我没有在5楼提出来,因为中午时间紧没有来的急测试,晚上我把中午和现在编译的程序对比都存在的,就是初次运行程序时把日期调到1582年10月时,当我点击10月的1日到4日任意一日,20日那天的数字会变为15,再跳到别的月份再返回来就不会出现这个问题。如图:

[ 本帖最后由 sadanboy2010 于 2010-11-9 22:35 编辑 ]

Image Attachment: 119.jpg (2010-11-9 22:35, 41.87 K) / Download count 36
http://bbs.cnpack.org/attachment.php?aid=775


Author: sadanboy2010    Time: 2010-11-9 22:37

还有就是出现上面问题后接着点击17日以及以后的日期直到31日会出现样的问题如图

Image Attachment: 1192.jpg (2010-11-9 22:38, 39.38 K) / Download count 31
http://bbs.cnpack.org/attachment.php?aid=776


Author: sadanboy2010    Time: 2010-11-9 22:41

如果不点击1日到4日的话,出现的问题就有些诡异了从17日开始点击会变成这样

[ 本帖最后由 sadanboy2010 于 2010-11-9 22:42 编辑 ]

Image Attachment: 1193.jpg (2010-11-9 22:42, 39.74 K) / Download count 32
http://bbs.cnpack.org/attachment.php?aid=777


Author: sadanboy2010    Time: 2010-11-9 22:46

经过对源代码的分析,我初步断定应该不是绘制时候出的问题,应该是delphi本身在计算日期方面存在问题,如果用儒略日数计算应该不会出现这个问题,这好像就要改的地方就很多了,就不能用delphi本身的日期计算函数了。我对delphi刚入门不知道分析的对不,请指教!
Author: Passion    Time: 2010-11-10 13:05

好的,感谢楼主的详细分析,我再看看。确实Delphi本身的日期计算也就是TDate中是允许存在1582年10月5日到14日这段不存在的日期的,导致的兼容性问题也很多。CnCalendar.pas单元中对此有处理,但CnMonthCalendar中可能未处理完全。
Author: Passion    Time: 2010-11-12 21:13

"点击日期后鼠标先不要放开看看有没有这个现象"——我在D5下和D7下按此实验,倒是没看见“10月页面的上的日期是变了的”这个现象。请问你是用的什么版本的Delphi?
Author: sadanboy2010    Time: 2010-11-13 13:31

我用的是2010版,你先把日期条到1582年10月,不是每个月历都有显示上个月和下个月的日期吗?你点击10月页面里11月得日期不要放开鼠标,然后你挪动鼠标看看!不知道我表达清楚了没有

[ 本帖最后由 sadanboy2010 于 2010-11-13 13:38 编辑 ]

Image Attachment: cuo.png (2010-11-13 13:37, 223.71 K) / Download count 36
http://bbs.cnpack.org/attachment.php?aid=781



Image Attachment: 1.jpg (2010-11-13 13:38, 28.02 K) / Download count 31
http://bbs.cnpack.org/attachment.php?aid=782


Author: Passion    Time: 2010-11-13 14:43

表达清楚了,我就是这么操作的,D5/7下没出现这个,我呆会2010下看看。
Author: Passion    Time: 2010-11-14 12:50

D2010下确实有这个绘制的问题。我跟了一下看看,发现问题出在我们自身Paint时RectVisible的判断上。
修改的版本SVN上已经提交,楼主可以再下过来试一试?
Author: sadanboy2010    Time: 2010-11-14 17:54     Subject: 问题解决了!

问题解决了 从中学了不少东西!谢谢潇哥
Author: Passion    Time: 2010-11-14 19:40

是啸。不少人都打错了。




Welcome to CnPack Forum (http://bbs.cnpack.org/) Powered by Discuz! 5.0.0