Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Progress beim komprimieren mit CompressBuf anzeigen (https://www.delphipraxis.net/46219-progress-beim-komprimieren-mit-compressbuf-anzeigen.html)

Zacherl 22. Mai 2005 20:58

Re: Progress beim komprimieren mit CompressBuf anzeigen
 
Ja, vielen Dank!
Zum dekomprimieren muss ich dann TDecompressionStream verwenden, oder?

Florian

marabu 22. Mai 2005 21:27

Re: Progress beim komprimieren mit CompressBuf anzeigen
 
Falls du noch eine Antwort erwartest - Ja.

marabu

Zacherl 23. Mai 2005 06:51

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:
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;
Florian

marabu 23. Mai 2005 07:26

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

Luckie 23. Mai 2005 12:22

Re: Progress beim komprimieren mit CompressBuf anzeigen
 
Oder porbier mal den TStreamProgressAdaper: http://www.luckie-online.de/Delphi/Sonstiges/

Zacherl 23. Mai 2005 17:55

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:
OutStream.CopyFrom(cs, cs.Size)
der Fehler: "Ungültige Stream Operation". :?:

Ich habe ein wenig runprobiert und der Fehler kommt z.B. auch wenn ich nach
Delphi-Quellcode:
cs := TDecompressionStream.Create(instream)
auf z.b.
Delphi-Quellcode:
cs.Size
zugreife! :wall:

Fals ihr denkt, dass es an der ZLib liegt, könnte einer die Hochladen?
Weil z.b. der hier angegebene Code zur String Kompression klappt bei anderen aber bei mir kommt eine Fehlermeldung.

Florian

Sharky 13. Jul 2005 17:46

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.
Seite 2 von 2     12   

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