IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> секундомер графический, нужна программа
striker
сообщение 6.06.2009 20:59
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской

Репутация: -  0  +


Нужен секундомер в графике. Циферблат, нажатие кнопки - старт/стоп
Где-то недавно видел готовый, нужен для одной идеи.
Помогите найти пожалуйста и подскажите
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 6.06.2009 22:21
Сообщение #2


Гость






А, у тебя Турбо Паскаль... Ясно. Тогда за основу можешь взять вот это (я не знаю, как у тебя замеряется время, что еще должно происходить, вот код, который просто рисует секундомер, и останавливает его по нажатию любой кнопки на клавиатуре...)

uses crt, dos, graph;

const
R = 100;
angle = (360 / 60) * pi / 180;

procedure Draw(CX, CY: integer);
var
i: integer;
len: integer;
begin
setcolor(white);
circle(cx, cy, R);
for i := 0 to 59 do begin
if i mod 5 = 0 then begin
setcolor(lightred); len := 5;
end
else begin
setcolor(white); len := 3;
end;

line(
cx + Trunc((R - len) * cos(i*angle)),
cy - Trunc((R - len) * sin(i*angle)),
cx + Trunc((R + len) * cos(i*angle)),
cy - Trunc((R + len) * sin(i*angle))
);
end;
end;

procedure DrawArrow(CX, CY: integer; sec: integer);
const
ArrowLen = 0.8;
begin
line(
cx, cy,
cx + Trunc(ArrowLen*R * cos(pi/2 - sec*angle)),
cy - Trunc(ArrowLen*R * sin(pi/2 - sec*angle))
);
end;

Function GetTime: LongInt;
Var
h, m, s, ms: Word;
R: longint;
begin
Dos.GetTime(h, m, s, ms);
GetTime := ms + 100 * (s + 60 * (longint(m) + 60 * h));
end;

var
gd, gm: integer;
i: integer;
curr_time: longint;
stop: boolean;

begin
gd := detect;
initgraph(gd, gm, '');
Draw(getmaxx div 2, getmaxy div 2);
setwritemode(xorput);

i := 0; stop := false;
repeat
DrawArrow(getmaxx div 2, getmaxy div 2, i mod 60);

curr_time := GetTime;
while GetTime - curr_time < 100 do; { просто ждем 1 секунду }
if keypressed then begin
stop := true; while keypressed do readkey;
end;

DrawArrow(getmaxx div 2, getmaxy div 2, i mod 60);
inc(i);
until stop;

readln;
closegraph;
end.
Чтобы оно запускалось повторно - надо "обернуть" это все еще одним циклом...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 28.07.2025 3:50
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"