Ähm, jetzt verstehe ich aber nicht was du eigentlich machst. Encrypt() muß den ProgressAdapter als Stream nutzen und keinen FileNamen.
Delphi-Quellcode:
procedure Encrypt(const Filename: String; ....);
var
Source,Dest: TStream;
begin
Source := TStreamProgressAdapter.Create(TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone));
try
Dest := TFileStream.Create(TempFilename, fmCreate);
try
with CipherClass.Create('', nil) do
try
Mode := cmCBC;
InitKey(Password, nil);
EncodeStream(Source, Dest, -1);
finally
Free;
end;
finally
Dest.Free;
end;
finally
Source.Free;
end;
DeleteFile(FileName);
RenameFile(TempFileName, FileName);
end;
D.h. der Cipher liest nun die Daten aus Source, verschlüsselt diese und speichert sie in Dest. Über den ProgressAdapter bekommen wir mit wann der Cipher wieviele Bytes aus Source.FStream liesst.Somit kannste TStreamProgressAdapter für jede Art von Stream basierte Funktion nutzen um eine ProgressBar zwischen zu schieben.
Angenommen es soll eine Bitmap Datei geladen werden:
Delphi-Quellcode:
var
Bitmap: TBitmap;
Source: TStream;
begin
Bitmap := TBitmap.Create;
Source := TStreamProgressAdapter.Create(TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone));
try
Bitmap.LoadFromStream(Source);
finally
Source.Free;
end;
end;
Es hängt jetzt nur davon ab wie TStreamProgressAdapter weiter ausgebaut wird. Ich würde im Constructor gleich die TProgressBar mit übergeben, so daß der Adapter diese Updaten kann.
Gruß Hagen