Тема: Потоки
Показать сообщение отдельно
  #7  
Старый 02.07.2012, 21:35
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,030
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Gudzik11
Можно по подробней ?

Ну только чуть подробнее.

В главной форме делаешь метод типа:
Код:
TForm1 = class(TForm)
...
procedure ShowProgress(APos, AMax : Integer);
...

procedure TForm1.ShowProgress(APos, AMax : Integer);
begin
   ProgressBar1.MaxValue := AMax;
   ProgressBar1.Position := APos;
end;

Теперь в модуле с потоком надо сделать вызов такой процедуры:
Код:
TProgressEvent = procedure (APos, AMax : Integer) Of Object;

TThread1 = class(TThread)
private
  FPos, FMax : Integer;
  FOnProgress : TProgressEvent;

  procedure CallOnProgress; // нужно для вызова через Synchronize

  property OnProgress : TProgressEvent read FOnProgress wride FOnProgress;
...

procedure TThread1.CallOnProgress;
begin
  If Assigned(FOnProgress) Then FOnProgress(FPos,FMax);
end;

procedure TThread1.Execute;
begin
   // Пример начального вызова
   FPos := 0;
   FMax := 0;
   Synchronize(CallOnProgress);
   ...
end;

Ну там инициализацию, собственно назначение метода из формы и т.д. допишешь самостоятельно. Идея примерно такая. Можно сделать более красиво, но это будет сложнее.
Ответить с цитированием