![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Таймер
>BeRDor< © (2006-06-02 18:46:00)Почитал в учебнике, толком ниче не понял про него. Нужно, допустим сделать так - Запускаеться прога, одновременно запускаеться Timer, потом после нажатия на кнопку, таймер остонавливаеться и время выводиться в окно сообщения. Пробывал сделать так:
var
...
ColTime:TDateTime;
...
В create формы
Var
...
ht, mt, st, mst:word;
...
form1.Timer1.Enabled := True;
ColTime := Time;
...
В OnClick
...
DecodeTime((Time-ColTime)/MaxTick, ht, mt, st, mst);
showmessage(IntToStr(st)+ ' секунд');
...
после запуска, и нажатия на кнопку он показывает неправильное кол-во секунд. В чем ошибка?
ZV (2006-06-04 00:34:00) [1]Вот дался тебе этот таймер. Держи код и вникай в суть Timer. Тут тебе и минут и секунды и Interval. Экспериментируй. Читай комментарии , но знай, команда Timer нужна не для измерения времени, конечно можно делать и это, но это не её основная задача. С помощью этой команды в основном делается повторения тех команд которые ты вставишь в процедуру Timer.
Ниже код
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
Timer1: TTimer;
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
min,sec:integer; // минуты/секунды
implementation
{$R *.dfm}
// Процедура обработки события Click для левой кнопки ("Запуск/Стоп").
procedure TForm1.Button1Click(Sender: TObject);
begin
if Timer1.Enabled
then
// Если секундомер работает,
begin
Timer1.Enabled:=False; // то останавливаем таймер.
Button1.Caption:='Пуск'; // Меняем название кнопки со "Стоп" на "Пуск".
Button2.Enabled:=True; // Кнопка "Сброс" теперь доступна.
end
else
// Если секундомер не работает,
begin
Timer1.Enabled:=True; // то запускаем таймер.
Button1.Caption:='Стоп'; // Меняем название кнопки с "Пуск" на "Стоп".
Button2.Enabled:=False; // Кнопка "Сброс" теперь недоступна.
end;
end;
// Процедура обработки события таймера.
procedure TForm1.Timer1Timer(Sender: TObject);
var str:string;
begin
if sec = 59 then // Если кол-во секунд равно 59,
begin // то увеличиваем минуты на 1,
inc(min); // а секунды обнуляем.
sec := 0;
end // В противном случае просто
else // наращиваем секунды.
inc(sec);
// формируем строку в формате m:ss.
str := str + IntToStr(sec);
if Length(str) = 1 then str := '0' + str;
str := IntToStr(min) + ':' + str;
Panel1.Caption := str;
end;
// Процедура обработки события Click для правой кнопки ("Сброс").
procedure TForm1.Button2Click(Sender: TObject);
begin
sec := 0;
min := 0;
Panel1.Caption := '0:00';
end;
end.
>BeRDor< (2006-06-03 18:20:00) [2]To antonn ©
Сенкс !
antonn (2006-06-03 16:59:00) [3]Interval - кол-во миллисекунд до срабатывания обработчика OnTimer.
Tag - "на всякий случай":)
> Окно, в нем Label. Когда нажимаешь на кнопку СТАРТ,
> запускаеться секундомер (который я пытался сделать с
> помощью таймера), жмешь кнопку СТОП, секундомер
> останавливаеться и в LABEL выводиться время. Мож кто
> поможет Plz....
можно и без таймера прошедшее время найти.
var dd:Tdatetime;
procedure TForm1.Button1Click(Sender: TObject);
begin
dd:=now;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption:=formatdatetime('nn:ss:zzzz',now-dd);
end;
>BeRDor< (2006-06-03 16:42:00) [4]Хм...тока что сделал.
...
Var
a:integer;
...
...
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
inc(a);Label1.Caption:= IntToStr(a);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
timer1.Enabled:=false;
Label1.Caption:= IntToStr(a);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled:=false;
end;
end.
Все работает, но не понял, что такое Interval(ставлю 10 000 вроде счетчик идет примерно так же как и секунды) и что такое Tag? И как "извлеч" минуты?
>BeRDor< (2006-06-03 16:33:00) [5]Наверно неправильно выразазился. Вообщем мне нада сделать так.
Окно, в нем Label. Когда нажимаешь на кнопку СТАРТ, запускаеться секундомер (который я пытался сделать с помощью таймера), жмешь кнопку СТОП, секундомер останавливаеться и в LABEL выводиться время. Мож кто поможет Plz....
TUser (2006-06-02 19:34:00) [6]При создании формы запоминаешь время
FStartTime := now();
При нажатии на кнопку
Label1.Caption := ...
Virgo_Style (2006-06-02 19:19:00) [7]>BeRDor< (02.06.06 18:55) [2]
Если ты решил, что нужен, то зачем нужен - решать тоже тебе
ZV (2006-06-02 19:07:00) [8]Таймер генерирует последовательность событий. Ты в процедуру Таймера пишешь команды которые будут беспрерывно выполнятся пока запущен таймер (true) получается типа круговорота которому ты можешь задать частоту (Interval).
palva (2006-06-02 19:03:00) [9]> А в чем ошибка то? Как можно сделать?
Ошибка зависит от того, что вы хотите сделать.
>BeRDor< (2006-06-02 18:55:00) [10]Ну нужен или нет, эт решать мне)) А в чем ошибка то? Как можно сделать? Или допустим жмешь одну кнопку, таймер запускаеться, жмешь другую - останавиливаеться--- как такое сделать?
Eraser (2006-06-02 18:52:00) [11]
> >BeRDor< (02.06.06 18:46)
не правильно понял суть работы таймера.
Тут таймер вообще не нужен.