Как остановить цикл кнопкой стоп (без использования потоков)
Модератор: Модераторы
Как остановить цикл кнопкой стоп (без использования потоков)
Здравствуйте.
На форме есть кнопка пуск цикла и стоп. Потоки не используются.
Но кнопка стоп не нажимается, пока весь цикл не закончится.
Application.ProcessMessages; не помогло - оно только не дает возникнуть окну (не отвечает...), но кнопка на форме все равно нажимается только после окончания всего цикла.
Как сделать, чтобы можно было остановить цикл кнопкой стоп в такой ситуации?
На форме есть кнопка пуск цикла и стоп. Потоки не используются.
Но кнопка стоп не нажимается, пока весь цикл не закончится.
Application.ProcessMessages; не помогло - оно только не дает возникнуть окну (не отвечает...), но кнопка на форме все равно нажимается только после окончания всего цикла.
Как сделать, чтобы можно было остановить цикл кнопкой стоп в такой ситуации?
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
Re: Как остановить цикл кнопкой стоп (без использования пото
самый простой вариант это в цикл вставляете проверку переменной, значение которой меняется при нажатии на кнопку.
Re: Как остановить цикл кнопкой стоп (без использования пото
самый простой вариант это в цикл вставляете проверку переменной, значение которой меняется при нажатии на кнопку.
Я так и думал, но я пытался при нажатии на кнопку стоп менять капшион формы (для проверки - сработало нажатие или нет) и это не срабатывало.
Получается переменная изменится все равно?
Re: Как остановить цикл кнопкой стоп (без использования пото
poiuyt555 писал(а):Application.ProcessMessages; не помогло
Оно ГДЕ применялось?
Управление на обработку сообщений придется передавать изнутри цикла, при этом вы серьезно задержите ваши расчеты.
И что-то мне говорит, что если цикл вызван из процедуры, привязанной к нажатию другой кнопки, то всё управление формой будет блокироваться, пока не будет произведен выход из уже задействованной процедуры-обработчика. М.б. и не прав, проверять на практике что-то неохота.
ps. Я бы посадил нужную кнопку на другую форму и запустил её перед входом в цикл в не-диалоговом режиме
-
Kemet
- постоялец
- Сообщения: 241
- Зарегистрирован: 10.02.2010 18:28:32
- Откуда: Временно оккупированная территория
- Контактная информация:
Re: Как остановить цикл кнопкой стоп (без использования пото
Видимо, лучше всего будет повесить на таймер нужную процедуру, а на кнопки переключатель состояния (старт/стоп)
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Re: Как остановить цикл кнопкой стоп (без использования пото
Делаешь цикл:
В обработчике нажатия кнопки пишешь:
Код: Выделить всё
stop:=false;
while not stop do
begin
----Тут твой код
Application.ProcessMessages; //Это чтобы кнопка нажималась
endВ обработчике нажатия кнопки пишешь:
Код: Выделить всё
stop:=true;Re: Как остановить цикл кнопкой стоп (без использования пото
Спасибо за ответы.
Да так и есть, так и происходит.
Видимо надо использовать TThread. Другие варианты не совсем подходят.
если цикл вызван из процедуры, привязанной к нажатию другой кнопки, то всё управление формой будет блокироваться, пока не будет произведен выход из уже задействованной процедуры-обработчика
Да так и есть, так и происходит.
Видимо надо использовать TThread. Другие варианты не совсем подходят.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Re: Как остановить цикл кнопкой стоп (без использования пото
Чтобы не блокировалось - надо Application.ProcessMessages !
Re: Как остановить цикл кнопкой стоп (без использования пото
Чтобы не блокировалось - надо Application.ProcessMessages !
В итоге пока так и сделал, поставил Application.ProcessMessages в цикле в одно из условий (туда цикл заходит но не на каждой итерации).
Кнопка стоп заработала.
