Вниз
Скачать: CL | DM;

Нужно выйти из цикла по нажатии кнопки ... как?   Найти похожие ветки 

← →
rams   (2004-04-21 10:26) [0]

Здравствуйте! Помогите в очередной раз пожалуйста.
На главной форме две кнопки : Button1 (Start) и Button2 (Stop).
По нажатию Button1 и Button2 выполняется

procedure TForm1.Button1Click(Sender: TObject);
begin
 flag:=true;
 repeat
   Memo1.Lines.Add(TimeToStr(Time));
 until flag;
end;  
procedure TForm1.Button2Click(Sender: TObject);
begin
 flag:=false;
end;  

Так вот эта программа зацикливается на выводе текущего времени, и не обрабатывает нажатие других кнопок. А требуется, чтобы этот цикл прекратился по нажатию кнопки Button2(Stop)
 Как это делается по уму?


← →
Рамиль ©   (2004-04-21 10:28) [1]

По уму вот эта строчка вешается на таймер
Memo1.Lines.Add(TimeToStr(Time));
А по нажатию на кнопку Timer.Enabled := false;


← →
Reindeer Moss Eater ©   (2004-04-21 10:28) [2]

until flag;

flag:=false;

Даже если программа и будет обрабатывать нажатие кнопки, то такой цикл все равно не прекратится.


← →
Гаврила   (2004-04-21 10:31) [3]

Application.ProcessMessages в теле цикла
при этом программа будет обрабатывать нажатия кнопок
по нажатию кнопки выставляем флаг, в теле цикла проверяем флаг
если флаг выставлен - Break;


← →
Рамиль ©   (2004-04-21 10:35) [4]


> то такой цикл все равно не прекратится

Прекратится

procedure TForm1.Button1Click(Sender: TObject);
begin
flag := false;
repeat
  Memo1.Lines.Add(TimeToStr(Time));
  Application.ProcessMessages;
until flag;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 flag := true;
end;

Но это некрасиво.

Только я понял как цикл у него работал с flag:=true :)


← →
vengo   (2004-04-21 10:37) [5]

В цикле Application.ProcessMessages.
В обработчике Button2Click: flag := true;


← →
rams   (2004-04-21 10:39) [6]


> Reindeer Moss Eater ©   (21.04.04 10:28) [2]
> until flag;
>
> flag:=false;

Конечно же имел в виду flag:=true


> Гаврила   (21.04.04 10:31) [3]
> Application.ProcessMessages в теле цикла
> при этом программа будет обрабатывать нажатия кнопок
> по нажатию кнопки выставляем флаг, в теле цикла проверяем
> флаг
> если флаг выставлен - Break;

А можно поподробнее - как должно выглядеть тело цикла?


← →
rams   (2004-04-21 10:41) [7]

Пока спрашивал - ответили.
Попробую.
Спасибо.


← →
Anatoly Podgoretsky ©   (2004-04-21 11:01) [8]

Если не обращать внимание true/false то из этого цикла он бы выскочил с ошибкой еще не успев отпустить палец от кнопки, но ето он еще успеет проверить, как только устранит ошибки.


← →
vl_chel ©   (2004-04-21 11:15) [9]

Запускать цикл в отдельном потоке
и если надо то Suspend или terminate


← →
PVOzerski ©   (2004-04-21 11:33) [10]

Если просто "прибить" поток из другого, можно много мусора наделать и даже порушить какие-то динамические структуры. Так что это можно делать только в некоторых случаях. Обычно же "прибиваемый" поток сначала должен быть об этом оповещен, чтобы успеть сделать некие действия (закрыть файлы, высвободить выделенную динамическую память, вызвать деструкторы объектов...)


← →
vl_chel ©   (2004-04-21 13:51) [11]

destrucror Destroy; override;
и
FreeOnTerminate := True;


← →
WebErr ©   (2004-04-21 13:59) [12]

Поставь таймер и по малому(!) интервалу обрабатывай событие Button1Click, а вместо flag можно Interval > 0.
т.е.

Button1Click -> Timer1.Interval := 100;
Button2Click -> Timer1.Interval := 0;
Timer1Timer -> Memo1.Lines.Add(TimeToStr(Time));

Программеру голова дана не только для того, чтобы в олимпиадах участвовать! :))))


← →
rams   (2004-04-21 15:53) [13]

Всем спасибо.
Попробовал [4] - вполне устроило. Далее поглядим.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.053 c
3-1082000529
timak
2004-04-15 07:42
2004.04.11
DBDrid???????


11-1068199443
RA
2003-11-07 13:04
2004.04.11
TScrollBar. Создаю, но надо Max, Min и Position.


1-1080304137
Rusty
2004-03-26 15:28
2004.04.11
Открытие доп. окна после запуска приложения...


1-1080278656
Urri
2004-03-26 08:24
2004.04.11
Заголовки колонок в Quantum Grid


3-1081441564
Somebody
2004-04-08 20:26
2004.04.11
http://www.ibase.ru/devinfo/dbexpress.htm




   Наверх