怎么用C++ Builder 完成时钟的实现

phendow2012 2012-05-01 03:52:37
本人是新手,想问一下怎么样用C++builder 实现时钟,要求有动态的图像形式。急求解决啊!
...全文
753 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
nextseconds 2013-10-13
  • 打赏
  • 举报
回复
引用 5 楼 xjq2003 的回复:
正解, 加上 #include <DateUtils.hpp> #include <math.h> [Quote=引用 4 楼 的回复:] C/C++ code void__fastcall TForm1::FormPaint (TObject *Sender) { float deg; int x1, y1, x2, y2; Canvas->Pen->Width = 5; for (int i=0; i<12; i++) //本循环在圆周上画均匀分布的12条短线 {…… [/Quote]
借用。
amolee 2012-05-23
  • 打赏
  • 举报
回复
上面都说的很明白了
xjq2003 2012-05-08
  • 打赏
  • 举报
回复
正解,
加上
#include <DateUtils.hpp>
#include <math.h>
[Quote=引用 4 楼 的回复:]
C/C++ code


void__fastcall TForm1::FormPaint (TObject *Sender)
{
float deg;
int x1, y1, x2, y2;
Canvas->Pen->Width = 5;
for (int i=0; i<12; i++)
//本循环在圆周上画均匀分布的12条短线
{……
[/Quote]
cptang 2012-05-05
  • 打赏
  • 举报
回复

void__fastcall TForm1::FormPaint (TObject *Sender)
{
float deg;
int x1, y1, x2, y2;
Canvas->Pen->Width = 5;
for (int i=0; i<12; i++)
//本循环在圆周上画均匀分布的12条短线
{
deg = i*3.1416/6 ;
//确定一个角度,用弧度单位表示
x1 = 100*cos (deg);
y1 = 100*sin (deg);
x2 = 120*cos (deg);
y2 = 120*sin (deg); //确定短线上两个端点的坐标
Canvas->MoveTo (140+x1,140+y1);
Canvas->LineTo (140+x2,140+y2);
//连接该两端点,圆心的坐标为(140,140)
}
}
//---------------------------------------------------------------------------
void__fastcall TForm1::Timer1Timer (TObject *Sender)
{
AnsiString tstr;
TDateTime DateTime;
int x1, y1, x2, y2, L1, L2, L3;
float h, m, s, deg;
L1 = 95; L2 = 85; L3 =65 ; //分别为分、秒、时三根针定义长度
Canvas->Brush->Color = Form1->Color;
Canvas->Pen->Color = Form1->Color;
Canvas->Ellipse (45, 45, 240, 240);
// 以上三句画出一个与背景相同颜色的填充圆,作用是擦除旧的画面
DateTime=Time ( );
h = HourOf (DateTime);
m = MinuteOf (DateTime);
s = SecondOf (DateTime);
// 取出系统时间并将时、分、秒拆开后分别赋值给h、m、s三个变量
Canvas->Pen->Color = clBlue;
Canvas->Pen->Width = 3;
m = m+ s /60;
deg = (15-m)*3.1416 /30 ;
x1 = L2*cos (deg);
y1 = L2*sin (deg);
Canvas->MoveTo (140,140);
Canvas->LineTo (140+x1,140-y1);
// 以上八句按照m值确定分针的角度,然后画出蓝色分针
Canvas->Pen->Width = 5;
h=h+ m /60;
deg = (3-h)*3.1416 /6 ;
x1 = L3*cos (deg);
y1 = L3*sin (deg);
Canvas->MoveTo (140,140);
Canvas->LineTo (140+x1,140-y1);
// 以上七句按照h值确定时针的角度,然后画出蓝色时针
Canvas->Pen->Color = clRed;
Canvas->Pen->Width = 1;
deg = (15-s)*3.1416 /30 ;
x1 = L1*cos (deg);
y1 = L1*sin (deg);
deg = (-15 - s)*3.1416 /30;
x2 = 20*cos (deg);
y2 = 20*sin (deg);
Canvas->MoveTo (140+x1,140-y1);
Canvas->LineTo (140+x2,140-y2);
// 以上10句按照s值确定秒针的角度,然后画出长度为L1+20单位的红色秒针
// 其中20个单位是从圆心朝反方向伸出的
}
lzh280 2012-05-05
  • 打赏
  • 举报
回复
网上有实例,自己搜索下。
dataxdata 2012-05-01
  • 打赏
  • 举报
回复
先拖一个定时器到窗体上,设置事件间隔为1000(1秒),然后在OnTimer事件中画时针、分针和秒针,先用背景色把前一秒的时钟指针画一遍,以擦掉上一秒的图像,然后再用实际的颜色把这一秒的时钟指针画上

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