![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#18
|
||||
|
||||
![]() Цитата:
Inc(FPos, random(15)); это аналог FPos := FPos + random(15); И т.к. работу с визуальными компонентами из потока надо синхронизировать выделен метод Код:
procedure TNewThead.SetPos; begin Form1.ProgressBar1.Position := FPos; FPos := Form1.ProgressBar1.Position; end; метод TMainTestForm.InThreadProc выполняется в потоке в цикле и ATerminate := (NextPos > 100); можно считать аналогом While Вообще прикрепленный к сообщению №16 проект сделан универсальным. Достаточно в любой проект скопировать модули UProgressForm и UProgressThread. Создать в любой форме метод Код:
procedure InThreadProc(var NextPos: Integer; var ATerminate: Boolean); и запустить его командой TProgressForm.ShowInThreadProc('Заголовок', 'Сообщение', InThreadProc, Self) Он будет циклически выполняться в отдельной нити пока ATerminate не присвоить True. При этом в модальном окне TProgressForm будет отображаться прогресс выполнения, задаваемый NextPos. Вид модального окна конечно можно менять. Нашел еще одну недопечатку - перезалил Код:
procedure TProgressThread.Execute; //... if needTerminate then Terminate else Synchronize(SetPos); Последний раз редактировалось s0Creator, 29.01.2010 в 09:45. |