home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 September / Chip_2002-09_cd1.bin / zkuste / vbasic / Data / Utils / XZipComp.exe / XceedCompression.Cab / F112854_MemoryCompress.frm (.txt) < prev    next >
Encoding:
Visual Basic Form  |  2001-05-10  |  16.4 KB  |  397 lines

  1. VERSION 5.00
  2. Begin VB.Form frmMemoryCompress 
  3.    BorderStyle     =   3  'Fixed Dialog
  4.    Caption         =   "Memory compression"
  5.    ClientHeight    =   5070
  6.    ClientLeft      =   45
  7.    ClientTop       =   330
  8.    ClientWidth     =   5685
  9.    LinkTopic       =   "Form1"
  10.    MaxButton       =   0   'False
  11.    MinButton       =   0   'False
  12.    ScaleHeight     =   5070
  13.    ScaleWidth      =   5685
  14.    StartUpPosition =   3  'Windows Default
  15.    Begin VB.CommandButton cmdQuit 
  16.       Cancel          =   -1  'True
  17.       Caption         =   "Quit"
  18.       Height          =   315
  19.       Left            =   4275
  20.       TabIndex        =   5
  21.       Top             =   4650
  22.       Width           =   1365
  23.    End
  24.    Begin VB.ComboBox cboCompressionFormat 
  25.       Height          =   315
  26.       Left            =   1875
  27.       Style           =   2  'Dropdown List
  28.       TabIndex        =   1
  29.       Top             =   2025
  30.       Width           =   3690
  31.    End
  32.    Begin VB.TextBox txtDecompressedText 
  33.       Height          =   1215
  34.       Left            =   225
  35.       MultiLine       =   -1  'True
  36.       ScrollBars      =   2  'Vertical
  37.       TabIndex        =   4
  38.       Top             =   3300
  39.       Width           =   5415
  40.    End
  41.    Begin VB.CommandButton cmdDecompress 
  42.       Caption         =   "Decompress"
  43.       Height          =   315
  44.       Left            =   4275
  45.       TabIndex        =   3
  46.       Top             =   2550
  47.       Width           =   1365
  48.    End
  49.    Begin VB.CommandButton cmdCompress 
  50.       Caption         =   "Compress"
  51.       Height          =   315
  52.       Left            =   225
  53.       TabIndex        =   2
  54.       Top             =   2550
  55.       Width           =   1365
  56.    End
  57.    Begin VB.TextBox txtTextToCompress 
  58.       Height          =   1215
  59.       Left            =   150
  60.       MultiLine       =   -1  'True
  61.       ScrollBars      =   2  'Vertical
  62.       TabIndex        =   0
  63.       Text            =   "MemoryCompress.frx":0000
  64.       Top             =   300
  65.       Width           =   5415
  66.    End
  67.    Begin VB.Label lbl 
  68.       Caption         =   "Compression format"
  69.       Height          =   240
  70.       Index           =   5
  71.       Left            =   150
  72.       TabIndex        =   12
  73.       Top             =   2025
  74.       Width           =   1590
  75.    End
  76.    Begin VB.Label lblOriginalSize 
  77.       Caption         =   "0"
  78.       ForeColor       =   &H00C00000&
  79.       Height          =   240
  80.       Left            =   4875
  81.       TabIndex        =   11
  82.       Top             =   1575
  83.       Width           =   690
  84.    End
  85.    Begin VB.Label lbl 
  86.       Caption         =   "Original size"
  87.       Height          =   240
  88.       Index           =   3
  89.       Left            =   3675
  90.       TabIndex        =   10
  91.       Top             =   1575
  92.       Width           =   1065
  93.    End
  94.    Begin VB.Label lbl 
  95.       Caption         =   "Decompressed text:"
  96.       Height          =   240
  97.       Index           =   2
  98.       Left            =   225
  99.       TabIndex        =   9
  100.       Top             =   3075
  101.       Width           =   2865
  102.    End
  103.    Begin VB.Label lblCompressedSize 
  104.       Caption         =   "0"
  105.       ForeColor       =   &H00C00000&
  106.       Height          =   240
  107.       Left            =   3150
  108.       TabIndex        =   8
  109.       Top             =   2625
  110.       Width           =   915
  111.    End
  112.    Begin VB.Label lbl 
  113.       Caption         =   "Compressed size"
  114.       Height          =   240
  115.       Index           =   1
  116.       Left            =   1725
  117.       TabIndex        =   7
  118.       Top             =   2625
  119.       Width           =   1290
  120.    End
  121.    Begin VB.Label lbl 
  122.       Caption         =   "Text to compress"
  123.       Height          =   240
  124.       Index           =   0
  125.       Left            =   150
  126.       TabIndex        =   6
  127.       Top             =   75
  128.       Width           =   2865
  129.    End
  130. Attribute VB_Name = "frmMemoryCompress"
  131. Attribute VB_GlobalNameSpace = False
  132. Attribute VB_Creatable = False
  133. Attribute VB_PredeclaredId = True
  134. Attribute VB_Exposed = False
  135. ' Xceed Streaming Compression Library - Memory Compress sample
  136. ' Copyright (c) 2001 Xceed Software Inc.
  137. ' [MemoryCompress.frm]
  138. ' This form module contains the main form's code. It demonstrates how to
  139. ' compress a chunk of memory data using different kinds of compression formats,
  140. ' and decompress a compressed memory data. It specifically uses:
  141. '  - The Compress and Decompress method.
  142. '  - The CompressionFormat property.
  143. ' This file is part of the Xceed Streaming Compression Library sample applications.
  144. ' The source code in this file is only intended as a supplement to Xceed
  145. ' Streaming Compression Library's documentation, and is provided "as is", without
  146. ' warranty of any kind, either expressed or implied.
  147. Option Explicit
  148. 'The different encoding formats that will serve to populate the combo box
  149. Private Enum enuCompressionFormat
  150.     cfBZip2 = 0
  151.     cfGZip = 1
  152.     cfStandard = 2
  153.     cfZip3 = 3
  154.     cfZLib = 4
  155.     'The next three items are not compression formats. They are compression methods.
  156.     'See the comments in the PrepareCompressionFormat function
  157.     cfBWT = 5   'BurrowsWheeler
  158.     cfDeflate = 6
  159.     cfStore = 7
  160. End Enum
  161. 'Will contain the compressed byte array.
  162. Dim m_vaCompressed As Variant
  163. '====================================================================================
  164. ' EVENTS - triggered by the form and its controls
  165. '====================================================================================
  166. '------------------------------------------------------------------------------------
  167. 'Do the compression of the text
  168. '------------------------------------------------------------------------------------
  169. Private Sub cmdCompress_Click()
  170.     Dim xCompressor As XceedStreamingCompression
  171.     Dim I As Long
  172.     Dim lTextLen As Long
  173.     Dim cBytes() As Byte
  174.     Dim sTextToCompress As String
  175.     Dim lErrorNumber As Long
  176.     'Create an instance of the Xceed Streaming Compression
  177.     Set xCompressor = New XceedStreamingCompression
  178.     With xCompressor
  179.         'Create and prepare the compression format (GZip, ZLib, ...)
  180.         If PrepareCompressionFormat(xCompressor) Then
  181.             'Convert unicode text to an ascii string
  182.             'Useful to reduce the output compressed string, but it could
  183.             'be skipped
  184.             sTextToCompress = txtTextToCompress.Text
  185.             lTextLen = Len(sTextToCompress)
  186.             ReDim cBytes(lTextLen - 1)
  187.             For I = 1 To lTextLen
  188.                 cBytes(I - 1) = Asc(Mid(sTextToCompress, I, 1))
  189.             Next
  190.             
  191.             On Error Resume Next
  192.                 'Compress the ascii string, specifying that (True parameter)
  193.                 'this is the end of data (there will be no more calls to Compress).
  194.                 m_vaCompressed = .Compress(cBytes, True)
  195.                 
  196.                 lErrorNumber = Err.Number
  197.                 If lErrorNumber <> 0 Then
  198.                     MsgBox "Error during compress." & vbCrLf & Err.Description & " (" & Hex(Err.Number) & ")"
  199.                 End If
  200.             On Error GoTo 0
  201.         Else
  202.             'An error occured, we don't know which one, we don't care as it was
  203.             'already shown to the user. We set the error code to an arbitrary
  204.             'value of 1.
  205.             lErrorNumber = 1
  206.         End If
  207.         
  208.         If lErrorNumber = 0 Then
  209.             If IsEmpty(m_vaCompressed) Then
  210.                 'No output was produced
  211.                 lblCompressedSize.Caption = "0"
  212.             Else
  213.                 'Display the compressed byte array size.
  214.                 lblCompressedSize.Caption = CStr(UBound(m_vaCompressed) + 1)
  215.             End If
  216.         End If
  217.     End With
  218.     'Deallocate the Compression object. The Compression object will free
  219.     'the CompressionFormat object.
  220.     Set xCompressor = Nothing
  221. End Sub
  222. '------------------------------------------------------------------------------------
  223. 'Do the decompression of the compressed byte array
  224. '------------------------------------------------------------------------------------
  225. Private Sub cmdDecompress_Click()
  226.     Dim xCompressor As XceedStreamingCompression
  227.     Dim I As Long
  228.     Dim sDecompressedText As String
  229.     Dim lErrorNumber As Long
  230.     Dim vaDecompressed As Variant
  231.     If IsEmpty(m_vaCompressed) Then
  232.         'The user did not performed a compression first. Refuse to Decompress
  233.         Exit Sub
  234.     End If
  235.     'Create an instance of the Xceed Streaming Compression
  236.     Set xCompressor = New XceedStreamingCompression
  237.     With xCompressor
  238.         'Create and prepare the decompression format
  239.         If PrepareCompressionFormat(xCompressor) Then
  240.             On Error Resume Next
  241.                 'Decompress the compressed byte array, specifying that (True parameter)
  242.                 'this is the end of data (there will be no more calls to Decompress).
  243.                 vaDecompressed = .Decompress(m_vaCompressed, True)
  244.                 
  245.                 lErrorNumber = Err.Number
  246.                 If lErrorNumber <> 0 Then
  247.                     MsgBox "Error during compress." & vbCrLf & Err.Description & " (" & Hex(Err.Number) & ")"
  248.                 End If
  249.             On Error GoTo 0
  250.         Else
  251.             'An error occured, we don't know which one and we don't care for it was
  252.             'already shown to the user. We set the error code to an arbitrary
  253.             'value of 1.
  254.             lErrorNumber = 1
  255.         End If
  256.         
  257.         If lErrorNumber = 0 Then
  258.             If Not IsEmpty(vaDecompressed) Then
  259.                 ' Convert byte array to text
  260.                 'Display the decompressed result in the text box.
  261.                 'We convert the ascii string returned by the Decompress
  262.                 'method to Unicode so that the decompressed text box
  263.                 'will contained something readable.
  264.                 'If we had not convert the text to compress string in the Compress
  265.                 'process (to reduce the output compressed string), we
  266.                 'would simply assign the vaDecompressed to the txtDecompressedText.
  267.                 sDecompressedText = Space(UBound(vaDecompressed) + 1)
  268.                 For I = 0 To UBound(vaDecompressed)
  269.                     Mid(sDecompressedText, I + 1, 1) = Chr(vaDecompressed(I))
  270.                 Next
  271.                 txtDecompressedText.Text = sDecompressedText
  272.             End If
  273.         End If
  274.     End With
  275.     'Deallocate the Compression object. The compression object will free
  276.     'the CompressionFormat object.
  277.     Set xCompressor = Nothing
  278. End Sub
  279. '------------------------------------------------------------------------------------
  280. 'Quit the sample application
  281. '------------------------------------------------------------------------------------
  282. Private Sub cmdQuit_Click()
  283.     End
  284. End Sub
  285. '------------------------------------------------------------------------------------
  286. 'Initialize the original size label and fill the combo box
  287. '------------------------------------------------------------------------------------
  288. Private Sub Form_Load()
  289.     lblOriginalSize.Caption = CStr(Len(txtTextToCompress.Text))
  290.     With cboCompressionFormat
  291.         Call .AddItem("BZip2", cfBZip2)
  292.         Call .AddItem("GZip", cfGZip)
  293.         Call .AddItem("Standard", cfStandard)
  294.         Call .AddItem("Zip3", cfZip3)
  295.         Call .AddItem("ZLib", cfZLib)
  296.         Call .AddItem("BurrowsWheeler", cfBWT)
  297.         Call .AddItem("Deflate", cfDeflate)
  298.         Call .AddItem("Store", cfStore)
  299.         .ListIndex = cfBZip2
  300.     End With
  301. End Sub
  302. '------------------------------------------------------------------------------------
  303. 'Update the original size label when the user modify the text to compress text box
  304. '------------------------------------------------------------------------------------
  305. Private Sub txtTextToCompress_Change()
  306.     lblOriginalSize.Caption = CStr(Len(txtTextToCompress.Text))
  307. End Sub
  308. '====================================================================================
  309. ' FUNCTIONS
  310. '====================================================================================
  311. '------------------------------------------------------------------------------------
  312. 'Prepare the compression format according to the user selection
  313. 'Return True if all succeeded
  314. '------------------------------------------------------------------------------------
  315. Private Function PrepareCompressionFormat(ByRef xCompressor As XceedStreamingCompression) As Boolean
  316.     'We use one variable for each encoding format to simplify the programming
  317.     '(code completion). Only one of these will be used at a time (according to
  318.     'the chosen encoding method in the combo box).
  319.     'To see an example of how it could be done without all these declarations,
  320.     'consult the Manager sample application.
  321.     Dim xBZip2Format As XceedBZip2CompressionFormat
  322.     Dim xGZipFormat As XceedGZipCompressionFormat
  323.     Dim xStdFormat As XceedStandardCompressionFormat
  324.     Dim xZip3Format As XceedZip3CompressionFormat
  325.     Dim xZLibFormat As XceedZLibCompressionFormat
  326.     Dim xBWTMethod As XceedBWTCompressionMethod
  327.     Dim xDeflateMethod As XceedDeflateCompressionMethod
  328.     Dim xStoreMethod As XceedStoreCompressionMethod
  329.     Dim bPrepareOK As Boolean
  330.     bPrepareOK = True
  331.     On Error Resume Next
  332.         Select Case cboCompressionFormat.ListIndex
  333.             Case cfBZip2
  334.                 Set xBZip2Format = New XceedBZip2CompressionFormat
  335.                 'Here, we would set the properties if needed
  336.                 
  337.                 'Set the compression format of the compressor object
  338.                 'received as a parameter of this function.
  339.                 Set xCompressor.CompressionFormat = xBZip2Format
  340.                 
  341.                 'Free the temporary compression format. The previous assignation adding
  342.                 'a reference to the compression format object, this object will effectively
  343.                 'be freed by the xCompressor object when it will be freed.
  344.                 Set xBZip2Format = Nothing
  345.             
  346.             Case cfGZip
  347.                 Set xGZipFormat = New XceedGZipCompressionFormat
  348.                 Set xCompressor.CompressionFormat = xGZipFormat
  349.                 Set xGZipFormat = Nothing
  350.             
  351.             Case cfStandard
  352.                 Set xStdFormat = New XceedStandardCompressionFormat
  353.                 Set xCompressor.CompressionFormat = xStdFormat
  354.                 Set xStdFormat = Nothing
  355.             
  356.             Case cfZip3
  357.                 Set xZip3Format = New XceedZip3CompressionFormat
  358.                 Set xCompressor.CompressionFormat = xZip3Format
  359.                 Set xZip3Format = Nothing
  360.             
  361.             Case cfZLib
  362.                 Set xZLibFormat = New XceedZLibCompressionFormat
  363.                 Set xCompressor.CompressionFormat = xZLibFormat
  364.                 Set xZLibFormat = Nothing
  365.             
  366.             
  367.             'The next three items are not compression formats. They are compression
  368.             'methods that can be assigned to the CompressionFormat property of the
  369.             'Xceed Streaming Compression object. In these cases, the resulting
  370.             'compressed streams will have no formating (no header, footer, checksum, ...)
  371.             Case cfBWT
  372.                 Set xBWTMethod = New XceedBWTCompressionMethod
  373.                 Set xCompressor.CompressionFormat = xBWTMethod
  374.                 Set xBWTMethod = Nothing
  375.             
  376.             Case cfDeflate
  377.                 Set xDeflateMethod = New XceedDeflateCompressionMethod
  378.                 Set xCompressor.CompressionFormat = xDeflateMethod
  379.                 Set xDeflateMethod = Nothing
  380.             
  381.             Case cfStore
  382.                 'Using Store as the Compression format will produce an output
  383.                 'compressed stream identical to the text to compress!
  384.                 Set xStoreMethod = New XceedStoreCompressionMethod
  385.                 Set xCompressor.CompressionFormat = xStoreMethod
  386.                 Set xStoreMethod = Nothing
  387.             
  388.         End Select
  389.         
  390.         If Err.Number <> 0 Then
  391.             bPrepareOK = False
  392.             Call MsgBox("Error during compression format initialization." & vbCrLf & Err.Description & " (" & Hex(Err.Number) & ")")
  393.         End If
  394.     On Error GoTo 0
  395.     PrepareCompressionFormat = bPrepareOK
  396. End Function
  397.