С Новым годом! Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 1
Регистрация: 23.04.2017
Сообщений: 41

Таймер на форме

23.04.2017, 14:54. Показов 16026. Ответов 7

Студворк — интернет-сервис помощи студентам
При открытии формы должен запускаться таймер, который автоматически начинает отчёт 20 минут (в обратном отчёте). Не получается реализовать, чтобы данный таймер срабатывал только на одной форме и прекращал работу как только закрывалась форма.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.04.2017, 14:54
Ответы с готовыми решениями:

Таймер на форме
Добрый день. Помогите разобраться с проблемой: 1. Создал форму Progress на которой разместил объект класса TTimer...

Таймер на форме
На форме будет стоять таймер, надо в его обработчике событий написать, чтобы он срабатывал каждый день в 7 утра, через интервал таймера это...

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

7
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
23.04.2017, 16:12
Цитата Сообщение от hlr52917 Посмотреть сообщение
20 минут
Минута это 60 секунд. Секунда это 1000 миллисекунд. 20 минут это: 20*60*1000=1200000 миллисекунд.
Pascal
1
Timer1.Interval:=1200000;
Как открываете? Как закрываете? Что такое "в обратном отсчёте"?
0
0 / 0 / 1
Регистрация: 23.04.2017
Сообщений: 41
23.04.2017, 16:46  [ТС]
Открываю форму через show, закрываю форму на х. с 20 минут до 0
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
23.04.2017, 17:24
Цитата Сообщение от hlr52917 Посмотреть сообщение
закрываю форму на х.
При нажатии на "X" - по умолчанию формы не закрываются, а становятся невидимыми.
А таймеру просто пофик видимая форма или нет и они работают как ничего и не случалось.
Цитата Сообщение от hlr52917 Посмотреть сообщение
Открываю форму через show
Вы в курсе что формы по умолчанию создаются в самом начале работы, ещё до того как на экране появится главная?
Цитата Сообщение от hlr52917 Посмотреть сообщение
с 20 минут до 0
Что это значит-то? Выводить где-то время оставшееся до наступления 20 минут? Куда? В каком виде?

Добавлено через 3 минуты
Так как вы открываете через show, то я не буду показывать как реально закрыть форму навсегда. Вам надо не это. Как насчёт такого?:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm2.FormCreate(Sender: TObject);
begin
  Timer1.Enabled:=False;
end;
 
procedure TForm2.FormShow(Sender: TObject);
begin
  Timer1.Interval:=1200000;
  Timer1.Enabled:=True;
end;
 
procedure TForm2.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  Timer1.Enabled:=False;
end;
 
procedure TForm2.Timer1Timer(Sender: TObject);
begin
  ShowMessage('Прошло 1200000 мс!');
end;
Добавлено через 1 минуту
Или чуть покорректнее так:
Pascal
1
ShowMessage('Прошло '+IntToStr(TTimer(Sender).Interval)+' мс!');
Добавлено через 16 минут
Видимо, темы-дубли: Переход между формами
1
0 / 0 / 0
Регистрация: 20.06.2025
Сообщений: 2
20.06.2025, 12:14
Pascal
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
109
110
111
112
113
114
115
116
unit TimerMain;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,
  MMSystem;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    btnStart: TButton;
    btnStop: TButton;
    edtTime: TEdit;
    Label1: TLabel;
    Timer1: TTimer;
    procedure btnStartClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    FEndTime: TDateTime;
    FIsRunning: Boolean;
  public
 
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  FIsRunning := False;
  Timer1.Enabled := False;
  btnStop.Enabled := False;
end;
 
procedure TForm1.btnStartClick(Sender: TObject);
var
  Hours, Minutes, Seconds: Integer;
  TimeStr: String;
begin
  TimeStr := edtTime.Text;
  
  // Парсим ввод пользователя (ожидаем формат ЧЧ:ММ:СС)
  try
    Hours := StrToInt(Copy(TimeStr, 1, 2));
    Minutes := StrToInt(Copy(TimeStr, 4, 2));
    Seconds := StrToInt(Copy(TimeStr, 7, 2));
    
    // Устанавливаем время окончания
    FEndTime := Now + EncodeTime(Hours, Minutes, Seconds, 0);
    
    Timer1.Enabled := True;
    FIsRunning := True;
    btnStart.Enabled := False;
    btnStop.Enabled := True;
    edtTime.Enabled := False;
    
    Caption := 'Таймер - работает';
  except
    on E: Exception do
      ShowMessage('Введите время в формате ЧЧ:ММ:СС');
  end;
end;
 
procedure TForm1.btnStopClick(Sender: TObject);
begin
  Timer1.Enabled := False;
  FIsRunning := False;
  btnStart.Enabled := True;
  btnStop.Enabled := False;
  edtTime.Enabled := True;
  Caption := 'Таймер - остановлен';
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
var
  Remaining: TDateTime;
  H, M, S, MS: Word;
