![]() |
|
#1
|
||||
|
||||
![]() Код:
procedure TForm1.Delay (Milliseconds: Integer); var Tick: DWord; Event: THandle; begin Event := CreateEvent(nil, False, False, nil); try Tick := GetTickCount + DWord(Milliseconds); while (Milliseconds > 0) and (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do begin Application.ProcessMessages; Milliseconds := Tick - GetTickcount; end; finally CloseHandle(Event); end; в принципе все хорошо полностью не тормозит программу, но вот закрыть во время паузы нельзя, можно ли решить эту проблему |
#2
|
||||
|
||||
![]() В программе создавай глобальную переменную, например NowQuit: Boolean = False;
Код:
procedure TForm1.Delay (Milliseconds: Integer); var Tick: DWord; Event: THandle; begin Event := CreateEvent(nil, False, False, nil); try Tick := GetTickCount + DWord(Milliseconds); while not NowQuit do begin while (Milliseconds > 0) and (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do begin Application.ProcessMessages; Milliseconds := Tick - GetTickcount; end; end; finally CloseHandle(Event); end; Как-то так. Думаю понял про что я. И когда надо выйти из программы пиши NowQuit:= True; Помогаю за Спасибо ![]() |
#3
|
||||
|
||||
![]() ну мне при обычном выходе на крестик
|
#4
|
||||
|
||||
![]() Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin NowQuit := True; end; Помогаю за Спасибо ![]() |
#5
|
||||
|
||||
![]() с этими поправками чтото она совсем безнадежно подвисает
|
#6
|
||||
|
||||
![]() Значит чучуть попробуй изменить программу, или используй другую функцию...
Код:
procedure Delay(const AMilliseconds: Cardinal); var SaveTickCount: Cardinal; begin SaveTickCount := GetTickCount; repeat Application.ProcessMessages; until GetTickCount - SaveTickCount > AMilliseconds; end; Помогаю за Спасибо ![]() |
#7
|
||||
|
||||
![]() Если я правильно понял суть вопроса, то нужно добавить всего чуть-чуть
![]() Код:
procedure TForm1.Delay (Milliseconds: Integer); var Tick: DWord; Event: THandle; begin Event := CreateEvent(nil, False, False, nil); try Tick := GetTickCount + DWord(Milliseconds); while (Milliseconds > 0) and (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do begin Application.ProcessMessages; Milliseconds := Tick - GetTickcount; if Application.Terminated then Exit; end; finally CloseHandle(Event); end; Хорошо написанная программа не требует документации ICQ 9-184-668. |