Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2017, 12:24   #1
brownb
Форумчанин
 
Регистрация: 16.10.2016
Сообщений: 156
По умолчанию timer

Подскажите может другой компонент или как работать с таймером.
Нужно делать некоторые действия по времени.Возможно както в одном таймере указать несколько действий допустим
Прошло 5 секунд выводим сообщение 1 прошло опять 5 секунд выводим сообщение 2 и тд.И все это в одном таймере
brownb вне форума Ответить с цитированием
Старый 01.06.2017, 12:34   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

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

А так - да, установить время таймера на 5000 миллисекунд.

Если бы подробнее задачу знать - можно было бы точно сказать, в Вашем случае решается проблема одним таймером или нет.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 01.06.2017, 12:36   #3
brownb
Форумчанин
 
Регистрация: 16.10.2016
Сообщений: 156
По умолчанию

А можно пример?
brownb вне форума Ответить с цитированием
Старый 01.06.2017, 12:54   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
Стрелка

Да легко. Скажем, сервис, который выводит на экран состояние некоего счётчика:

Код:
// Предполагается, что Таймер и счётчик объявлены в классе:
type
  TMyService = class(TService)
    ...
  private
    { Private declarations }

    Count: integer;
    ServiceTimer: TTimer;
    procedure OnTimer(Sender: TObject);
    ...
  public
    ...
  end; // TMyService


// Создаём таймер в OnStart

procedure TMyService.ServiceStart(Sender: TService; var Started: Boolean);

begin
   Started := True;
   ServiceTimer := nil;
   ServiceTimer := TTimer.Create(nil);
   ServiceTimer.OnTimer := OnTimer;
   ServiceTimer.Interval := 5000;
   ServiceTimer.Enabled := True;
end; // ServiceStart

// Убиваем таймер в OnStop
procedure TMyService.ServiceStop(Sender: TService; var Stopped: boolean);
begin
  ServiceTimer.Enabled := False;
  FreeAndNil(ServiceTimer);
end; // ServiceStop

//Процедура работы таймера
procedure TMyService.OnTimer(Sender: TObject);
begin
  MessageDlg('Текущее состояние счётчика: ' + IntToStr(Count), mtInformation, [mbOk], 0);
  Inc(Count);
end; // OnTimer
Каждые пять секунд мы имеем разные сообщения в части счётчика, однако для этого пришлось ввести переменную Count.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 01.06.2017 в 12:56.
Sciv вне форума Ответить с цитированием
Старый 01.06.2017, 13:04   #5
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Используй машину состояний.
Код:
var
 state:Integer;
...
procedure TForm1.Timer1Timer(Sender: TObject);
const Alarm:array [1..2] of string =('Штром!', 'Ураган!');
begin
case state of
1: MessageBox(handle, PAnsiChar(Alarm[1]), nil, MB_ICONWARNING);
2: MessageBox(handle, PAnsiChar(Alarm[2]), nil, MB_ICONWARNING);
end; // case
state:=state+1;
if state>2 then state:=1;
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 02.06.2017, 02:05   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

2 Pavia
Если уж говорить про "машину состояний", то как-то не солидно писать код
Код:
state:=state+1;
if state>2 then state:=1;
Имхо, код должен быть таким
Код:
state:=(state+1) mod 2;
northener вне форума Ответить с цитированием
Старый 02.06.2017, 02:06   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Плюс/минус один добавьте в код по вкусу.
northener вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Timer JS mrprim JavaScript, Ajax 5 05.02.2017 01:29
Timer nwhta C# (си шарп) 10 31.08.2013 22:41
timer Небесный Общие вопросы Delphi 16 05.12.2011 01:02
timer Cpluser C# (си шарп) 4 06.09.2011 17:33
timer Erick Cartman Помощь студентам 4 12.03.2010 19:57