![]() |
Re: Progress beim komprimieren mit CompressBuf anzeigen
Ja, vielen Dank!
Zum dekomprimieren muss ich dann TDecompressionStream verwenden, oder? Florian |
Re: Progress beim komprimieren mit CompressBuf anzeigen
Falls du noch eine Antwort erwartest - Ja.
marabu |
Re: Progress beim komprimieren mit CompressBuf anzeigen
Hallo,
ich habe mehrere Probleme mit der Funktion mit Progress. Das komprmieren an sich funktioniert, nur wird das OnProgress Ereigniss nie abgearbeitet! :cry: :wall: :gruebel: Beim Dekomprimieren (aus dem Code oben selbst zusammengefriemelt) bekomme ich immer, wenn ich auf eine eigenschaft des dekompressionstreams zugreifen will den Fehler: Ungültige Stream Operation! :wall: Meine Funktion
Delphi-Quellcode:
Florian
procedure deCompressStream(inStream, outStream: TStream);
var cs: deTCompressionStream; begin Form1.ProgressBar2.Max := inStream.Size; cs := TdeCompressionStream.Create(inStream); outstream.CopyFrom(cs, cs.Size); cs.OnProgress := Form1.OnDecompressProgress; cs.Free; end; |
Re: Progress beim komprimieren mit CompressBuf anzeigen
Abgesehen von den Tippfehlern - der Code für das OnProgress-Ereignis muss vor dem CopyFrom angegeben werden, sonst kommst du nach der Feier.
marabu |
Re: Progress beim komprimieren mit CompressBuf anzeigen
Oder porbier mal den TStreamProgressAdaper:
![]() |
Re: Progress beim komprimieren mit CompressBuf anzeigen
Stimmt!
Das OnProgress Ereigniss wird jetzt aufgerufen und die Datei komprimiert. :-D Aber entweder ist meine ZLib Unit fehlerhaft, oder es gibt irgend einen Trick, wie ich den TDecompressionStream verwenden muss. Auch wenn ich vorher OnDecompressProgress zuweise kommt spätestens bei
Delphi-Quellcode:
der Fehler: "Ungültige Stream Operation". :?:
OutStream.CopyFrom(cs, cs.Size)
Ich habe ein wenig runprobiert und der Fehler kommt z.B. auch wenn ich nach
Delphi-Quellcode:
auf z.b.
cs := TDecompressionStream.Create(instream)
Delphi-Quellcode:
zugreife! :wall:
cs.Size
Fals ihr denkt, dass es an der ZLib liegt, könnte einer die Hochladen? Weil z.b. der ![]() Florian |
Re: Progress beim komprimieren mit CompressBuf anzeigen
Hai Florian,
wenn Du noch keine Lösung gefunden hast versuche es mal so:
Delphi-Quellcode:
procedure DeCompressStream(inStream, outStream: TStream);
var cs: TDeCompressionStream; Buf: array[0..4095] of byte; Count: integer; begin inStream.Position := 0; cs := TDeCompressionStream.Create(inStream); cs.OnProgress := nil; cs.Position := 0; repeat Count := cs.Read(Buf[0], SizeOf(Buf)); if Count > 0 then begin outStream.Write(Buf[0], Count) end; until (Count = 0); cs.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:03 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