Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 20.10.2016
Сообщений: 86
1

работа с таймером

25.06.2019, 08:38. Показов 1222. Ответов 24
Метки нет (Все метки)

здравствуйте работаю с таймеров впервые и есть вопросы застрял когда переменная stol равна 1 идет отчет обратный в label1 а когда stol равен 2 то он почему то выполняет cобытие ontime первого таймера а потом второго только и тогда он в двух label ставит значения последнего выставленого обратного отчета. мне нужно чтобы они работали независимо друг от друга допустим таймер первый на час а второй на 3 часа и у каждого свой обратный отчет
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm3.Button1Click(Sender: TObject);
begin
 case stol of
   1 : begin
         Timer1.Enabled :=true;
       end;
   2 : begin
         Timer2.Enabled :=true;
       end;
   3 : begin
         Timer3.Enabled :=true;
 
       end;
   4 : begin
         Timer4.Enabled :=true;
       end;
 end;
end;
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
procedure TForm3.Timer1Timer(Sender: TObject);
var h,m,s :word;
begin
 h :=(time-k )div 3600;
 m :=((time-k)-h*3600) div 60;
 s :=(time-k)-h*3600-m*60;
 if k<time then begin
   form1.lb1.Caption := Format('%d : %d :  %d',[h,m,s]);
 end;
inc(k);
end;
 
procedure TForm3.Timer2Timer(Sender: TObject);
var h,m,s :word;
begin
 h :=(time-k1 )div 3600;
 m :=((time-k1)-h*3600) div 60;
 s :=(time-k1)-h*3600-m*60;
 if k1<time then  begin
  form1.lb2.Caption := Format('%d : %d :  %d',[h,m,s]);
 
 
 
end;
inc(k1);
end;
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2019, 08:38
Ответы с готовыми решениями:

Работа с таймером
В первые пробую таймер и сразу проблема суть: при появлении формы требуется если нажата кнопка 1...

Работа с таймером
Ребят подскажи пожалуйста, вот у меня есть stringgrid и на нем стоит защита от ввода информации,...

Работа с таймером
Помогите разобраться в организации работы с таймером. От программы требуется, чтобы каждые n...

Работа с таймером
Здравствуйте, первый раз на этом форуме и в делфи, так что не обессудте. Вопрос такой: Как...

24
Продавец времени
5577 / 3047 / 700
Регистрация: 12.03.2015
Сообщений: 14,694
25.06.2019, 08:40 2
Цитата Сообщение от OneXend Посмотреть сообщение
здравствуйте работаю с таймеров впервые и есть вопросы застрял когда переменная stol равна 1 идет отчет обратный в label1 а когда stol равен 2 то он почему то выполняет cобытие ontime первого таймера а потом второго только и тогда он в двух label ставит значения последнего выставленого обратного отчета. мне нужно чтобы они работали независимо друг от друга допустим таймер первый на час а второй на 3 часа и у каждого свой обратный отчет
Переведи на русский, пожалуйста.
1
0 / 0 / 1
Регистрация: 20.10.2016
Сообщений: 86
25.06.2019, 08:44  [ТС] 3
после этой строчки T
Delphi
1
timer2.Enabled :=true;
разве он не должен переходить на второй таймер?просто после этой строчки он сразу переходит в событие ontime первого таймера

Добавлено через 3 минуты
Цитата Сообщение от Verevkin Посмотреть сообщение
Переведи на русский, пожалуйста.
ну в общем задача такая мне нужно прикрутить допустим 2 таймера обратного отчета и чтобы они работали независимо друг от друга
просто когда открываю первую картинку как бы стол равен 1 и задаю 1 час первый таймер работает нормально идет отчет в label 1
а когда открываю картинку номер 2 то у меня стол становится номером 2 также задаю время допустим 3 часа то у меня в двух label начинается отчет 3 часов
0
2185 / 1125 / 406
Регистрация: 15.11.2015
Сообщений: 4,489
25.06.2019, 09:20 4
OneXend, таймеры работают независимо друг от друга. Просто если надо, чтобы работал только один таймер, то остальные нужно выключать.

Цитата Сообщение от OneXend Посмотреть сообщение
разве он не должен переходить на второй таймер?просто после этой строчки он сразу переходит в событие ontime первого таймера
Эта строчка просто включает таймер. В обработчик события первого таймера переходит потому, что первый таймер работает и возникло событие от него.
1
0 / 0 / 1
Регистрация: 20.10.2016
Сообщений: 86
25.06.2019, 10:28  [ТС] 5
Цитата Сообщение от AzAtom Посмотреть сообщение
OneXend, таймеры работают независимо друг от друга. Просто если надо, чтобы работал только один таймер, то остальные нужно выключать.


