Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.09;
Скачать: CL | DM;

Вниз

Вопрос про часики (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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
2-1194871765
СержК
2007-11-12 15:49
2007.12.09
Есть ли для TreeView что-то вроде AfterScrol


2-1195214548
no3ep
2007-11-16 15:02
2007.12.09
printers


15-1194944354
Ega23
2007-11-13 11:59
2007.12.09
конкурс на имя класса


6-1175434020
Lyberzon
2007-04-01 17:27
2007.12.09
Как отправить на печать документ из TWebBrowser?


4-1179894213
Klopan
2007-05-23 08:23
2007.12.09
Включение флешки