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

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

Глупый вопрос по 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 заюзать.


Наверх

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