Эта строчка просто включает таймер. В обработчик события первого таймера переходит потому, что первый таймер работает и возникло событие от него.
а как мне сделать чтобы два таймера работали независимо друг от друга?
0
2185 / 1125 / 406
Регистрация: 15.11.2015
Сообщений: 4,489
25.06.2019, 10:35 6
OneXend, они итак работают независимо друг от друга и у каждого свой обработчик события OnTimer.
1
2335 / 1142 / 461
Регистрация: 19.03.2019
Сообщений: 3,640
25.06.2019, 10:36 7
Цитата Сообщение от OneXend Посмотреть сообщение
а как мне сделать чтобы два таймера работали независимо друг от друга?
два таймера и так работают независимо друг от друга.
ничего специально делать не надо.
1
0 / 0 / 1
Регистрация: 20.10.2016
Сообщений: 86
25.06.2019, 10:38  [ТС] 8
понятно только вот незнаю как сделать их работающими

Добавлено через 45 секунд
Цитата Сообщение от OneXend Посмотреть сообщение
после этой строчки T
Delphi
1
timer2.Enabled :=true;
разве он не должен переходить на второй таймер?просто после этой строчки он сразу переходит в событие ontime первого таймера

Добавлено через 3 минуты

ну в общем задача такая мне нужно прикрутить допустим 2 таймера обратного отчета и чтобы они работали независимо друг от друга
просто когда открываю первую картинку как бы стол равен 1 и задаю 1 час первый таймер работает нормально идет отчет в label 1
а когда открываю картинку номер 2 то у меня стол становится номером 2 также задаю время допустим 3 часа то у меня в двух label начинается отчет 3 часов
просто вот так у меня
0
2185 / 1125 / 406
Регистрация: 15.11.2015
Сообщений: 4,489
25.06.2019, 10:46 9
Цитата Сообщение от OneXend Посмотреть сообщение
после этой строчки
timer2.Enabled :=true;
разве он не должен переходить на второй таймер?
Переходить не должен. Должен запускать таймер. То есть, обработчик Button1Click, в котором таймер включается, завершиться и уже потом через указанное в Interval количество миллисекунд сработает обработчик Timer2Timer.
1
0 / 0 / 1
Регистрация: 20.10.2016
Сообщений: 86
25.06.2019, 10:50  [ТС] 10
Цитата Сообщение от AzAtom Посмотреть сообщение
Переходить не должен. Должен запускать таймер. То есть, обработчик Button1Click, в котором таймер включается, завершиться и уже потом через указанное в Interval количество миллисекунд сработает обработчик Timer2Timer.
в первом и во втором таймере стоит интервал 1 секунда но когда stol = 2 то запускается получается первый почему то таймер а потом второй и в итоге получается что два лейбла в одинаковом отсчете
0
2335 / 1142 / 461
Регистрация: 19.03.2019
Сообщений: 3,640
25.06.2019, 10:51 11
Цитата Сообщение от OneXend Посмотреть сообщение
понятно только вот незнаю как сделать их работающими
на каждый таймер на OnTimer назначить свою процедуру обработки.
задать интервалы срабатывания для каждого таймера.

когда нужно включить таймер делаешь
Delphi
1
timerXX.Enabled := true;
когда надо выключить делаешь
Delphi
1
timerXX.Enabled := false;
всё.

Цитата Сообщение от OneXend Посмотреть сообщение
просто вот так у меня
код свой показывай.
1
0 / 0 / 1
Регистрация: 20.10.2016
Сообщений: 86
25.06.2019, 10:54  [ТС] 12
как бы обьянснить в общем после того как любой второй стол откроешь не важно с первого или второго стола открывать начал второй по порядку меняет в двух лейблах отчет обратный а на первом все нормально отчет идет

Добавлено через 57 секунд
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
на каждый таймер на OnTimer назначить свою процедуру обработки.
задать интервалы срабатывания для каждого таймера.

когда нужно включить таймер делаешь
Delphi
1
timerXX.Enabled := true;
когда надо выключить делаешь
Delphi
1
timerXX.Enabled := false;
всё.


код свой показывай.
код выше скинул же

Добавлено через 30 секунд
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
  Form3: TForm3;
  time,k,k1,k2,k3: integer;
implementation
 
uses Unit2, Unit1;
 
{$R *.dfm}
 
procedure TForm3.Button1Click(Sender: TObject);
begin
 case stol of
   1 : begin
         Timer1.Enabled :=true;
       end;
   2 : begin
         Timer2.Enabled :=true;
       end;
   3 : begin
         Timer3.Enabled :=true;
 
       end;
   4 : begin
         Timer4.Enabled :=true;
       end;
 end;
end;
 
