![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
![]() Всем привет. Я сделал прогу, в которой заполняется ProgressBar. Код такой:
Код:
While Form1.ProgressBar1.Position<100 do Begin a:=random(15); Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+a; Sleep(3000); Application.ProcessMessages; End; Все в принципе работает, но! - при работе прогрессбара виснет главная форма. То есть на ней ничего нельзя сделать, даже закрыть. Пробовал поставить Application.ProcessMessages (вроде должно помочь) - не помогает... Кто знает - подскажите, как быть? ЗЫ. Сорри, если не там тему создал, я тут новичек еще) |
#2
|
|||
|
|||
![]() Виснет оно у тебя на sleep(3000).
Сделай так: Код:
var i : Integer; While Form1.ProgressBar1.Position<100 do Begin a:=random(15); Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+a; For i := 1 To 30 Do Begin Sleep(100); Application.ProcessMessages; End; End; |
#3
|
||||
|
||||
![]() Цитата:
P.S. Sleep(3000) - вроде на 3 секунды "усыплять" должно? |
#4
|
|||
|
|||
![]() Ну да, вот оно и усыпляет. Т.е. блокирует выполнение.
Если совсем не помогает (хотя должно), то тогда переделывай на потоки (TThread). Хотя вот такой фокус вполне дает возможность манипулировать с интерфейсом, хотя все и выполняется в одном, главном, потоке программы. |
#5
|
||||
|
||||
![]() Цитата:
|
#6
|
||||
|
||||
![]() Да нафига вы вообще его усыпляете? Уберите вообще вызов Sleep. Вам дали не вешающую альтернативу - Application.ProcessMessages, вот ей и пользуйтесь.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |