unit Uhren;
interface
uses Math, Graphics, Sysutils;
type TKoordinaten=record
X,Y: Integer;
end;
type TUhren=class(TGraphicControl)
//hoffe ist richtig geschrieben
private
FUhrFarbe : TColor;
FRahmenFarbe : TColor;
FMinutenFarbe : TColor;
FStundenFarbe : TColor;
uhX,uhY, uRadius : Integer;
function Koor(Winkel, Laenge: Integer):TKoordinaten;
procedure SetUhrFarbe(Value : TColor);
procedure SetRahmenFarbe(Value : TColor);
procedure SetMinutenFarbe(Value : TColor);
procedure SetStundenFarbe(Value : TColor);
public
property UhrFarbe : TColor
read FUhrFarbe
write SetUhrFarbe;
property RahmenFarbe : TColor
read FRahmenFarbe
write SetRahmenFarbe;
property MinutenFarbe : TColor
read FMinutenFarbe
write SetMinutenFarbe;
property StundenFarbe : TColor
read FStundenFarbe
write SetStundenFarbe;
procedure Paint;
override;
constructor Create;
override;
destructor Destroy;
override;
end;
implementation
constructor TUhren.Create;
begin
inherited Create;
uhX:=X;
uhY:=Y;
uRadius:=Radius;
end;
destructor TUhren.Destroy;
begin
inherited Destroy;
end;
function TUhren.Koor;
var X,Y: Integer;
begin
X:= Round(sin(Winkel)*Laenge);
Y:= Round(sqrt(sqr(Laenge)-sqr(x)));
case Winkel
of
0..90:
begin
Koor.X:=uhx+X;
Koor.Y:=uhy+Y;
end;
91..180:
begin
Koor.X:=uhx+X;
Koor.Y:=uhy-Y;
end;
181..270:
begin
Koor.X:=uhx-X;
Koor.Y:=uhy-Y;
end;
271..359:
begin
Koor.X:=uhx-X;
Koor.Y:=uhy+Y;
end;
end;
end;
procedure TUhren.Paint;
var Temp:
String;
Mins: Integer;
Ziel: TKoordinaten;
begin
Temp:=TimeToStr(Time);
Mins:= StrToInt(Temp[4]+Temp[5]);
Ziel:=Koor((6*Mins),trunc(uRadius*(5/6)));
with Canvas
do
begin
Pen.Color:= FMinutenFarbe;
MoveTo(uhx,uhy);
LineTo(Ziel.X,Ziel.Y);
end;
Temp:=TimeToStr(Time);
Mins:= StrToInt(Temp[1]+Temp[2]);
Ziel:=Koor((30*Mins),Round(uRadius*(0.5)));
with Canvas
do
begin
Pen.Color := FStundenFarbe;
MoveTo(uhx,uhy);
LineTo(Ziel.X,Ziel.Y);
Pen.Color:=FRahmenFarbe;
Brush.Color:=FUhrFarbe;
Ellipse(uhx-uRadius,uhy-uRadius,uhx+uRadius,uhy+uRadius);
end;
end;
end.