procedure TForm3.ComboBox1Change(Sender: TObject);
begin
 case ComboBox1.ItemIndex of
  0 : begin
    label1.Caption := '30 минут';
    label2.Caption := '250 тенге';
    time :=1800;
  end;
  1 : begin
    label1.Caption := '1 час';
    label2.Caption := '500 тенге';
     time :=3600;
  end;
  2 : begin
    label1.Caption := '2 часа';
    label2.Caption := '800 тенге';
     time :=3600;
  end;
  3 : begin
    label1.Caption := '3 часа';
    label2.Caption := '1000 тенге';
    time :=10800;
  end;
 
  end;
end;
 
procedure TForm3.FormCreate(Sender: TObject);
begin
    k := 0;
    k1 := 0;
    k2 := 0;
    k3 := 0;
//dbtarif.KeyValue := dbtarif.ListSource.DataSet.FieldByName(dbtarif.KeyField).Value;
end;
 
procedure TForm3.FormShow(Sender: TObject);
begin
 
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('SELECT DISTINCT наименование FROM меню');
  ADOQuery1.Open;
   // ---------Заполняем ComboBox1 ---------- //
  ComboBox1.Items.Clear;
  While not ADOQuery1.Eof do
  begin
     ComboBox1.Items.Add(ADOQuery1.Fields[0].AsString);
     ADOQuery1.Next;
  end;
end;
 
 
procedure TForm3.Timer1Timer(Sender: TObject);
var h,m,s :word;
begin
 h :=(time-k )div 3600;
 m :=((time-k)-h*3600) div 60;
 s :=(time-k)-h*3600-m*60;
 if k<time then begin
   form1.lb1.Caption := Format('%d : %d :  %d',[h,m,s]);
 end;
inc(k);
end;
 
procedure TForm3.Timer2Timer(Sender: TObject);
var h,m,s :word;
begin
 h :=(time-k1 )div 3600;
 m :=((time-k1)-h*3600) div 60;
 s :=(time-k1)-h*3600-m*60;
 if k1<time then  begin
  form1.lb2.Caption := Format('%d : %d :  %d',[h,m,s]);
 
 
 
end;
inc(k1);
end;
 
end.
0
2185 / 1125 / 406
Регистрация: 15.11.2015
Сообщений: 4,489
25.06.2019, 11:06 13
OneXend, stol где объявлена? Где инициализируется? Где изменяется?
1
0 / 0 / 1
Регистрация: 20.10.2016
Сообщений: 86
25.06.2019, 11:10  [ТС] 14
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
procedure TForm1.Image1Click(Sender: TObject);
begin
stol :=1;
form2.lbStol.Caption := inttostr(stol);
form2.showmodal;
end;
 
procedure TForm1.Image2Click(Sender: TObject);
begin
stol :=2;
form2.lbStol.Caption := inttostr(stol);
form2.showmodal;
end;
 
procedure TForm1.Image3Click(Sender: TObject);
begin
stol :=3;
form2.lbStol.Caption := inttostr(stol);
form2.showmodal;
 
end;
 
procedure TForm1.Image4Click(Sender: TObject);
begin
stol :=4;
form2.lbStol.Caption := inttostr(stol);
form2.showmodal;
Добавлено через 1 минуту
Цитата Сообщение от AzAtom Посмотреть сообщение
OneXend, stol где объявлена? Где инициализируется? Где изменяется?
тут
0
2185 / 1125 / 406
Регистрация: 15.11.2015
Сообщений: 4,489
25.06.2019, 11:12 15
Переменная time где инициализируется и увеличивается?

Вообще, этой переменной time запутал, есть системная функция time, возвращает текущее время...
1
0 / 0 / 1
Регистрация: 20.10.2016
Сообщений: 86
25.06.2019, 11:14  [ТС] 16
Цитата Сообщение от OneXend Посмотреть сообщение
как бы обьянснить в общем после того как любой второй стол откроешь не важно с первого или второго стола открывать начал второй по порядку меняет в двух лейблах отчет обратный а на первом все нормально отчет идет

Добавлено через 57 секунд

код выше скинул же

Добавлено через 30 секунд
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
  Form3: TForm3;
  time,k,k1,k2,k3: integer;
implementation
 
uses Unit2, Unit1;
 
{$R *.dfm}
 
procedure TForm3.Button1Click(Sender: TObject);
begin
 case stol of
   1 : begin
         Timer1.Enabled :=true;
       end;
   2 : begin
         Timer2.Enabled :=true;
       end;
   3 : begin
         Timer3.Enabled :=true;
 
       end;
   4 : begin
         Timer4.Enabled :=true;
       end;
 end;
end;
 
