Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.23;
Скачать: CL | DM;

Вниз

Глупый вопрос по Application.ProcessMessages;   Найти похожие ветки 

 
antonn ©   (2008-02-24 00:01) [0]

Хотя даже не по нем :)
в главной форме приложения есть процедурка:
procedure TmainForm.Loop;
begin
while FL do begin
            //тыры-пыры
            Application.ProcessMessages;
            sleep(1);
 end;
end;

запуская ее, выполняется бесконечный цикл, в котором ведется кое какой быстрый расчет (FL:=true) в котором точности старта от таймера маловато.
Вопрос - как сделать так, чтобы форма реагировала на "клик по крестику" (закрытие формы (ну  иприложения) кнопкой в заголовке)? :) Не пойму, чего то.. Мессаги перерисовки формы проходят, ресайз, максимизация проходит, а вот закрытие формы - нет. Где подвох?


 
Loginov Dmitry ©   (2008-02-24 00:04) [1]

на OnClose запоминай факт закрытия окна в какой-либо переменной, а этом цикле периодически проверяй ее значение. Можешь также ModalResult заюзать.


 
antonn ©   (2008-02-24 00:14) [2]

да я не пойму, почему сообщение не проходит.. максимизация ведь идет...
а вдруг еще какие сообщения "застревают"?
я так прикинул - очередь сообщений ведь не резиновая, переполнится где нибудь чего нибудь :)


 
Anatoly Podgoretsky ©   (2008-02-24 00:56) [3]

> antonn  (24.02.2008 00:14:02)  [2]

Ничего не застревает, у тебя просто значение FL нигде не изменяется.


 
antonn ©   (2008-02-24 01:04) [4]

FL задается true и все, она больше нигде не изменяется. Только когда мне нужно выйти я делаю FL:=false и вызываю close, все в обработчике какой нибудь кнопки. Но не могу выйти при нажатии "по крестику" :)


 
{RASkov} ©   (2008-02-24 01:39) [5]

> [0] antonn ©   (24.02.08 00:01)

while FL and not Application.Terminated do begin

ну или как-то так....)


 
{RASkov} ©   (2008-02-24 01:46) [6]

> ну или как-то так....)

Впрочем.... без ну :)

> FL задается true и все, она больше нигде не изменяется.

Ага.... тогда именно вот так:
while not Application.Terminated do begin
....
Application.ProcessMessages;
end;


 
Германн ©   (2008-02-24 02:03) [7]


> {RASkov} ©   (24.02.08 01:46) [6]
>
> > ну или как-то так....)
>
> Впрочем.... без ну :)
>

С учетом [4] верно [5].


 
{RASkov} ©   (2008-02-24 02:10) [8]

> [7] Германн ©   (24.02.08 02:03)

Я как обычно... начало прочитаю.... отвечу на него(начало)....потом читаю дальше и ....блин, поспешил :(
Тогда, да - [5]. Но FL заменить! На чтонить более естественное, например - StopLoopFlag :))


 
Германн ©   (2008-02-24 02:12) [9]


> Но FL заменить! На чтонить более естественное, например
> - StopLoopFlag :))
>

+1


 
antonn ©   (2008-02-24 11:34) [10]

спасибо, не догадался сам :)


> Но FL заменить! На чтонить более естественное, например
> - StopLoopFlag :))

зачем? обычная переменная, используется только в 3х местах - в цикле, в форм_креате и кнопке exit; и всего один такой цикл в программе :)
давно она была FLoop в приват секции формы (привык все приватные с F называть), потом подсократил.


 
Сергей М. ©   (2008-02-24 18:40) [11]


> точности старта от таймера маловато


П-п-переведи...



Страницы: 1 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.019 c
6-1183210878
Kor
2007-06-30 17:41
2008.03.23
Обмен данными через Dial-up модем.


15-1202872059
Slider007
2008-02-13 06:07
2008.03.23
С днем рождения ! 13 февраля 2008 среда


2-1203924360
md10
2008-02-25 10:26
2008.03.23
Звязные поля таблиц


15-1202580316
В,алекс
2008-02-09 21:05
2008.03.23
Виста / D7


6-1183235019
TNMNNTP
2007-07-01 00:23
2008.03.23
TNMNNTP