Если 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.
понятно, что для простоты я все поместил в файл проекта и сделал просто заглушку для процедуры загрузки. по хорошему, все надо вынести в соотв. модули и здесь только вызвать один метод.