Консультация № 173011
07.10.2009, 12:27
0.00 руб.
0 4 2
Уважаемые эксперты!
Помогите плиз. На одной форме есть IdHttp1, на другой ProgressBar1. Вот так пытаюсь их связать:
Код:
procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
if AWorkMode = wmWrite then
begin
Form7.ProgressBar1.Max:=AWorkCountMax;
Form7.ProgressBar1.Position:=0;
Form7.Show;
end;
end;

procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
if AWorkMode=wmWrite then Form7.ProgressBar1.Position := AWorkCount;
end;

procedure TForm1.IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
Form7.Close;
end;

Прогресс показывается, но в процессе выполнения может на месте Form7 появиться просто белый прямоугольник и пока не отработает, так и висит. Подскажите как сделать чтобы форма с прогресс-баром отображалась всегда и без тормозов.

Обсуждение

Неизвестный
07.10.2009, 12:43
общий
это ответ
Здравствуйте, Maximus777.
Попробуйте добавить application.processmessages после показа формы(Form7.Show;).


Приложение:
Для чего нужен ProcessMessages : http://www.cyberguru.ru/delphi-sources/classes-vcl/dlya-tchego-nuzhen-processmessages.html
давно
Студент
15716
139
07.10.2009, 12:44
общий
это ответ
Здравствуйте, Maximus777.

После Form7.Show; необходимо подождать пока форма прорисуется до конца, например так

Form7.Show;
Application.ProcessMessages;
Неизвестный
07.10.2009, 12:46
общий
Еще нужно добавить в процедуру IdHTTP1Work(...)
Код:

procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
if AWorkMode=wmWrite then
begin
Form7.ProgressBar1.Position := AWorkCount;
Application.ProcessMessages;
end;
end;
Неизвестный
07.10.2009, 12:57
общий
Application.ProcessMessages; не помогло. Выставил у Form7.FormStyle:=fsStayOnTop;, вроде не исчезает.
Форма ответа