begin
  if Now >= FEndTime then
  begin
    // Время вышло
    Timer1.Enabled := False;
    FIsRunning := False;
    btnStart.Enabled := True;
    btnStop.Enabled := False;
    edtTime.Enabled := True;
    Caption := 'Таймер - время вышло!';
    
    // Подаем звуковой сигнал
    PlaySound('SystemExclamation', 0, SND_ASYNC);
    
    ShowMessage('Время вышло!');
  end
  else
  begin
    // Показываем оставшееся время
    Remaining := FEndTime - Now;
    DecodeTime(Remaining, H, M, S, MS);
    Caption := Format('Таймер - осталось: %.2d:%.2d:%.2d', [H, M, S]);
  end;
end;
 
end.
Добавлено через 9 минут
'''
Pascal
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
unit TimerUnit;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,
  MMSystem;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    btnStart: TButton;
    btnStop: TButton;
    edtTime: TEdit;
    Label1: TLabel;
    Timer1: TTimer;
    procedure btnStartClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    FTargetTime: TDateTime;
    FIsRunning: Boolean;
  public
 
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Enabled := False;
  FIsRunning := False;
  btnStop.Enabled := False;
end;
 
procedure TForm1.btnStartClick(Sender: TObject);
var
  Hours, Minutes, Seconds: Integer;
begin
  if FIsRunning then Exit;
  
  try
    // Парсим введенное время в формате ЧЧ:ММ:СС
    Hours := StrToInt(Copy(edtTime.Text, 1, 2));
    Minutes := StrToInt(Copy(edtTime.Text, 4, 2));
    Seconds := StrToInt(Copy(edtTime.Text, 7, 2));
    
    // Устанавливаем целевое время
    FTargetTime := EncodeTime(Hours, Minutes, Seconds, 0);
    Timer1.Enabled := True;
    FIsRunning := True;
    btnStart.Enabled := False;
    btnStop.Enabled := True;
  except
    on E: Exception do
      ShowMessage('Неправильный формат времени. Используйте ЧЧ:ММ:СС');
  end;
end;
 
procedure TForm1.btnStopClick(Sender: TObject);
begin
  Timer1.Enabled := False;
  FIsRunning := False;
  btnStart.Enabled := True;
  btnStop.Enabled := False;
  edtTime.Text := '00:00:00';
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
var
  CurrentTime: TTime;
  Remaining: TTime;
begin
  CurrentTime := Time;
  
  if CurrentTime >= FTargetTime then
  begin
    Timer1.Enabled := False;
    FIsRunning := False;
    btnStart.Enabled := True;
    btnStop.Enabled := False;
    
    // Воспроизводим звуковой сигнал
    PlaySound('SystemExclamation', 0, SND_ASYNC);
    
    ShowMessage('Время истекло!');
    edtTime.Text := '00:00:00';
  end
  else
  begin
    Remaining := FTargetTime - CurrentTime;
    edtTime.Text := FormatDateTime('hh:nn:ss', Remaining);
  end;
end;
 
end.
''''

Добавлено через 5 минут
?????
Pascal
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
unit TimerSimple;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    btnStart: TButton;
    btnStop: TButton;
    edtTime: TEdit;
    Timer1: TTimer;
    procedure btnStartClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    FSecondsLeft: Integer;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.btnStartClick(Sender: TObject);
begin
  // Парсим введенное время в секундах
  try
    FSecondsLeft := StrToInt(edtTime.Text);
    Timer1.Enabled := True;
    btnStart.Enabled := False;
    btnStop.Enabled := True;
  except
    ShowMessage('Введите число секунд');
  end;
end;
 
procedure TForm1.btnStopClick(Sender: TObject);
begin
  Timer1.Enabled := False;
  btnStart.Enabled := True;
  btnStop.Enabled := False;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Dec(FSecondsLeft);
  edtTime.Text := IntToStr(FSecondsLeft);
  
  if FSecondsLeft <= 0 then
  begin
    Timer1.Enabled := False;
    ShowMessage('Время вышло!');
    btnStart.Enabled := True;
    btnStop.Enabled := False;
    edtTime.Text := '0';
  end;
end;
 
end.
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,356
Записей в блоге: 3
20.06.2025, 12:16
Ововтвтв, если уж занялись некропостингом - то хоть код тэгами обрамляйте!
0
0 / 0 / 0
Регистрация: 20.06.2025
Сообщений: 2
20.06.2025, 12:26
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
109
110
111
112
113
unit TimerUnit;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Spin,
  ExtCtrls, MMSystem;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    btnStart: TButton;
    btnStop: TButton;
    Label1: TLabel;
    Label2: TLabel;
    lblTimeLeft: TLabel;
    seMinutes: TSpinEdit;
    seSeconds: TSpinEdit;
    Timer1: TTimer;
    procedure btnStartClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    FTotalSeconds: Integer;
    procedure UpdateTimeDisplay;
    procedure PlayAlarmSound;
  public
 
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  // Инициализация
  FTotalSeconds := 0;
  UpdateTimeDisplay;
