Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Таймер


>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]

> А в чем ошибка то? Как можно сделать?
Ошибка зависит от того, что вы хотите сделать.


&gt;BeRDor&lt;   (2006-06-02 18:55:00) [10]

Ну нужен или нет, эт решать мне)) А в чем ошибка то? Как можно сделать? Или допустим жмешь одну кнопку, таймер запускаеться, жмешь другую - останавиливаеться--- как такое сделать?


Eraser   (2006-06-02 18:52:00) [11]


> >BeRDor<   (02.06.06 18:46)

не правильно понял суть работы таймера.
Тут таймер вообще не нужен.


Наверх

Титульная страница Поиск, карта сайта Написать письмо