Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прерывания цикла, попытка #2 (с кодом!)


Tzota ©   (2002-06-25 17:57:00) 

ВОт такой цикл - щаз только у себя в Дельфе сваял и проверил

Это лежит в Form.OnActivate...

for i:=1 to 32765
begin
Label1.Caption:=IntToStr(i);
Label1.Refresh;
Application.ProcessMessages;
end;

Так вот, запустив эту прогу вы будете наблюдать увеличивающуюся циферку, изображённую на форме. Если посреди этого цикла попытаться форму закрыть, то ни фига не получится. Форма закроется только тогда, когда цикл дойдёт до конца.

В чём секрет? :)


nimble   (2002-06-26 09:38:00) [1]

А можно было просто в поток запихнуть :))


Malder   (2002-06-25 20:10:00) [2]

Tzota, еше бы. Ответ на твой вопрос был дан в первом же сообшении. А ты бы хоть не поленился и проверил бы...


Tzota   (2002-06-25 19:14:00) [3]

Тьфу, млять, заработало.
По мотивам вашим сообщений :)
Всем большое спасибо :)

ЗЫ А ничего флейм получился, да? :)


VDen   (2002-06-25 19:01:00) [4]

Советовать людям не мое призвание...


Malder   (2002-06-25 18:51:00) [5]

VDen, нда...


Malder   (2002-06-25 18:46:00) [6]

Нету слов.
Ребятки, да я запарился повторять... Стоит у меня такое условие, стоит... да только программа на неё *** кладёт, понимаете?
А ГДЕ ОНО У ТЕБЯ СТОИТ, ЭТО УСЛОВИЕ ?!

ВОТ ТЕБЕ КОД:

flag:boolean//где нибудь глобально объяви эту переменную
...
procedure TForm1.FormActivate(Sender: TObject);
var i:integer;
begin
flag:=false;
for i:=1 to 32765 do
begin
if flag then break;
Label1.Caption:=IntToStr(i);
Application.ProcessMessages;
end;

end;


И не забудь в ONCLOSEQUERY НАПИСАТЬ:

flag:=true;

блин


VDen   (2002-06-25 18:39:00) [7]

В ваших глазах не двоится - это просто косяк...


VDen   (2002-06-25 18:37:00) [8]

Способ абсолютно варварский, но работает :)
...
private
procedure onClose(var A: TMessage); message WM_CLOSE;
...

implementation
var NeedClose: boolean = false;

procedure TForm1.onClose(var A: TMessage);
begin
NeedClose:=true;
Close;
end;

procedure Some;
var i: integer;
begin
for i:=1 to 32765
begin
Label1.Caption:=IntToStr(i);
Label1.Refresh;
Application.ProcessMessages;
if NeedClose then Break; {здесь надо ставить любые проверки}
end;
end;




VDen   (2002-06-25 18:37:00) [9]

Способ абсолютно варварский, но работает :)
...
private
procedure onClose(var A: TMessage); message WM_CLOSE;
...

implementation
var NeedClose: boolean = false;

procedure TForm1.onClose(var A: TMessage);
begin
NeedClose:=true;
Close;
end;

procedure Some;
var i: integer;
begin
for i:=1 to 32765 do
begin
Label1.Caption:=IntToStr(i);
Label1.Refresh;
Application.ProcessMessages;
if NeedClose then Break; {здесь надо ставить любые проверки}
end;
end;




Anatoly Podgoretsky   (2002-06-25 18:26:00) [10]

Может у тебя и стоит условие, но в коде его не видно, также не наблюдается и выход из цикла. Зато зачем то лишний оператор Label1.Refresh;
Решение без извращений тебе привел Извращенец, к нему нечего добавить, кроме того что надо иметь доступную переменную или свойство буттон1_нажат


Tzota   (2002-06-25 18:08:00) [11]

Ребятки, да я запарился повторять... Стоит у меня такое условие, стоит... да только программа на неё *** кладёт, понимаете?

Так же как и в приведённом коде программа НЕ РЕАГИРУЕТ на закрытие формы, хотя должна бы. Должна бы, ведь так?


Игорь Шевченко   (2002-06-25 18:06:00) [12]

Секрета нет.


Извращенец   (2002-06-25 18:05:00) [13]

в цикл вставь условие, ЕСЛИ буттон1 нажат, ТО BREAK


Наверх

Титульная страница Поиск, карта сайта Написать письмо