unit U_CompressionFun; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ToolWin, ShlObj, cxShellCommon, cxControls, cxContainer, cxShellTreeView, cxShellListView, StdCtrls, BtnEdit, OleCtnrs, DB, ADODB,ZLib; procedure CompressionStream(var ASrcStream:TMemoryStream;ACompressionLevel:Integer = 2); procedure UnCompressionStream(var ASrcStream:TMemoryStream); implementation uses U_iniparam; //////////////////////////////////////////////////// ///////ѹËõÁ÷ //////////////////////////////////////////////////// procedure CompressionStream(var ASrcStream:TMemoryStream;ACompressionLevel:Integer = 2); var nDestStream:TMemoryStream; nTmpStream:TCompressionStream; nCompressionLevel:TCompressionLevel; begin ASrcStream.Position := 0; nDestStream := TMemoryStream.Create; try //¼¶±ð case ACompressionLevel of 0:nCompressionLevel := clNone; 1:nCompressionLevel := clFastest; 2:nCompressionLevel := clDefault; 3:nCompressionLevel := clMax; else nCompressionLevel := clMax; end; //¿ªÊ¼Ñ¹Ëõ nTmpStream := TCompressionStream.Create(nCompressionLevel,nDestStream); try ASrcStream.SaveToStream(nTmpStream); finally nTmpStream.Free;//ÊͷźónDestStream²Å»áÓÐÊý¾Ý end; ASrcStream.Clear; ASrcStream.LoadFromStream(nDestStream); ASrcStream.Position := 0; finally nDestStream.Clear; nDestStream.Free; end; end; //////////////////////////////////////////////////// ///////½âѹËõÁ÷ //////////////////////////////////////////////////// procedure UnCompressionStream(var ASrcStream:TMemoryStream); var nTmpStream:TDecompressionStream; nDestStream:TMemoryStream; nBuf: array[1..512] of Byte; nSrcCount: integer; begin ASrcStream.Position := 0; nDestStream := TMemoryStream.Create; nTmpStream := TDecompressionStream.Create(ASrcStream); try repeat //¶ÁÈëʵ¼Ê´óС nSrcCount := nTmpStream.Read(nBuf, SizeOf(nBuf)); if nSrcCount > 0 then nDestStream.Write(nBuf, nSrcCount); until (nSrcCount = 0); ASrcStream.Clear; ASrcStream.LoadFromStream(nDestStream); ASrcStream.Position := 0; finally nDestStream.Clear; nDestStream.Free; nTmpStream.Free; end; end; end.