Форум: "Основная";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];
ВнизПрерывания цикла, попытка #2 (с кодом!) Найти похожие ветки
← →
Tzota (2002-06-25 17:57) [0]ВОт такой цикл - щаз только у себя в Дельфе сваял и проверил
Это лежит в Form.OnActivate...
for i:=1 to 32765
begin
Label1.Caption:=IntToStr(i);
Label1.Refresh;
Application.ProcessMessages;
end;
Так вот, запустив эту прогу вы будете наблюдать увеличивающуюся циферку, изображённую на форме. Если посреди этого цикла попытаться форму закрыть, то ни фига не получится. Форма закроется только тогда, когда цикл дойдёт до конца.
В чём секрет? :)
← →
Извращенец (2002-06-25 18:05) [1]в цикл вставь условие, ЕСЛИ буттон1 нажат, ТО BREAK
← →
Игорь Шевченко (2002-06-25 18:06) [2]Секрета нет.
← →
Tzota (2002-06-25 18:08) [3]Ребятки, да я запарился повторять... Стоит у меня такое условие, стоит... да только программа на неё *** кладёт, понимаете?
Так же как и в приведённом коде программа НЕ РЕАГИРУЕТ на закрытие формы, хотя должна бы. Должна бы, ведь так?
← →
Anatoly Podgoretsky (2002-06-25 18:26) [4]Может у тебя и стоит условие, но в коде его не видно, также не наблюдается и выход из цикла. Зато зачем то лишний оператор Label1.Refresh;
Решение без извращений тебе привел Извращенец, к нему нечего добавить, кроме того что надо иметь доступную переменную или свойство буттон1_нажат
← →
VDen (2002-06-25 18:37) [5]Способ абсолютно варварский, но работает :)
...
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) [6]Способ абсолютно варварский, но работает :)
...
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;
← →
VDen (2002-06-25 18:39) [7]В ваших глазах не двоится - это просто косяк...
← →
Malder (2002-06-25 18:46) [8]Нету слов.
Ребятки, да я запарился повторять... Стоит у меня такое условие, стоит... да только программа на неё *** кладёт, понимаете?
А ГДЕ ОНО У ТЕБЯ СТОИТ, ЭТО УСЛОВИЕ ?!
ВОТ ТЕБЕ КОД:
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;
блин
← →
Malder (2002-06-25 18:51) [9]VDen, нда...
← →
VDen (2002-06-25 19:01) [10]Советовать людям не мое призвание...
← →
Tzota (2002-06-25 19:14) [11]Тьфу, млять, заработало.
По мотивам вашим сообщений :)
Всем большое спасибо :)
ЗЫ А ничего флейм получился, да? :)
← →
Malder (2002-06-25 20:10) [12]Tzota, еше бы. Ответ на твой вопрос был дан в первом же сообшении. А ты бы хоть не поленился и проверил бы...
← →
nimble (2002-06-26 09:38) [13]А можно было просто в поток запихнуть :))
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c