|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Если Repaint не помог, значит надо Invalidate вызвать.
Собственно, просто не помню какой из них работает через сообщения, а который делает прямое обновление. Собственно, проблема понятна из описания почему не обновляется. Еще пара замечаний по коду. Форму надо показывать через Show, не через ShowModal. sleep вообще-то блокирует все нафиг, не помню как он работает внутри потока. Лучше использовать System.Classes.TThread.Sleep Вообще, я делал такие формы немного подругому. Во первых, из создание, показ, обновление и удаление делалось в файле проекта. Во вторых, форма показывалась через Show, но была без заголовка и Topmost (что бы пользователь видел ее но не мог закрыть). В третьих, надо вешать курсор ожидания. А в остальном - все то же самое. Вот так все работает: Код:
type TLoadProc = procedure; procedure LoadProc; begin sleep(1500); end; const LoadTasks : Array[1..4] Of TLoadProc = (LoadProc, LoadProc, LoadProc, LoadProc); var I : Integer; begin Application.Initialize; LogoForm := TLogoForm.Create(Nil); LogoForm.ProgressBar1.Min := 0; LogoForm.ProgressBar1.Max := High(LoadTasks); LogoForm.ProgressBar1.Position := 0; Try LogoForm.Show; for I := Low(LoadTasks) to High(LoadTasks) do begin LogoForm.Label1.Caption := 'Running load task ' + IntToStr(I); LogoForm.ProgressBar1.Position := I; LogoForm.Repaint; LoadTasks[i]; end; Finally LogoForm.Free; End; Application.MainFormOnTaskbar := True; Application.CreateForm(TMainForm, MainForm); Application.Run; end. понятно, что для простоты я все поместил в файл проекта и сделал просто заглушку для процедуры загрузки. по хорошему, все надо вынести в соотв. модули и здесь только вызвать один метод. Последний раз редактировалось lmikle, 22.02.2024 в 00:05. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
T232006 (03.03.2024)
|