end;
 
procedure TForm1.btnStartClick(Sender: TObject);
begin
  // Установка времени и запуск таймера
  FTotalSeconds := seMinutes.Value * 60 + seSeconds.Value;
  if FTotalSeconds > 0 then
  begin
    Timer1.Enabled := True;
    btnStart.Enabled := False;
    btnStop.Enabled := True;
  end
  else
    ShowMessage('Установите время больше 0');
end;
 
procedure TForm1.btnStopClick(Sender: TObject);
begin
  // Остановка таймера
  Timer1.Enabled := False;
  FTotalSeconds := 0;
  UpdateTimeDisplay;
  btnStart.Enabled := True;
  btnStop.Enabled := False;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // Обратный отсчет
  if FTotalSeconds > 0 then
  begin
    Dec(FTotalSeconds);
    UpdateTimeDisplay;
  end
  else
  begin
    // Время вышло
    Timer1.Enabled := False;
    PlayAlarmSound;
    ShowMessage('Время вышло!');
    btnStart.Enabled := True;
    btnStop.Enabled := False;
  end;
end;
 
procedure TForm1.UpdateTimeDisplay;
var
  Minutes, Seconds: Integer;
begin
  // Обновление отображения времени
  Minutes := FTotalSeconds div 60;
  Seconds := FTotalSeconds mod 60;
  lblTimeLeft.Caption := Format('%.2d:%.2d', [Minutes, Seconds]);
end;
 
procedure TForm1.PlayAlarmSound;
begin
  // Воспроизведение звукового сигнала
  sndPlaySound('C:\Windows\Media\Alarm01.wav', SND_ASYNC or SND_NODEFAULT);
  // Если файл не найден, можно использовать системный звук:
  // Beep;
end;
 
end.
Добавлено через 3 минуты
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
unit TimerUnit;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Forms, Controls, StdCtrls, ExtCtrls, MMSystem;
 
type
  TForm1 = class(TForm)
    btnStart: TButton;
    btnStop: TButton;
    lblTime: TLabel;
    edtMinutes: TEdit;
    edtSeconds: TEdit;
    Timer1: TTimer;
    procedure btnStartClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    FSeconds: Integer;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
procedure TForm1.btnStartClick(Sender: TObject);
begin
  FSeconds := StrToIntDef(edtMinutes.Text, 0) * 60 + StrToIntDef(edtSeconds.Text, 0);
  if FSeconds > 0 then begin
    Timer1.Enabled := True;
    btnStart.Enabled := False;
  end else ShowMessage('Введите время');
end;
 
procedure TForm1.btnStopClick(Sender: TObject);
begin
  Timer1.Enabled := False;
  btnStart.Enabled := True;
  lblTime.Caption := '00:00';
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if FSeconds > 0 then begin
    Dec(FSeconds);
    lblTime.Caption := Format('%.2d:%.2d', [FSeconds div 60, FSeconds mod 60]);
  end else begin
    Timer1.Enabled := False;
    sndPlaySound('', SND_ASYNC); // Системный звук
    ShowMessage('Время вышло!');
    btnStart.Enabled := True;
  end;
end;
 
end.
0
20.06.2025, 12:44
 Комментарий модератора 
Ововтвтв, официально предупреждаю о неоднократном нарушении Вами п. 4.9 Правил форума, которые Вы, недалече как сегодня, приняли и обязались выполнять.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.06.2025, 12:44
Помогаю со студенческими работами здесь

С++ Builder Таймер в форме
Приведите пожалуйста пример работы таймера в форме, к примеру при нажатии кнопки таймер начинает отсчет.(Желательно чтобы этот отсчет виден...

Установить таймер на форме и Recordset
Доброго времени суток! Помогите, пожалуйста, реализовать следующее. Необходимо, перемещаясь по записям в форме (с помощью Recordset),...

Как реализовать таймер на форме
Есть форма на которой должен быть визуальный таймер обратного отсчета, по завершении времени форма должна закрываться.

Таймер на форме. Запуск по нажатию кнопки
Добрый вечер форумчане, подскажите или поделитесь ссылкой на готовый вариант. Хочу сделать на форме поле-таймер. Запускаемый по...

Таймер счета времени нахождения в форме
Здравствуйте, необходимо разместить в форме таймер, который будет считать время, которое открыта эта форма(с нуля). При закрытии формы,...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru