好多年以前,一次偶然的机会,看到pb例程中有一个模拟时钟程序,突发奇想,于是利用数据窗口本身的定时功能。实现了这个功能。以后,我的每一个程序中,都带有时钟。
一直以来。都觉的自己很忙,没有时间发过有关技术类的贴子,今天就这儿开始吧。
实现的算法与所有的时钟程序相同,就是把时间的围换为圆周运动。当然用到三角函数。
当然如果用数据窗口,必须用到背景图片。没有其它办法。
三个指针,用三条线,从粗到细分别是时分秒,
指针的走动,分别为三条钱的x1,y1,x2,y2,postion中写条件代码。
现在,按我的设计数值举例于明,
一,背景:
把一张时针背景的图片,作好处理,贴入数据窗口中,header,detail,...那个区都可以贴,
定位好了以后,进行定点
二:定点
用十字线交叉的办法,查出中心点,就是先画一条平线,再画一条立线,对好图片的3,9点位,以及12,6点位,读出中心点的位置,我例如下:
535,488:是圆点,钟表的中心点,
三:作针
x1,y1是近端(接近圆点)点位,如果不想出头,直接写成圆点值 (535,488)
为了美观,我写了下面代码:
这是秒针 L_1 的x1: 535 - 64 * sin (Pi (2 * Second (Now()) / 60))
y1: 488 + 60 * cos (Pi (2 * Second (Now()) / 60))
x2: 535 + 320 * sin (Pi (2 * Second (Now()) / 60))
Y2:488 - 300 * cos (Pi (2 * Second (Now()) / 60))
x2,y2是远端,
320,或300,是指针的长度,确切为正向伸出长度,本来应该相同,但是相为计算机相显示视觉的差异,作了修正,不然看起来有点椭。呵呵。
64,60为反身伸出长度,作了修正,注意,应与正向保持正比关系。
同理:
分针L_2:x1:535 - 56 * sin (Pi (2 * minute (Now()) / 60))
y1:488 + 52 * cos (Pi (2 * minute(Now()) / 60))
x2:535 + 280 * sin (Pi (2 * minute (Now()) / 60))
y2:488 - 260* cos (Pi (2 * minute(Now()) / 60))
280,260为分针正向伸出长度,52,56,是反向伸出长度,都作了修正.同样要与正向保持正比关系。
还有时针L_3: x1:535 - 52 * sin (Pi (((2 * (3600 * Hour(Now()) + 60 * Minute (Now()))) / 3600 )/ 12))
y1:488 + 48 * cos ( Pi (((2 * (3600 * Hour(Now()) + 60 * Minute (Now()))) / 3600 )/ 12))
x2:535 + 260 * sin (Pi (((2 * (3600 * Hour(Now()) + 60 * Minute (Now()))) / 3600 )/ 12))
y2:488 - 240 * cos ( Pi (((2 * (3600 * Hour(Now()) + 60 * Minute (Now()))) / 3600 )/ 12))
与上同理。
这里大家注意,sin, cos这两个引出的算式,与中学学过的知识有关,三角函数,极坐标。。。。
三:修饰:
因为数据窗口中,线动的时候,会留痕迹拖动,所以要处理一下。
我的办法是,再加一个圆型数据窗口对象,设置透明。然后在其visible项中写条件代码,每秒改变显示。
四,其它。
你可以加上更多的对象,如电子针辅助,还有读秒等。按需而动。
好了,也算制作完成了。
各位,如里要我的数据窗口导出文件(源码),请留邮件地址。
Echo.wang 2009。10。9
------解决方案--------------------
谢谢分享啊,[email protected]
------解决方案--------------------
可否给我发一个来学习学习?谢谢! [email protected]
------解决方案--------------------
up,
网上有源码的!
------解决方案--------------------
接分......
顺便问下DATAWINDOWS里如何制作用户可移动图形化界面
好像都是事先固定好的呈现给用户
------解决方案--------------------
[email protected]
3Q谢谢分享哈.
------解决方案--------------------
指针能做成 个性的吗 ?