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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2007, 19:58   #1
Иринкаа
Пользователь
 
Регистрация: 11.11.2007
Сообщений: 44
По умолчанию Работа с Таймером

Мне надо, чтобы определенная процедура выполнялась в цикле необходимое кол-во раз. При этом, чтобы каждый раз перед выполнением процедуры была задержка.

Код:
if Edit2.Text='2' then
begin
 repeat

 Vremya_tekyshee:= Vremya_tekyshee+Delt_m;

 Timer1.Interval:= Round(Delt_m*1000); 

 until Vremya_tekyshee > Vr_mashin_obsh;
end;
В обработчик событий Timer1 записала нужную процедуру.


Попробовала тоже самое сделать через sleep
Код:
if Edit2.Text='2' then
begin
 repeat
 Vremya_tekyshee:= Vremya_tekyshee+Delt_m;
 Variant_2_klad;  //имя процедуры
 Sleep(2000);
 until Vremya_tekyshee > Vr_mashin_obsh;
end;
Рузультата никакого. Можно сказать - что Дельфи просто виснет.

В чем проблема? Подскажите, плиз, как правильно использовать Timer
Иринкаа вне форума Ответить с цитированием
Старый 22.11.2007, 20:13   #2
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Попробуйте перед задержкой добавить: Application.ProcessMessages;
_Dmitry вне форума Ответить с цитированием
Старый 22.11.2007, 20:24   #3
Иринкаа
Пользователь
 
Регистрация: 11.11.2007
Сообщений: 44
По умолчанию

Цитата:
Сообщение от _Dmitry Посмотреть сообщение
Попробуйте перед задержкой добавить: Application.ProcessMessages;
Вот так?
Код:
if Edit2.Text='2' then
begin
 repeat
 Vremya_tekyshee:= Vremya_tekyshee+Delt_m;
 Application.ProcessMessages;
 Timer1.Interval:= Round(Delt_m*1000);
 until Vremya_tekyshee > Vr_mashin_obsh;
end;
Добавила - Выдает ошибку - Неправильн операция с плавающей точкой
Иринкаа вне форума Ответить с цитированием
Старый 22.11.2007, 20:40   #4
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

ProcessMessages приостанавливает работу программы до тех пор, пока не будут обработаны все сообщения. Ошибка не от него. В вашем случае, думаю правильней использовать второй вариант программы, установив ProcessMessages перед Sleep. И вообще не использовать Timer.
Вы говорите, что написанный вами код находится в обработчике таймера, в этом коде находится цикл по времени, где меняется интервал срабатывания таймера. Я представить не могу, как такое вообще может работать.

Последний раз редактировалось _Dmitry; 22.11.2007 в 20:46.
_Dmitry вне форума Ответить с цитированием
Старый 22.11.2007, 21:36   #5
Иринкаа
Пользователь
 
Регистрация: 11.11.2007
Сообщений: 44
По умолчанию

Цитата:
Сообщение от _Dmitry Посмотреть сообщение
ProcessMessages приостанавливает работу программы до тех пор, пока не будут обработаны все сообщения. Ошибка не от него. В вашем случае, думаю правильней использовать второй вариант программы, установив ProcessMessages перед Sleep. И вообще не использовать Timer.
Вы говорите, что написанный вами код находится в обработчике таймера, в этом коде находится цикл по времени, где меняется интервал срабатывания таймера. Я представить не могу, как такое вообще может работать.
Нет. Интервал таймера не меняется. Он все время равен округленному значению переменной Delt_m.
Иринкаа вне форума Ответить с цитированием
Старый 22.11.2007, 21:38   #6
Иринкаа
Пользователь
 
Регистрация: 11.11.2007
Сообщений: 44
По умолчанию

А нужно отключать таймер? В коде написать:
Timer1.Interval:=0;
или
Timer1.Enabled:=false;
Или это не обязательно?
Иринкаа вне форума Ответить с цитированием
Старый 22.11.2007, 21:59   #7
Иринкаа
Пользователь
 
Регистрация: 11.11.2007
Сообщений: 44
По умолчанию

Такой вариант работает. Спасибо за помощь.
Код:
if Edit2.Text='2' then
begin
 repeat
 Vremya_tekyshee:= Vremya_tekyshee+Delt_m;
 Variant_2_klad;
 Application.ProcessMessages;
 Sleep(Round(Delt_m*1000));
 until Vremya_tekyshee > Vr_mashin_obsh;
end;
Надеюсь, что мне подойдет этот вариант для моей работы...
Иринкаа вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите плиз с таймером kinals Помощь студентам 23 12.08.2008 13:18
Помогите с таймером Михаил Юрьевич Общие вопросы Delphi 10 03.06.2008 20:35
Помогите, плз, разобраться с таймером Ya_Nika Общие вопросы C/C++ 3 11.03.2008 07:58
Работа с таймером Alika Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 12.11.2007 19:27
Тестовая программа с таймером Barrr Помощь студентам 11 21.10.2007 19:42