procedure TForm3.ComboBox1Change(Sender: TObject);
begin
 case ComboBox1.ItemIndex of
  0 : begin
    label1.Caption := '30 минут';
    label2.Caption := '250 тенге';
    time :=1800;
  end;
  1 : begin
    label1.Caption := '1 час';
    label2.Caption := '500 тенге';
     time :=3600;
  end;
  2 : begin
    label1.Caption := '2 часа';
    label2.Caption := '800 тенге';
     time :=3600;
  end;
  3 : begin
    label1.Caption := '3 часа';
    label2.Caption := '1000 тенге';
    time :=10800;
  end;
 
  end;
end;
 
procedure TForm3.FormCreate(Sender: TObject);
begin
    k := 0;
    k1 := 0;
    k2 := 0;
    k3 := 0;
//dbtarif.KeyValue := dbtarif.ListSource.DataSet.FieldByName(dbtarif.KeyField).Value;
end;
 
procedure TForm3.FormShow(Sender: TObject);
begin
 
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('SELECT DISTINCT наименование FROM меню');
  ADOQuery1.Open;
   // ---------Заполняем ComboBox1 ---------- //
  ComboBox1.Items.Clear;
  While not ADOQuery1.Eof do
  begin
     ComboBox1.Items.Add(ADOQuery1.Fields[0].AsString);
     ADOQuery1.Next;
  end;
end;
 
 
procedure TForm3.Timer1Timer(Sender: TObject);
var h,m,s :word;
begin
 h :=(time-k )div 3600;
 m :=((time-k)-h*3600) div 60;
 s :=(time-k)-h*3600-m*60;
 if k<time then begin
   form1.lb1.Caption := Format('%d : %d :  %d',[h,m,s]);
 end;
inc(k);
end;
 
procedure TForm3.Timer2Timer(Sender: TObject);
var h,m,s :word;
begin
 h :=(time-k1 )div 3600;
 m :=((time-k1)-h*3600) div 60;
 s :=(time-k1)-h*3600-m*60;
 if k1<time then  begin
  form1.lb2.Caption := Format('%d : %d :  %d',[h,m,s]);
 
 
 
end;
inc(k1);
end;
 
end.
тут
0
2185 / 1125 / 406
Регистрация: 15.11.2015
Сообщений: 4,489
25.06.2019, 11:14 17
OneXend, мозайку собирать не интересно. Давай полный код модуля или весь проект в архиве.
1
0 / 0 / 1
Регистрация: 20.10.2016
Сообщений: 86
25.06.2019, 11:15  [ТС] 18
Цитата Сообщение от AzAtom Посмотреть сообщение
Переменная time где инициализируется и увеличивается?

Вообще, этой переменной time запутал, есть системная функция time, возвращает текущее время...
Delphi
1
 time,k,k1,k2,k3: integer;
глобальные
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
procedure TForm3.ComboBox1Change(Sender: TObject);
begin
 case ComboBox1.ItemIndex of
  0 : begin
    label1.Caption := '30 минут';
    label2.Caption := '250 тенге';
    time :=1800;
  end;
  1 : begin
    label1.Caption := '1 час';
    label2.Caption := '500 тенге';
     time :=3600;
  end;
  2 : begin
    label1.Caption := '2 часа';
    label2.Caption := '800 тенге';
     time :=3600;
  end;
  3 : begin
    label1.Caption := '3 часа';
    label2.Caption := '1000 тенге';
    time :=10800;
  end;
 
  end;
end;
0
2185 / 1125 / 406
Регистрация: 15.11.2015
Сообщений: 4,489
25.06.2019, 11:16 19
Весь проект нужен, чтобы запустить, посмотреть, что происходит и найти причину.
0
2335 / 1142 / 461
Регистрация: 19.03.2019
Сообщений: 3,640
25.06.2019, 11:18 20
Цитата Сообщение от AzAtom Посмотреть сообщение
Вообще, этой переменной time запутал
это точно.

Цитата Сообщение от AzAtom Посмотреть сообщение
есть системная функция time, возвращает текущее время...
это первая проблема. но не основная.

а проблема в том, что для всех таймеров используется ОДНА и ТА ЖЕ переменная.
ну и получается бардак (точнее все таймеры показывают одно и то же).

заведи отдельные переменные для каждого таймера (или массив переменных) и будет тебе счастье!!
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.06.2019, 11:18

Помощь в написании контрольных, курсовых и дипломных работ здесь.

работа с таймером
как сделать так чтобы функция работала определенное кол-во времени

Работа с таймером
Имеется три эллипса, допустим что это мишень. Необходимо создать таймер, который по очередности...

Работа с таймером
Всем привет! Подскажите, кто-нибудь, как сделать таймер вида: 00,01,02,03...60 (дойдя до 60...

Работа с таймером(?)
Доброго времени суток. Подскажите пожалуйста, никак не могу понять даже с чего начать. Необходимо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.