![]() |
Re: Verschachtelte Schleifen - Gesamtfortschritt
Ich glaube meine Vereinfachung zu Anfang war nicht ganz korrekt, siehe meine folge Postings.
|
Re: Verschachtelte Schleifen - Gesamtfortschritt
Delphi-Quellcode:
SchritteGesamt:=Sectors div (Length(Buffer) div SectorSize) * FPassCount ;
SchritteAktuell:=Pos div (Length(Buffer) div SectorSize) + Sectors div (Length(Buffer) div SectorSize) * Pass; Prozent:=trunc((SchritteAktuell/SchritteGesamt) *100); Funktioniert zumindest in meinem Beispiel:
Delphi-Quellcode:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, MAth, CommCtrl; type TForm1 = class(TForm) ProgressBar1: TProgressBar; Button1: TButton; procedure Button1Click(Sender: TObject); procedure getmsg(var msg:TMessage);message WM_User; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} type PContent=^TContent; Tcontent=record ProgressWnd:hwnd; FormWnd:hwnd; Sectors:integer; SectorSize:integer; FPassCount:integer; LengthBuffer:integer; end; function test(aParam:PContent):integer; var i,Pos,Pass:integer; Param:TContent; Prozent:integer; SchritteGesamt, Schritte:integer; begin Param:=aParam^; dispose(aParam); try for Pass:=0 to param.FPassCount-1 do begin Pos:=0; while Pos < param.Sectors do begin i:=Min(param.Sectors - Pos, param.LengthBuffer div param.SectorSize); inc(Pos,i); SchritteGesamt:=param.Sectors div (param.LengthBuffer div param.SectorSize) * Param.FPassCount ; Schritte:=pos div (param.LengthBuffer div param.SectorSize) + param.Sectors div (param.LengthBuffer div param.SectorSize)*Pass; Prozent:=trunc((Schritte/SchritteGesamt) *100); postmessage(param.ProgressWnd,PBM_SETPOS, Prozent, 0); sleep(200); end; end; finally postmessage(param.ProgressWnd,PBM_SETPOS, 0, 0); postmessage(param.FormWnd,WM_User,0,0); end; end; procedure TForm1.Button1Click(Sender: TObject); var temp:cardinal; Param:PContent; begin new(Param); PAram.ProgressWnd:=progressbar1.Handle; Param.FormWnd:=self.handle; Param.Sectors:=20; Param.SectorSize:=100; Param.FPassCount:=4; Param.LengthBuffer:=300; BeginThread(nil,0,@test,param,0,temp); Button1.Enabled:=false; end; procedure Tform1.getmsg(var msg:TMessage); begin Button1.Enabled:=true; end; end. |
Re: Verschachtelte Schleifen - Gesamtfortschritt
Zitat:
Delphi-Quellcode:
Ich hoffe, da ist jetzt kein Fehler drin. :stupid:
SchritteGesamt:=Sectors * SectorSize * FPassCount div Length(Buffer);
SchritteAktuell := (SectorSize div Length(Buffer)) * (Pos + Pass*Sectors); Prozent:=trunc((SchritteAktuell/SchritteGesamt) *100); |
Re: Verschachtelte Schleifen - Gesamtfortschritt
:firejump: So klappt es. :P Danke noch mal an alle.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz