Форум: "Начинающим";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];
ВнизВопрос про часики (clock) Найти похожие ветки
← →
vegarulez © (2007-11-15 18:20) [0]Привет мастерам!
Где-то, когда-то, вроде даже в хелповнике делфа, или в демках видел проект часиков... запускал даже компили - там часики такие обычные, стрелочки, у которых цвет менять можно...
И что-то сечас исчу, и не могу найти...
Подскажите... где их достать мона?...
← →
@!!ex © (2007-11-15 18:29) [1]Написать?
← →
@!!ex © (2007-11-15 19:02) [2]Самая простая вариация, написана за час.
unit uClock;
interface
uses Windows, Graphics, Types;
type
TClock = class
public
BackGroundColor:TColor;
DivLength:integer;
DivWidth:integer;
DivColor:TColor;
SecLength:integer;
SecWidth:integer;
SecColor:TColor;
MinLength:integer;
MinWidth:integer;
MinColor:TColor;
HourLength:integer;
HourWidth:integer;
HourColor:TColor;
Constructor Create(Left,Top, FullSize:integer);
Destructor Destroy; override;
Procedure Draw(Dc:HDC);
protected
X,Y,Width,height:integer;
CX,CY:integer;
Size:integer;
SizeDiv2:integer;
BackBuffer:TBitMap;
end;
implementation
const
OneCircleHourAngle = pi*2/12;
OneCircleSecondAngle = pi*2/60;
OneCircleMinuteAngle = pi*2/60;
Function RotX(Angle:single; X,Y:integer):single;
begin
Result:=(X*cos(Angle)-Y*sin(Angle));
end;
Function RotY(Angle:single; X,Y:integer):single;
begin
Result:=(X*sin(Angle)+Y*cos(Angle));
end;
{ TClock }
constructor TClock.Create(Left, Top, FullSize: integer);
begin
X:=Left;
Y:=Top;
CX:=FullSize div 2;
CY:=FullSize div 2;
BackBuffer:=TBitmap.Create;
BackBuffer.Width:=FullSize;
BackBuffer.Height:=FullSize;
Size:=FullSize;
SizeDiv2:=Size div 2;
BackGroundColor:=clWhite;
DivColor:=clBlue;
DivLength:=10;
DivWidth:=3;
SecColor:=clRed;
SecLength:=Size div 2;
SecWidth:=1;
MinColor:=clRed;
MinLength:=Size div 3;
MinWidth:=2;
HourColor:=clRed;
HourLength:=Size div 4;
HourWidth:=3;
end;
destructor TClock.Destroy;
begin
BackBuffer.Free;
end;
procedure TClock.Draw(Dc:HDC);
var
Index:integer;
Angle:single;
CurTime:_SystemTime;
begin
BackBuffer.Canvas.Brush.Color:=BackGroundColor;
BackBuffer.Canvas.FillRect(RECT(0,0,Size,Size));
//?enoai oeoa?aeao
Angle:=0;
BackBuffer.Canvas.Pen.Color:=DivColor;
BackBuffer.Canvas.Pen.Width:=DivWidth;
for Index:=0 to 11 do begin
BackBuffer.Canvas.MoveTo(Round(RotX(Angle,0,-SizeDiv2)+CX),Round(RotY(Angle,0,-SizeDiv2)+CY));
BackBuffer.Canvas.LineTo(Round(RotX(Angle,0,-SizeDiv2+DivLength)+CX),Round(RotY(Angle,0,-SizeDiv2+DivLength)+CY));
Angle:=Angle+OneCircleHourAngle;
end;
//
GetLocalTime(CurTime);
//?enoai naeoiaio? no?aeeo
BackBuffer.Canvas.Pen.Color:=SecColor;
BackBuffer.Canvas.Pen.Width:=SecWidth;
Angle:=OneCircleSecondAngle*CurTime.wSecond;
BackBuffer.Canvas.MoveTo(CX,CY);
BackBuffer.Canvas.LineTo(Round(RotX(Angle,0,-SecLength)+CX),Round(RotY(Angle,0,-SecLength)+CY));
//
//?enoai ieiooio? no?aeeo
BackBuffer.Canvas.Pen.Color:=MinColor;
BackBuffer.Canvas.Pen.Width:=MinWidth;
Angle:=OneCircleMinuteAngle*CurTime.wMinute+OneCircleMinuteAngle*(CurTime.wSecond/60);
BackBuffer.Canvas.MoveTo(CX,CY);
BackBuffer.Canvas.LineTo(Round(RotX(Angle,0,-MinLength)+CX),Round(RotY(Angle,0,-MinLength)+CY));
//
//?enoai ?aniao? no?aeeo
BackBuffer.Canvas.Pen.Color:=HourColor;
BackBuffer.Canvas.Pen.Width:=HourWidth;
Angle:=OneCircleMinuteAngle*CurTime.wHour+OneCircleMinuteAngle*(CurTime.wMinute/60);
BackBuffer.Canvas.MoveTo(CX,CY);
BackBuffer.Canvas.LineTo(Round(RotX(Angle,0,-HourLength)+CX),Round(RotY(Angle,0,-HourLength)+CY));
//
BitBlt(DC,X,Y,Size,Size,BackBuffer.Canvas.Handle,0,0,SRCCOPY);
end;
end.
← →
@!!ex © (2007-11-15 19:03) [3]Описался... за полчаса это написано.
← →
vegarulez © (2007-11-15 20:49) [4]Уровень знаний не тот чтоб самому писать а втом коде мне всё понятно было...
Твой не компилится... :( Подскажи как его запустить?
← →
Рамиль © (2007-11-15 21:12) [5]
> Твой не компилится... :( Подскажи как его запустить?
Компилятор молчит?
← →
Anatoly Podgoretsky © (2007-11-15 21:21) [6]> vegarulez (15.11.2007 18:20:00) [0]
RxLib?
← →
@!!ex © (2007-11-15 21:27) [7]> Твой не компилится... :( Подскажи как его запустить?
Скажи че не компилится, скажу что надо сделать.
У меня все работает. Тебе весь модуль целиком залил.
P.S.
Тут есть ошибка в коде, часы не правильно отображаются.
Надо так:Angle:=OneCircleHourAngle*(CurTime.wHour)+OneCircleHourAngle*(CurTime.wMinute/60);
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c