home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 September / Chip_2002-09_cd1.bin / zkuste / vbasic / Data / Utils / XZipComp.exe / XceedCompression.Cab / F112850_unMemComp.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2001-05-10  |  7.5 KB  |  198 lines

  1. {*
  2.   Xceed Streaming Compression Library - Memory Compress sample
  3.   Copyright (c) 2001 Xceed Software Inc.
  4.  
  5.   [unMemComp.pas]
  6.  
  7.   This form module contains the main form's code. It demonstrates how to
  8.   compress a chunk of memory data using different kinds of compression formats,
  9.   and decompress a compressed memory data. It specifically uses:
  10.    - The Compress and Decompress method.
  11.    - The CompressionFormat property.
  12.  
  13.   This file is part of the Xceed Streaming Compression Library sample 
  14.   applications. The source code in this file is only intended as a supplement 
  15.   to Xceed Streaming Compression Library's documentation, and is provided 
  16.   "as is", without warranty of any kind, either expressed or implied.
  17. *}
  18.  
  19. unit unMemComp;
  20.  
  21. interface
  22.  
  23. uses
  24.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  25.   StdCtrls, ExtCtrls, OleCtrls, XceedStreamingCompressionLib_TLB;
  26.  
  27. const
  28.   sTextToCompress = 'This is a little test to show you how the memory ' +
  29.                     'compression works. And it is very easy to use. ' +
  30.                     'And there is some repeating repeating repeating ' + 
  31.                     'repeating repeating repeating repeating repeating text.';
  32.  
  33. type
  34.   TfrmMemComp = class(TForm)
  35.     Label1              : TLabel;
  36.     Label2              : TLabel;
  37.     Label3              : TLabel;
  38.     Label4              : TLabel;
  39.     lblOrigSize         : TLabel;
  40.     lblCompSize         : TLabel;
  41.     Label5              : TLabel;
  42.     lblDecompSize       : TLabel;
  43.     Label6              : TLabel;
  44.     btCompress          : TButton;
  45.     btDecompress        : TButton;
  46.     mmoTextToCompress   : TMemo;
  47.     mmoDecompressedText : TMemo;
  48.     xCompressor         : TXceedStreamingCompression;
  49.     cboCompressionFormat: TComboBox;
  50.  
  51.     procedure FormCreate(Sender: TObject);
  52.     procedure btCompressClick(Sender: TObject);
  53.     procedure btDecompressClick(Sender: TObject);
  54.     procedure mmoTextToCompressChange(Sender: TObject);
  55.   private
  56.     { Private declarations }
  57.     procedure PrepareFormat( nFormat : integer );
  58.   public
  59.     //Will contain the compressed byte array.
  60.     m_vaCompressed   : OleVariant;
  61.   end;
  62.  
  63. var
  64.   frmMemComp: TfrmMemComp;
  65.  
  66. implementation
  67.  
  68. {$R *.DFM}
  69.  
  70. {--------------------------------------------------------------}
  71. { Initialize the original size label. The combo box was filled }
  72. { manually using the property box                              }
  73. {--------------------------------------------------------------}
  74. procedure TfrmMemComp.FormCreate(Sender: TObject);
  75. begin
  76.   mmoTextToCompress.Text := sTextToCompress;
  77.   lblOrigSize.Caption := IntToStr( Length( sTextToCompress ) );
  78.  
  79.   cboCompressionFormat.ItemIndex := 0;  //cfBZip2
  80. end;
  81.  
  82. {--------------------------------------------------------------}
  83. { Create and prepare the compression method/format depending   }
  84. { on the item selected in the combo box                        }
  85. {--------------------------------------------------------------}
  86. procedure TFrmMemComp.PrepareFormat( nFormat : integer );
  87. var
  88.   xBZip2CompressioFormat      : XceedBZip2CompressionFormat;
  89.   xGZipCompressionFormat      : XceedGZipCompressionFormat;
  90.   xStandardCompressionFormat  : XceedStandardCompressionFormat;
  91.   xZip3CompressionFormat      : XceedZip3CompressionFormat;
  92.   xZLibCompressionFormat      : XceedZLibCompressionFormat;
  93.   xBWTCompressionFormat       : XceedBWTCompressionMethod;
  94.   xDeflateCompressionFormat   : XceedDeflateCompressionMethod;
  95.   xStoreCompressionFormat     : XceedStoreCompressionMethod;
  96. begin
  97.   case cboCompressionFormat.ItemIndex of
  98.     0 : begin
  99.           xBZip2CompressioFormat        := CoXceedBZip2CompressionFormat.Create();
  100.           xCompressor.CompressionFormat := xBZip2CompressioFormat;
  101.         end;
  102.     1 : begin
  103.           xGZipCompressionFormat        := CoXceedGZipCompressionFormat.Create;
  104.           xCompressor.CompressionFormat := xGZipCompressionFormat;
  105.         end;
  106.     2 : begin
  107.           xStandardCompressionFormat    := CoXceedStandardCompressionFormat.Create();
  108.           xCompressor.CompressionFormat := xStandardCompressionFormat;
  109.         end;
  110.     3 : begin
  111.           xZip3CompressionFormat        := CoXceedZip3CompressionFormat.Create();
  112.           xCompressor.CompressionFormat := xZip3CompressionFormat;
  113.         end;
  114.     4 : begin
  115.           xZLibCompressionFormat        := CoXceedZLibCompressionFormat.Create();
  116.           xCompressor.CompressionFormat := xZLibCompressionFormat;
  117.         end;
  118.  
  119.     // The next three items are not compression formats. They are compression methods.
  120.     // You can assign them directly to the CompressionFormat property, to get 
  121.     // unformatted compressed streams (no header, footer, checksum, etc).
  122.     5 : begin
  123.           xBWTCompressionFormat         := CoXceedBWTCompressionMethod.Create();
  124.           xCompressor.CompressionFormat := xBWTCompressionFormat;
  125.         end;
  126.     6 : begin
  127.           xDeflateCompressionFormat     := CoXceedDeflateCompressionMethod.Create();
  128.           xCompressor.CompressionFormat := xDeflateCompressionFormat;
  129.         end;
  130.     7 : begin
  131.           xStoreCompressionFormat       := CoXceedStoreCompressionMethod.Create();
  132.           xCompressor.CompressionFormat := xStoreCompressionFormat;
  133.         end;
  134.   end;
  135. end;
  136.  
  137. {--------------------------------------------------------------}
  138. { Compress the text                                            }
  139. {--------------------------------------------------------------}
  140. procedure TfrmMemComp.btCompressClick(Sender: TObject);
  141. var
  142.   vaSource : OleVariant;
  143. begin
  144.   vaSource := mmoTextToCompress.Text;
  145.   PrepareFormat( cboCompressionFormat.ItemIndex );
  146.   try
  147.     //Compress the data in a single block (bEndOfData is true)
  148.     m_vaCompressed := xCompressor.Compress( vaSource, true );
  149.  
  150.     if ( VarIsEmpty( m_vaCompressed ) ) then
  151.       //No output was produced
  152.       lblCompSize.Caption := IntToStr( 0 )
  153.     else
  154.       //Display the compressed byte array size.
  155.       lblCompSize.Caption := IntToStr( VarArrayHighBound( m_vaCompressed, 1 )
  156.                                      - VarArrayLowBound( m_vaCompressed, 1 ) + 1 );
  157.   except
  158.     on xErr: Exception do
  159.       ShowMessage( 'Error during compression : ' + xErr.Message );
  160.   end;
  161. end;
  162.  
  163. {--------------------------------------------------------------}
  164. { Decompress the byte array (compressed data)                  }
  165. {--------------------------------------------------------------}
  166. procedure TfrmMemComp.btDecompressClick(Sender: TObject);
  167. var
  168.   vaDecompressed    : OleVariant;
  169. begin
  170.   if VarIsEmpty( m_vaCompressed ) then
  171.     //The user did not performed a compression first. Refuse to Decompress
  172.     exit;
  173.  
  174.   PrepareFormat( cboCompressionFormat.ItemIndex );
  175.  
  176.   try
  177.     //Decompress the compressed byte array in a single block 
  178.     //(bEndOfData is true).
  179.     vaDecompressed := xCompressor.Decompress( m_vaCompressed, true );
  180.     mmoDecompressedText.Text := VarToStr( vaDecompressed );
  181.     lblDecompSize.Caption := IntToStr( Length( VarToStr( vaDecompressed ) ) );
  182.   except
  183.     on xErr: Exception do
  184.       ShowMessage( 'Error during decompression : ' + xErr.Message );
  185.   end;
  186. end;
  187.  
  188. {--------------------------------------------------------------}
  189. { Update the original size label when the user modifies the    }
  190. { text to compress text box                                    }
  191. {--------------------------------------------------------------}
  192. procedure TfrmMemComp.mmoTextToCompressChange(Sender: TObject);
  193. begin
  194.   lblOrigSize.Caption := IntToStr( Length( mmoTextToCompress.Text ) );
  195. end;
  196.  
  197. end.
  198.