16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"アナログ時計の描画"
この発言に対し以下のコメントが寄せられています
#00083 H-Triton さん RE:アナログ時計の描画
■時計の時針、分針、秒針を描画する簡単なサンプルです。
■準備 Form1 に Timer1 をおいて、
function GetX(Angle:Extended;R,CenterX:Integer) : Integer;
function GetY(Angle:Extended;R,CenterY:Integer) : Integer;
Timer1 OnTimerイベントに以下のコードを書きます。
■コード
//---------------------------------------------------------
function GetX(Angle:Extended;R,CenterX:Integer) : Integer;
var E : Extended;
begin
E := Sin(Angle);
Result:=Round(R * E)+(CenterX); //針の先端X座標
end;
function GetY(Angle:Extended;R,CenterY:Integer) : Integer;
var E: Extended;
begin
E := -Cos(Angle);
Result:=Round(R * E)+(CenterY); //針の先端Y座標
end;
procedure TForm1.Timer1Timer(Sender: TObject);
const
Rad : Extended= Pi / 180; //ラジアン値を求めるための定数
var
AnS,AnM,AnH,Angle:Extended;
X,Y,Len,CX,CY,i : Integer;
Hour,Min,Sec,MSec : Word;
begin
Canvas.Pen.Color:=clBlack;
Canvas.Brush.Color:=clBtnFace;
Canvas.FillRect(Clientrect); //前回の描画を消す
Canvas.Brush.Color:=clWhite;
CX := Width div 2; //中心の X 座標
CY := Height div 2;//中心の Y 座標
Canvas.Ellipse(CX-100,CY-100,CX+100,CY+100); //円を描画
DecodeTime(Now, Hour, Min, Sec, MSec); //時刻を分解
AnS := Sec * 6 * Rad; //秒針の角度(ラジアン)
AnM := (Min * 6 + Sec * 0.1)* Rad; //分針の角度(ラジアン)
AnH := (Hour* 30 + Min * 0.5)* Rad; //時針の角度(ラジアン)
for i := 0 to 2 do
begin
case i of
0 : begin Canvas.Pen.Color:=clRed; Angle := AnH ; end;
1 : begin Canvas.Pen.Color:=clBlue; Angle := AnM ; end;
2 : begin Canvas.Pen.Color:=clAqua; Angle := AnS ; end;
end;
Len := i * 10 + 70 ;
X:=GetX(AnS,Len,CX);
Y:=GetY(AnS,Len,CY);
Canvas.MoveTo(CX,CY); //中心にペンを置く
//線を引く
Canvas.LineTo(GetX(Angle,Len,CX),GetY(Angle,Len,CY));
end;
end;
//-------------------------------------------------------------------
本当に簡単なサンプルですので、時計が瞬きしたりするのはご愛敬と
いうことで・・(^^;
それと。。CycleToRad 関数はうまく使えませんでした(/_;)
_/_/ Athena ( VYH00522 ) _/_/
Original document by Athena 氏 ID:(VYH00522)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|