Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Общие вопросы > Работа цикла пока не нажата кнопка |
Автор: Гость_Drizhenko 18.10.2005, 07:22 | ||
Помогите пожалуйста. Возникает задача создать цикл, который будет выполняться пока не нажата кнопка button2. То есть, что нужно поставить вместо точек? Или может организовать другой цикл, не while.
На форме две кнопки (button1 и button2). Первая запускает цикл, вторая остонавливает + memo1 для вывода на экран. Код у меня не на C++, а не Delphi. |
Автор: Zero 18.10.2005, 07:42 | ||||||
А может, тогда тебе на форму кинуть таймер, и когда нажмёш кнопку, значение Enable присваивай false, и цикл остановится.
В Билдере всё как в Delphi, поэтому разницы нету. Добавлено @ 07:46 Вот пример:
|
Автор: Zero 18.10.2005, 08:27 | ||||
А-а-а... блин, перепутал.... Если на делфи то, так:
А из за такой строки будут глюки:
|
Автор: Drizhenko 18.10.2005, 09:26 |
Интересное решение, но есть одно но. Когда я нажимаю кнопку, то таймер начинает работу, и в мемо вписываюся цифры и пока они не напишутся до 50 таймер не остнавится даже если я буду нажимать кнопку. А это неприемлимо, работа должна прикращаться ни когда выполнится цикл в любое время. А вообще, спасибо за помощь. Добавлено @ 09:31 Извиняюсь за граматические ошибки. работа должна прикращаться ни тогда когда выполнится цикл, а в любое время. |
Автор: Zero 18.10.2005, 09:48 | ||||||||||
Млин, ты же сам написал что должен прекращатся вот этот цикл:
А этот:
Из-за вот этой строки:
Но если тебе нужно, просто выводить цифры от 1 до 50, периодически, а в нужное время останавливать, тогда можно сделать так: Интервал таймера ставь 200 и коды такие:
Единственный недостаток, это то что тут переменная i обявлена как глобальная... |
Автор: Drizhenko 18.10.2005, 10:06 |
Спасибо, работает. А что означает функция inc(i). Я в Дельфи новичок. |
Автор: Alexeis 18.10.2005, 10:06 | ||||
попробуй
|
Автор: Zero 18.10.2005, 10:17 | ||||||||
Это альтенатива:
Только
При инк, типа такого получается:
|
Автор: Alexeis 18.10.2005, 10:17 |
inc(i); => i := i + 1; |
Автор: YurikGL 18.10.2005, 22:02 | ||
Держи рабочий код
|
Автор: FRAGNATIC 18.10.2005, 22:41 | ||
да зачем таймеры то? самый номаный вариант как уже предложил alexeis1
|
Автор: Drizhenko 19.10.2005, 05:55 | ||||
Получается, что при нажатии кнопки f1 призваивается значение true, а цикл while начинает работу когда f1 ложно. То есть цикл никогда ни начнет работу. Если сделать так:
то все работает, но опять же цикл прекращает свою работу когда он переберёт все значения. НЕ ТО !!!! Спасибо всем, остальное еще не попробовал. |
Автор: Albinos_x 19.10.2005, 06:54 | ||||||
попробуй так:
Конечно будет перебирать все значения у тебя.... у тебя нет проверки внутри цикла на выполнение условия останова, т.е. правильнее так:
|
Автор: Alexeis 19.10.2005, 09:26 | ||
Вероятено код будет работать если эту процедуру запустить отдельным потоком, тогда реакция будет незамедлительной
Поправлено 13.00 |
Автор: Albinos_x 19.10.2005, 10:34 | ||||
повторяете предыдущую ошибку, этот код не остановит цикл, я же писал:
|
Автор: Drizhenko 19.10.2005, 10:52 | ||
Извиняюсь за тупость, а что это значит??? |
Автор: YurikGL 21.10.2005, 20:11 | ||||||
Народ, что вы спорите... я написал программу и все проверил... Все работает
fl1 сбрасывается таймером и цикл прекращается цикл while OutPutEnable do тоже не бесконечен т.к. при повторном нажатии на кнопку переменная OutPutEnable будет инвертирована и цикл прекратится.
Что-бы делать задержку между выводом символов. Короче, код рабочий. Прерывание происходит незамедлительно. Кстати, его можно еще слегка оптимизировать
|