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 21:04
Сообщение #2


Гость






Это имеешь в виду: Простые часы ? Это именно часы, но секундомер пишется по тому же принципу.
 К началу страницы 
+ Ответить 
striker
сообщение 6.06.2009 21:16
Сообщение #3


Пионер
**

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

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


А где можно модули скачать для неё?
Бета-версия ругается на модули, а с WinApi вообще непонятно, там вообще много ругательств smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.06.2009 22:21
Сообщение #4


Гость






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

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.
Чтобы оно запускалось повторно - надо "обернуть" это все еще одним циклом...
 К началу страницы 
+ Ответить 
striker
сообщение 7.06.2009 10:14
Сообщение #5


Пионер
**

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

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


Спасибо большое!

Добавил цикл. Только вот когда нажимаешь кнопку для
остановки стрелка пропадает, потом нажимаю для старта - появляется. Куда добавить
чтобы она в последнем положении замирала?


Добавлено через 11 мин.

А, разобрался
Ещё немного
нагло. Не встречал электронный, т.е цифровой секундомер в графическом режиме
т.е цифры большие на экране считают?

Сообщение отредактировано: striker - 7.06.2009 10:27
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.06.2009 10:27
Сообщение #6


Гость






Я бы сделал так:
begin
  gd := detect;
  initgraph(gd, gm, '');
  Draw(getmaxx div 2, getmaxy div 2);
  setwritemode(xorput);

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

      curr_time := GetTime;
      while GetTime - curr_time < 100 do;
      if keypressed then begin
        stop := true; while keypressed do readkey;
      end;

      if not stop then begin
        DrawArrow(getmaxx div 2, getmaxy div 2, i mod 60);
        inc(i);
      end;
    until stop;

    while not keypressed do;
    finished := readkey = #27;
    DrawArrow(getmaxx div 2, getmaxy div 2, i mod 60);
  until finished;
  closegraph;
end.
Нажатие Esc в положении Stop = выход из программы... Для повторного старта - любая другая клавиша...

Добавлено через 52 сек.
Цитата
Не встречал электронный, т.е цифровой секундомер в графическом режиме т.е цифры большие на экране считают?
Готовый - не встречал, семисегментные индикаторы делал сам...
 К началу страницы 
+ Ответить 
striker
сообщение 7.06.2009 10:32
Сообщение #7


Пионер
**

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

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


А что такое семисегментные?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.06.2009 10:35
Сообщение #8


Гость






Каждая цифра состоит из 7-ми сегментов:
Wiki: Семисегментный индикатор

Если надо, то см. здесь: Графика на Паскале, Часы
 К началу страницы 
+ Ответить 
striker
сообщение 7.06.2009 10:42
Сообщение #9


Пионер
**

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

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


Спасибо.
А не подскажешь почему у меня при запуске в TP экран сразу сворачивается? blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.06.2009 10:44
Сообщение #10


Гость






Не знаю, у меня ничего не сворачивается... Можешь попробовать добавить
g_driver := detect;
первой строкой, может от этого?
P.S. Вопросы по другим программам - не здесь, договорились? Здесь - только о секундомере со стрелкой...
 К началу страницы 
+ Ответить 
striker
сообщение 7.06.2009 10:49
Сообщение #11


Пионер
**

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

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


ок smile.gif

Сообщение отредактировано: striker - 7.06.2009 10:49
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 

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