|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.02.2007, 12:47 | #1 |
Регистрация: 21.02.2007
Сообщений: 4
|
КАК поделить цыферблат часов на 10 равных частей?
Столкнулся с такой проблемой -- мне надо разбить цыферблат цасов не на 12 частей а на 10.
Я пыталься разбить на 10 частей в этом исходнике, но у меня нечего невышло, т.к. там разбивка задается формулой. unit clock_; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure FormPaint(Sender: TObject); procedure Timer1Timer(Sender: TObject); // эти объявления вставлены вручную procedure Vector(x0,y0,a,l: integer); procedure DrawClock; private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses DateUtils; // для доступа к SecondOf, // MinuteOf и HourOf const R = 75 ; // радиус циферблата часов var x0,y0: integer; // центр циферблата ahr,amin,asec: integer; // положение стрелок (угол) // инициализация формы procedure TForm1.FormCreate(Sender: TObject); var t: TDateTime; begin // зададим размер формы // в соответствии с размером циферблата ClientHeight := (R+10)*2; ClientWidth := (R+10)*2; x0 := R+10; y0 := R+10; t := Now(); // положение стрелок ahr := 90 - HourOf(t)*30-(MinuteOf(Today)div 12)*6; amin := 90 - MinuteOf(t)*6; asec := 90 - SecondOf(Today)*6; Timer1.Interval := 1000; // период сигнал от таймера 1 сек Timer1.Enabled := True; // пуск таймера end; // вычерчивает вектор заданной длины из точки (x0,y0) procedure TForm1.Vector(x0,y0: integer; a, l: integer); // x0,y0 - начало вектора // a - угол между осью x и вектором // l - длина вектора const GRAD = 0.0174532; // коэффициент пересчета угла из градусов в радианы var x,y: integer; // координаты конца вектора begin Canvas.MoveTo(x0,y0); x := Round(x0 + l*cos(a*GRAD)); y := Round(y0 - l*sin(a*GRAD)); Canvas.LineTo(x,y); end; // рисует стрелки procedure TForm1.DrawClock; var t: TDateTime; begin // шаг секундной и минутной стрелок 6 градусов, // часовой - 30. // стереть изображение стрелок Canvas.Pen.Color := clBtnFace; Canvas.Pen.Width :=3; // часовую Vector(x0,y0, ahr, R-20); // минутную Vector(x0,y0, amin, R-15); // секундную Vector(x0,y0, asec, R-7); t := Now(); // новое положение стрелок ahr := 90 - HourOf(t)*30-(MinuteOf(t)div 12)*6; amin := 90 - MinuteOf(t)*6; asec := 90 - SecondOf(t)*6; // нарисовать стрелки // часовая стрелка Canvas.Pen.Width := 3; Canvas.Pen.Color := clBlack; Vector(x0,y0, ahr, R-20); // минутная стрелка Canvas.Pen.Width := 2; Canvas.Pen.Color := clBlack; Vector(x0,y0, amin, R-15); // секундная стрелка Canvas.Pen.Width := 1; Canvas.Pen.Color := clYellow; Vector(x0,y0, asec, R-7); end; // прорисовка циферблата и начальных стрелок procedure TForm1.FormPaint(Sender: TObject); var x,y: integer; // координаты маркера на циферблате a: integer; // угол между OX и прямой (x0,yo) (x,y) pc: TColor; // цвет карандаша pw: integer; // ширина карандаша begin pc := Canvas.Pen.Color; pw := Canvas.Pen.Width; Canvas.Pen.Width := 1; Canvas.Pen.Color := clBlack; a:=0; // метки ставим от 3-х часов, против // часовой стрелки // циферблат while a < 360 do begin x:=x0+Round( R * cos(a*2*pi/360)); y:=x0-Round( R * sin(a*2*pi/360)); Form1.Canvas.MoveTo(x,y); if (a mod 30) = 0 then Canvas.Ellipse(x-2,y-2,x+3,y+3) else Canvas.Ellipse(x-1,y-1,x+1,y+1); a:=a+6; // 1 минута - 6 градусов end; // восстановить карандаш кисть Canvas.Pen.Width := pw; Canvas.Pen.Color := pc; DrawClock; end; // прорисовка текущих положений стрелок часов procedure TForm1.Timer1Timer(Sender: TObject); begin DrawClock; end; end. Помогите плиз, если придложите чтото другое буду благодпрен. |
28.02.2007, 13:15 | #2 |
Пользователь
Регистрация: 21.02.2007
Сообщений: 26
|
попробуй сделать электронные часы там разбивать ничего не нада)
|
28.02.2007, 13:41 | #3 |
Павел Сергеевич
Форумчанин
Регистрация: 05.11.2006
Сообщений: 665
|
Не стал пробовать код, опиши в чем именно проблема: в прорисовке часов, стрелок или и того и другого? И, кстати, а для чего тебе такие часики?
Познавая других, мы познаем себя.
С'est la vie... |
28.02.2007, 14:27 | #4 |
Регистрация: 21.02.2007
Сообщений: 4
|
Из этих часов я сделал визуальный счетчик для жидкости (мне это надо для стенда лабораторных работ по гидравлике)
Проблема именно в том чтобы слелать 10 делений (т.к. та счетчике должно быть 10 зассечек а не 12) |
28.02.2007, 19:51 | #5 |
Форумчанин
Регистрация: 24.02.2007
Сообщений: 104
|
Вопервых в процедуре разбивки циферблата
a:real а не integer и во вторых a:=a+7.2 //сосответсвенно минута по 10 часовой шкале (если конечно в часу должно быть 5 делений) а вообще раздели 360 на количество делений и получишь шаг
Разберемся.......
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите пожалуйста при написании графических часов на С | Black_Ak24 | Общие вопросы C/C++ | 7 | 12.06.2008 10:24 |
сколькими способами можно разрезать прямоугольник на n-ное количество частей? | 4ingiz | Общие вопросы Delphi | 2 | 31.01.2008 06:40 |
Иконка у часов | Lonix | Безопасность, Шифрование | 4 | 03.04.2007 22:49 |