![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день!
Есть программа, которая запускает по Speedbutton. Когда она выполняется, я нажимаю на крестик формы, но форма закрывается только, когда программа полностью отработает. Почему? И как сделать, чтобы она прерывалась? (Каждый раз делать проверки на Close мне кажется не правильно) Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Application.Terminate; end; procedure TForm1.SpeedButton1Click(Sender: TObject); begin SpeedButton1.Enabled := False; ProgressBar1.Position:=0; ProgressBar1.Position:=ProgressBar1.Position+1; ProgressBar1.Update; ................................................... ProgressBar1.Position:=ProgressBar1.Position+1; ProgressBar1.Update; ................................. end; Последний раз редактировалось Admin, 06.05.2015 в 19:28. |
#2
|
|||
|
|||
![]() Цитата:
Цитата:
Например так Код:
ProgressBar1.Position:=ProgressBar1.Position+1; ProgressBar1.Update; if ModalResult<>0 then Exit; .................................................. . ProgressBar1.Position:=ProgressBar1.Position+1; ProgressBar1.Update; if ModalResult<>0 then Exit; |
Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
shtrih (12.05.2015)
|
#3
|
||||
|
||||
![]() Наверное лучше делать так, хотя общий смысл данного действа остался не понятен
Код:
while ProgressBar1.Position < ProgressBar1.Max do begin ProgressBar1.Position:=ProgressBar1.Position+1; ProgressBar1.Update; if ModalResult<>0 then Exit; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
shtrih (12.05.2015)
|
#4
|
|||
|
|||
![]() Наверно у человека вместо многоточий какие-то полезные вычисления делаются. И каждый раз разные. Но - автора - в студию!
|
#5
|
||||
|
||||
![]() Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#6
|
|||
|
|||
![]() Цитата:
|
#7
|
|||
|
|||
![]() Кроме того, Вы даже кнопку нажать не сможете.
Ведь цикл обработки происходит так: 1) ждётся появление очередного сообщения Windows,(например нажатия SpeedButton1) 2) если есть сообщение, Выбрать его из очереди и 3) обработать.Например запустить SpeedButton1Click) 4) после обработки сообщения 5) Перейти к пункту 1) То есть если во время выполнения длительной процедуры будете нажимать какие-нибудь кнопки на форме, их обработчики будут вызваны только после того, как эта процедура закончится. Для того, что бы не "замораживать" интерфейс намертво, можно внутри этой длинной процедуры вызывать Application.ProcessMessages(); которая содержит внутри себя собственный цикл обработки сообщений. [Щас закидают тухлыми помидорами ![]() По этому более точный код должен быть таким Код:
ProgressBar1.Position:=ProgressBar1.Position+1; ProgressBar1.Update; Application.ProcessMessages(); if ModalResult<>0 then Exit; .................................................. . ProgressBar1.Position:=ProgressBar1.Position+1; ProgressBar1.Update; Application.ProcessMessages(); if ModalResult<>0 then Exit; |