ich hatte das problem auch. ich bin zuerst einmal mit findfirst/next über die daten gebrettert, habe die gesamtgröße bestimmt.
dann habe ich beim lesen alle x byte und immer am dateiende (damit auch der "rest" berücksichtigt wird) ne message gefeuert (da es auf zwei threads verteilt war), wieviel ich gelesen habe. das habe ich dann in der routine, die die messages empfangen hat aufsummiert und hatte somit gesamtgröße und bearbeitete größe --> prozentsatz.
da nicode ja anscheinen was hat, mit dem man laufend unterrichtet wird, wie weit man ist, sollte das auch durchführbar sein.
Delphi-Quellcode:
//teil 1:
Read:= InStream.Read(Buffer,Sizeof(Buffer));
Inc(Result,Read);
DoSomething(Buffer,Buffer,Read);
OutStream.Write(Buffer,Read);
CryptedBytes(Read);
// da wo kopiert wird:
procedure TCryptoThread.NewProgress(count: longint);
var
old: integer;
begin
inc(actbyte, count);
old := progress;
progress := floor(1000 * actbyte / maxbyte);
// only fire message when something changed
if old <> progress then
SendMessage(Form2.Handle, succ(WM_USER), 0, progress);
end;
// da wo angezeigt wird
procedure TForm2.NewProgress(var msg: TMessage);
begin
ProgressBar2.Position := msg.LParam;
end;