![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Глупый вопрос по Application.ProcessMessages; [D7, 2000, XP]
antonn © (2008-02-24 00:01:00)Хотя даже не по нем :)
в главной форме приложения есть процедурка:
procedure TmainForm.Loop;
begin
while FL do begin
//тыры-пыры
Application.ProcessMessages;
sleep(1);
end;
end;
запуская ее, выполняется бесконечный цикл, в котором ведется кое какой быстрый расчет (FL:=true) в котором точности старта от таймера маловато.
Вопрос - как сделать так, чтобы форма реагировала на "клик по крестику" (закрытие формы (ну иприложения) кнопкой в заголовке)? :) Не пойму, чего то.. Мессаги перерисовки формы проходят, ресайз, максимизация проходит, а вот закрытие формы - нет. Где подвох?
Сергей М. (2008-02-24 18:40:00) [1]
> точности старта от таймера маловато
П-п-переведи...
antonn (2008-02-24 11:34:00) [2]спасибо, не догадался сам :)
> Но FL заменить! На чтонить более естественное, например
> - StopLoopFlag :))
зачем? обычная переменная, используется только в 3х местах - в цикле, в форм_креате и кнопке exit; и всего один такой цикл в программе :)
давно она была FLoop в приват секции формы (привык все приватные с F называть), потом подсократил.
Германн (2008-02-24 02:12:00) [3]
> Но FL заменить! На чтонить более естественное, например
> - StopLoopFlag :))
>
+1
{RASkov} (2008-02-24 02:10:00) [4]> [7] Германн © (24.02.08 02:03)
Я как обычно... начало прочитаю.... отвечу на него(начало)....потом читаю дальше и ....блин, поспешил :(
Тогда, да - [5]. Но FL заменить! На чтонить более естественное, например - StopLoopFlag :))
Германн (2008-02-24 02:03:00) [5]
> {RASkov} © (24.02.08 01:46) [6]
>
> > ну или как-то так....)
>
> Впрочем.... без ну :)
>
С учетом [4] верно [5].
{RASkov} (2008-02-24 01:46:00) [6]> ну или как-то так....)
Впрочем.... без ну :)
> FL задается true и все, она больше нигде не изменяется.
Ага.... тогда именно вот так:
while not Application.Terminated do begin
....
Application.ProcessMessages;
end;
{RASkov} (2008-02-24 01:39:00) [7]> [0] antonn © (24.02.08 00:01)
while FL and not Application.Terminated do begin
ну или как-то так....)
antonn (2008-02-24 01:04:00) [8]FL задается true и все, она больше нигде не изменяется. Только когда мне нужно выйти я делаю FL:=false и вызываю close, все в обработчике какой нибудь кнопки. Но не могу выйти при нажатии "по крестику" :)
Anatoly Podgoretsky (2008-02-24 00:56:00) [9]> antonn (24.02.2008 00:14:02) [2]
Ничего не застревает, у тебя просто значение FL нигде не изменяется.
antonn (2008-02-24 00:14:00) [10]да я не пойму, почему сообщение не проходит.. максимизация ведь идет...
а вдруг еще какие сообщения "застревают"?
я так прикинул - очередь сообщений ведь не резиновая, переполнится где нибудь чего нибудь :)
Loginov Dmitry (2008-02-24 00:04:00) [11]на OnClose запоминай факт закрытия окна в какой-либо переменной, а этом цикле периодически проверяй ее значение. Можешь также ModalResult заюзать.