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

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

Задержка [D7]


Soon ©   (2008-06-06 03:44:00) 

День добрый, во время работы где-то подсмотреной процедуры задержки..

procedure Delay(ms : longint);
var
 TheTime : LongInt;
begin
TheTime := GetTickCount + ms;
while GetTickCount < TheTime do
 Application.ProcessMessages;
end;

..невозможно закрыть форму. Можно ли как-то этого избежать?


Loginov Dmitry   (2008-06-06 22:17:00) [1]

В качестве решения проблемы с модальными формами могу предложить следующее:

procedure Delay(ms : longint; AForm: TForm);
var
 TheTime : LongInt;
begin
 TheTime := GetTickCount + ms;
 while (GetTickCount < TheTime) and (AForm.ModalResult = mrNone) do
 begin
   Application.ProcessMessages;
   Sleep(10);
 end;
end;


Еще: для контроля времени задержки надежнее использовать функцию Now, а не GetTickCount (у GetTickCount емкость всего лишь 49.71 дней, а дальше может глюкнуть :).


{RASkov}   (2008-06-06 22:14:00) [2]

> Если форма модальная,

Хм... ну да разговор-то о форме, а не о программе в целом.... тады

> Тын-Дын

Сорри... т.е. извиняюсь за нелепый "наезд" :(


Loginov Dmitry   (2008-06-06 22:07:00) [3]

> невозможно закрыть форму. Можно ли как-то этого избежать?


1. Если форма модальная, то врядли она при нажатии на крестик закроется (там анализ ModalResult идет в отдельном цикле).
2. Будь человеком, не мучай процессор, добавь после вызова Application.ProcessMessages хотябы Sleep(10) :)
3. Для чего понадобились такие пляски с задержкой? Имхо, изврат все это!


{RASkov}   (2008-06-06 22:07:00) [4]

> [7] Тын-Дын ©   (06.06.08 20:33)

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


Тын-Дын   (2008-06-06 20:33:00) [5]

еще раз вопрос перечитай и подумай.


{RASkov}   (2008-06-06 19:41:00) [6]

> [5] Тын-Дын ©   (06.06.08 10:02)
> Выставить boolean-флаг, в цикле проверять.

Вместе с автором см [1]...
Не против альтернативных вариантов, но изврат никчемный ненужен :)
Чем boolean-флаг, такой как Application.Terminated - не устраивает?)


Тын-Дын   (2008-06-06 10:02:00) [7]


> ..невозможно закрыть форму. Можно ли как-то этого избежать?


Выставить boolean-флаг, в цикле проверять.


Рамиль   (2008-06-06 08:41:00) [8]

Таймер чем не устраивает?


DiamondShark   (2008-06-06 08:21:00) [9]


> Не понятноЮ правда, кде может понадовится такая «задержка».

Это не задержка, это грелка для процессора.


ЮЮ   (2008-06-06 05:53:00) [10]

> Не понятноЮ правда, кде может понадовится такая «задержка».

сорри, за акцент :)

Не понятно, правда, где может понадобиться такая «задержка»


ЮЮ   (2008-06-06 05:52:00) [11]

while not Application.Terminatedand (GetTickCount < TheTime) do
Application.ProcessMessages;


Не понятноЮ правда, кде может понадовится такая «задержка».


Наверх

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