本人是新手,想問一下怎么樣用C++builder 實作時鐘,要求有動態的影像形式。急求解決啊!
uj5u.com熱心網友回復:
先拖一個定時器到表單上,設定事件間隔為1000(1秒),然后在OnTimer事件中畫時針、分針和秒針,先用背景色把前一秒的時鐘指標畫一遍,以擦掉上一秒的影像,然后再用實際的顏色把這一秒的時鐘指標畫上uj5u.com熱心網友回復:
網上有實體,自己搜索下。uj5u.com熱心網友回復:
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個單位是從圓心朝反方向伸出的
}
uj5u.com熱心網友回復:
正解,加上
#include <DateUtils.hpp>
#include <math.h>
uj5u.com熱心網友回復:
上面都說的很明白了uj5u.com熱心網友回復:
借用。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/131739.html
標籤:數據庫及相關技術
上一篇:有關資料庫問題
下一篇:vc++編譯時出錯(非語法錯誤)
