![]() |
Re: DEC onProgress-Ereignis bei mehreren Threads
So ganz bin ich noch nicht dahintergestiegen. Es sieht jetzt so aus:
Delphi-Quellcode:
Ich bekomme allerdings bei Encrypt eine Zugriffsverletzung.
for i := 0 to lvFiles.Items.Count - 1 do
begin Filename := lvFiles.Items.Item[i].Caption; if lvFiles.Items.Item[i].SubItems[0] = 'unverschlüsselt' then begin try ProgressAdapter := TStreamProgressAdapter.Create(TFileStream.Create(FileName, fmOpenReadWrite)); try Encrypt(FileName, edtPW1.Text, TCipher_Rijndael); lvFiles.Items.Item[i].SubItems[0] := FloatToStr(ProgressAdapter.Progress); finally FreeAndNil(ProgressAdapter); end; finally FreeAndNil(FileStream); end; end; end; |
Re: DEC onProgress-Ereignis bei mehreren Threads
Ähm, jetzt verstehe ich aber nicht was du eigentlich machst. Encrypt() muß den ProgressAdapter als Stream nutzen und keinen FileNamen.
Delphi-Quellcode:
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.
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; Angenommen es soll eine Bitmap Datei geladen werden:
Delphi-Quellcode:
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.
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; Gruß Hagen |
Re: DEC onProgress-Ereignis bei mehreren Threads
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 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