Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: 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 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
11-1060871472
Мякс
2003-08-14 18:31
2004.04.11
TabControl


14-1082002931
wHammer
2004-04-15 08:22
2004.04.11
ТASM


4-1076098453
димка
2004-02-06 23:14
2004.04.11
Как определить, что какое-то приложение создало файл


9-1064865078
ZLODey
2003-09-29 23:51
2004.04.11
Предоставте хелп: как делать и с чего начинать делать 2d-игры ?


7-1080554218
BALU1111
2004-03-29 13:56
2004.04.11
TListView