|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
25.05.2010, 16:49 | #1 |
Пользователь
Регистрация: 25.05.2010
Сообщений: 14
|
Секундомер на Delphi
Есть секундомер. Он действует так: Пуск-Стоп. А как "засечь" промежуточный результат?
|
25.05.2010, 16:54 | #2 |
А может и не...
Участник клуба
Регистрация: 27.03.2010
Сообщений: 1,269
|
Используй таймер и считай секунды (или сотые доли секунд для полного счастия!!!). Нажатие "Пуск" - запускает таймер; Нажатие "Стоп" - останавливает таймер. Вывод результата - хорошо смотрится на цифровом сегментном индикаторе...
Перемешивай дело с бездельем и не сойдешь с ума...
|
25.05.2010, 16:55 | #3 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
взять разницу между текущим временем и началом (стартовым временем)...
А вообще, чтобы конкретно и правильно ответить на Ваш вопрос надо видеть, как Вы создали свой секундомер, что происходит при действиях "Пуск" и "Стоп"... |
25.05.2010, 16:58 | #4 |
Пользователь
Регистрация: 25.05.2010
Сообщений: 14
|
В том-то и дело: если я нажму "стоп" таймер остановится, а нужно чтоб он продолжил работу. Один финишировал(промежуточный результат), а остальные еще бегут!
|
25.05.2010, 16:58 | #5 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
В любом случае думаю автору нужна будет функция Now, возвращающая текущее время-дату.
А насчет как засечь, тут как правильно сказал Серж - "надо видеть, как Вы создали свой секундомер" т.е. что использовано в коде.
I'm learning to live...
|
25.05.2010, 17:04 | #6 |
А может и не...
Участник клуба
Регистрация: 27.03.2010
Сообщений: 1,269
|
Извините, но не совсем понимаю зачем выполнять какие-то вычисления между началом(пуском) и текущим системным временем. Пускаем таймер и по кнопке "Стоп" фиксируем промежуточные результаты. Нужно несколько показаний - делаем несколько индикаторов (да хоть динамически)
Перемешивай дело с бездельем и не сойдешь с ума...
|
25.05.2010, 17:06 | #7 |
Пользователь
Регистрация: 25.05.2010
Сообщений: 14
|
Вот исходник:
unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; Button2: TButton; Timer1: TTimer; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; msec, sec, min:integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled:=not Timer1.Enabled; if Timer1.Enabled then button1.Caption:='Стоп' else button1.Caption:='Старт' end; procedure TForm1.Timer1Timer(Sender: TObject); var s:string; begin if msec=9then inc(sec);//если кол-во миллисекунд равно девяти, то //добавляем 1 к секундам if msec<9then inc(msec)//если кол-во миллисекунд меньше 9 //то добавляем 1 к миллисекундам else msec:=0;//иначе обнуляем миллисекунду if sec=60 then begin sec:=0; inc(min);// если кол-во секунд 60, то обнуляем секунды и // добавляем 1 к минутам end; s:=IntToStr(min)+':';//меняем значение переменной s на кол-во минут if sec<10 then s:=s+'0'+IntToStr(sec)//если кол-во секунд меньше 10, //то добавляем к уже имеющемуся s ноль и кол-во секунд else s:=s+IntToStr(sec);//в противном случае добавляем только //кол-во секунд s:=s+','; //добавляем к s запятую if msec<9 then s:=s+IntToStr(msec) else s:=s+IntToStr(msec); Label1.Caption:=s; end; procedure TForm1.Button2Click(Sender: TObject); begin Timer1.Enabled:=false;//останавливаем таймер msec:=0; sec:=0; min:=0;//обнуляем все переменные Label1.Caption:='0:00,0'; Button1.Caption:='Старт '; end; procedure TForm1.FormCreate(Sender: TObject); begin Label1.Caption:='0:00,0'; Button1.Caption:='Старт'; Button2.Caption:='Сброс'; Timer1.Enabled:=false end; end. |
25.05.2010, 21:35 | #8 |
Пользователь
Регистрация: 22.01.2010
Сообщений: 37
|
Секундомер
Попробуйте код. Поместите на форму 2 Лейбла, Таймер, 1 Эдит, 2 Буттона:
1 Буттон - Пуск, 2 Буттон - засечка времени, 1 BitBtn Kind - Close. # unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; Label1: TLabel; Label2: TLabel; Button1: TButton; Button2: TButton; BitBtn1: TBitBtn; Edit1: TEdit; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: Char); procedure Edit1Exit(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; NowTime, MyTime: TTime; MyEdit: array[1..10] of TEdit; n, i, t: integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled:=true; NowTime:=Time; Label1.Caption:=TimeToStr(NowTime); end; procedure TForm1.Timer1Timer(Sender: TObject); begin Label2.Caption:=TimeToStr(Now-NowTime); end; procedure TForm1.Button2Click(Sender: TObject); begin for i:=1 to n do if MyEdit[i].Text='0' then begin MyEdit[i].Text:=Label2.Caption; Exit; end; end; procedure TForm1.FormCreate(Sender: TObject); begin t:=30; Button1.Caption:='Пуск'; Button2.Caption:='Время' end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Key=#13 then Button1.SetFocus; end; procedure TForm1.Edit1Exit(Sender: TObject); begin n:=StrToInt(Edit1.Text); if n>0 then for i:=1 to n do begin MyEdit[i]:=TEdit.Create(Self); MyEdit[i].Parent:=Form1; MyEdit[i].Top:=t*i; MyEdit[i].Left:=150; MyEdit[i].Text:='0'; end; end; end. # n - кол-во участников. В Эдит1 вводите кол-во участников (например, 3). Нажмёте Enter - появятся 3 Эдита. Нажмете Буттон1 - запустится таймер. Нажмёте Буттон2 - в Эдитах будет время, прошедшее с момента нажатия на Буттон1. Последний раз редактировалось Fuadik; 26.05.2010 в 18:38. Причина: Добавление |
27.05.2010, 17:20 | #9 |
Пользователь
Регистрация: 25.05.2010
Сообщений: 14
|
Как бы работает, но... ввожу количество участников, нажимаю Enter - никакой реакции. Edit-ы не появляются. И еще - нужны "десятки"(Десятые доли секунд).
|
27.05.2010, 20:06 | #10 |
Пользователь
Регистрация: 22.01.2010
Сообщений: 37
|
Все работает, сейчас проверил. После того, как вы поместите на форму указанные компоненты, скопируйте мой код в ваш Unit1. Потом кликните на Буттон1, Буттон2, Эдит1. В инспекторе объектов для Эдит1 кликните OnExit, OnKeyPress, для Таймера OnTimer, для Формы OnCreate. Все заработает. А с "десятками" разберётесь потом. Сообщите, если заработает.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Секундомер | girkoff | Общие вопросы C/C++ | 3 | 26.12.2009 12:30 |
Секундомер | aesoem | Общие вопросы Delphi | 10 | 28.01.2008 19:25 |
секундомер | itisiam | Общие вопросы Delphi | 6 | 31.05.2007 16:55 |