Einzelnen Beitrag anzeigen

TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#6

AW: Zugriff auf TProgressbar.Position aus TThread.Queue

  Alt 20. Sep 2022, 12:29
Sitze gerade vor einem anderen PC aber im Prinzip so:

Delphi-Quellcode:
type
  TOnProgress = procedure(Sender: TObject; Progress: UInt32) of Object;

  TMyWorker = class(TObject)
  private
   FOnProgress : TOnProgress;
   procedure ReportProgress(Progress: UInt32);
  public
    procedure DoIt;
    property OnProgress : TOnProgress read FOnProgress write FOnProgress;
  end;

procedure TMyWorker.Dot;
begin
  TTask.Run(
    for var i := 0 to 100 do
    begin
      ReportProgress(i);
      sleep(50);
    end);
end;

procedure TMyWorker.ReportProgress(Progress: UInt32);
begin
  TThread.Queue(procedure
                 if Assigned(FOnProgress) then
                   FOnProgress(self, Progress);
                end);
end;

[..]

TMainForm = class(TForm)
  pb_Progrsss : TProgressBar;
  Label1: TLabel;
private
  FWorker : TMyWorker ;
public
  procedure OnProgress(Sender: TObject; Progress: UInt32);
  procedure DoSomething;
end;

[..]

procedure TMainForm.OnProgress(Sender: TObject; Progress: UInt32);
begin
  Label1.Caption := Progress.ToString;
  pb_Progress.Position := Progress;
end;

procedure TMainForm.DoSomething;
begin
  FWorker.DoIt;
end;
So ungefähr. Ja, was wirklich im Task läuft ist noch etwas demo mäßig und wird später ersetzt.
  Mit Zitat antworten Zitat