Delphi Examples

ChilkatHOMEASPVisual BasicVB.NETC#Visual C++CMFCDelphiFoxProJavaPerlPHPPythonRubySQL ServerVBScript

Delphi Examples

Bounced Mail
Character Encoding
Digital Certificates
Digital Signatures
Email
FTP
HTML-to-XML
HTTP
IMAP
Encryption
MHT / HTML Email
RSA Encryption
S/MIME
Socket
Spider
String
Tar
Upload
XML
XMP
Zip Compression

More Examples...
Byte Array
Email Object
POP3
SMTP
RSS
Atom
Self-Extractor
Service
PPMD
Deflate
DH Key Exchange
DSA
SSH Key
SSH
SSH Tunnel
SFTP

Unreleased...
Bzip2
LZW
Bz2
Icon

Type Conversion

 

Article: Understanding COM References in Delphi

PPMD Streaming String Compression

Demonstrates streaming string compression using PPMD. Data may be compressed in chunks by initially calling one of the BeginCompress* methods, followed by 0 or more calls to a MoreCompress* method, and terminating with a call to an EndCompress* method.

Likewise, data may be decompressed by calling a BeginDecompress* method, followed by 0 or more MoreDecompress* calls, and ending with an EndDecompress* method call.

This example demonstrates string-to-string compression and decompression in chunks.

Download the Chilkat Compression ActiveX here: ChilkatCompression.zip
Unzip and register the DLL with regsvr32. (This is a pre-release)

uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls,
    CHILKATCOMPRESSIONLib_TLB,
    OleCtrls;

...

procedure TForm1.Button1Click(Sender: TObject);
var
compress: TChilkatCompression;
success: Integer;
strData: String;
i: Integer;
strCompressed: String;
strOriginal: String;
chunk1: String;
chunk2: String;
chunk3: String;
chunk4: String;

begin
compress := TChilkatCompression.Create(Self);

//  Any string argument automatically begins a 30-day trial.
success := compress.UnlockComponent('30-day trial');
if (success <> 1) then
  begin
    ShowMessage('Compression component unlock failed');

  end;

compress.Algorithm := 'ppmd';
compress.Charset := 'ansi';
compress.EncodingMode := 'base64';

//  Create a long string to compress.
strData := 'abcdefg1122334455667788';
strData := strData + #13#10;

//  Note: BeginCompressStringENC may return a zero-length
//  string.  This is normal if the input is buffered and no
//  compressed data is yet available.
//  However, a null reference indicates an error -- which is
//  generally only possible if the component was never unlocked.
strCompressed := compress.BeginCompressStringENC(strData);
if (strCompressed = NULL ) then
  begin
    ShowMessage(compress.LastErrorText);

  end;

//  Compress 100 more chunks of data.  Each call to
//  MoreCompressStringENC may or may not produce additional
//  compressed output.
for i := 0 to 99 do
  begin
    strData := 'abcdefg1122334455667788';
    strData := strData + #13#10;

    strCompressed := strCompressed + compress.MoreCompressStringENC(strData);
  end;

//  Finalize the compression with a single call to EndCompressStringENC:
strCompressed := strCompressed + compress.EndCompressStringENC();

//  Display the compressed string.
//  The result will be:
//  ec8YZ5vk9za18d0plwuV7R65em9OZge9gJXht/QAAAAAAAAAABNOZQAAKw==

Memo1.Lines.Add(strCompressed);

//  Decompress back to the original in a single call.

strOriginal := compress.DecompressStringENC(strCompressed);

//  Display the uncompressed original:
Memo1.Lines.Add('--- Original ---');
Memo1.Lines.Add(strOriginal);

//  Decompress in multiple calls.  It doesn't matter how the
//  compressed data is split -- it could be fed to the decompressor
//  one char at a time if desired.
chunk1 := 'ec8YZ5vk9za1';
chunk2 := '8d0p';
chunk3 := 'lwuV7R65em9OZge9gJXht/QAAAA';
chunk4 := 'AAAAAABNOZQAAKw==';

strOriginal := '';
strOriginal := compress.BeginDecompressStringENC(chunk1);
strOriginal := strOriginal + compress.MoreDecompressStringENC(chunk2);
strOriginal := strOriginal + compress.MoreDecompressStringENC(chunk3);
strOriginal := strOriginal + compress.MoreDecompressStringENC(chunk4);
strOriginal := strOriginal + compress.EndDecompressStringENC();

//  Display the uncompressed original after decompressing in chunks:
Memo1.Lines.Add('--- Original after Decompressing from Chunks ---');
Memo1.Lines.Add(strOriginal);
end;

 

Need a specific example? Send a request to support@chilkatsoft.com

© 2000-2008 Chilkat Software, Inc. All Rights Reserved.

Mail Component · .NET Email Component · XML Parser