Dari laporan WordPress, beberapa pengunjung blog saya melakukan pencarian ‘source code kompresi file dengan Delphi’. Kelanjutannya, kini saya menulis sebuah tutorial tentang kompresi file dengan Delphi. Tutorial ini menggunakan Delphi 6 dan sebuah library open source ZLIB untuk implementasi kompresi menggunakan metode ZLIB.
Instalasi ZLIB Compression Library
Langkah pertama, silahkan Anda download ZLIB Compression Library bersama source code aplikasi yang saya demokan ini di akhir tulisan ini. Kemudian ekstraklah ke sebuah folder, misalnya di C:\ZlibEx. Selanjutnya tambahkan folder C:\ZlibEx ke Library Path Delphi melalui menu Tools>Environment Options. Pada dialog yang muncul, klik tab Library, dan klik tombol elipsis di samping kanan combobox Library path. Dialog Directories akan muncul.
Klik tombol elipsis yang dilingkari, pilih folder C:\ZlibEx di mana Anda meletakkan ZLIB Compression Library hasil ekstraksi. Tombol Add akan menjadi aktif. Klik Tombol Add, kemudian klik OK. Kembali ke dialog Environment Options. Klik OK lagi.
Mengimplementasikan ZLIB dalam kode
Kita lanjut dengan pembuatan aplikasi kompresi file.
1. Buat sebuah aplikasi baru. Simpanlah file-file aplikasi dalam satu folder.
2. Pada form utama, tambahkan dua buah editbox, dua buah label dan 3 buah button. Tambahkan juga sebuah OpenDialog dan sebuah SaveDialog.
Sebagai perbandingan, berikut rancangan form saya.
2. Pada form utama, tambahkan dua buah editbox, dua buah label dan 3 buah button. Tambahkan juga sebuah OpenDialog dan sebuah SaveDialog.
Sebagai perbandingan, berikut rancangan form saya.
3. Pindah ke kode (F12). Untuk menggunakan ZLIB, Anda harus menambahkan unit ZlibEx.pas ke klausa uses.
implementation {$R *.dfm} uses ZlibEX;
4. Kini kita masukkan kode untuk memilih file yang akan dikompres dan memasukkannya ke Edit1. Demikian juga dengan file target di mana hasil kompresi akan disimpan.
procedure TFMain.BitBtn1Click(Sender: TObject); begin if opendialog1.Execute then Edit1.Text:=opendialog1.FileName; end; procedure TFMain.BitBtn2Click(Sender: TObject); begin if Savedialog1.Execute then Edit2.Text:=SaveDialog1.FileName; end;
5. Terakhir, kita buat kode untuk mengompres file sumber dan menyimpan hasilnya ke file target.
procedure TFMain.SpeedButton1Click(Sender: TObject); var F1: TFileStream; sz1, sz2: Integer; p1, p2: Pointer; ratio: real; begin //baca file sumber ke memori f1:=TFileStream.Create(edit1.Text, fmOpenRead); sz1:=f1.Size; Getmem(p1,sz1); f1.Seek(0, soFromBeginning); f1.Read(p1^, sz1); f1.Free; //mulai dengan kompresi p2:=nil; ZCompress(p1, sz1, p2, sz2, zcMax); Freemem(P1, sz1); //Simpan hasil kompresi ke File target F1:=TFileStream.Create(Edit2.Text, fmCreate); f1.Write(p2^, sz2); f1.Free; FreeMem(p2, sz2); //hitung perbandingan ukuran file ratio:= ((sz1 - sz2)/sz1) * 100; lblResult.Caption:= 'Ukuran File Sumber:'#13+IntToStr(sz1)+'Bytes.'#13+ 'Ukuran File Target (hasil kompresi):'#13+IntToStr(sz2)+'Bytes.'#13+ 'Rasio Kompresi:'#13+FormatFloat('0.00', ratio)+'%.'#13#13+ 'Kompresi selesai.'; end;
6. Save projek Anda dan jalankan dengan menekan F9. Jika semuanya beres, tampilan aplikasi Anda akan seperti ini:
Dan berikut, snapshot ketika kompresi telah selesai.
Kode Selengkapnya
unit umain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons; type TFMain = class(TForm) Shape1: TShape; Bevel1: TBevel; Label1: TLabel; Label2: TLabel; Image1: TImage; Label3: TLabel; Edit1: TEdit; Label4: TLabel; Edit2: TEdit; BitBtn1: TBitBtn; BitBtn2: TBitBtn; SpeedButton1: TSpeedButton; GroupBox1: TGroupBox; lblResult: TLabel; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; Label5: TLabel; Label6: TLabel; procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure FormCreate(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure Label6Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var FMain: TFMain; implementation {$R *.dfm} uses ZlibEX, ShellAPI; procedure TFMain.BitBtn1Click(Sender: TObject); begin if opendialog1.Execute then Edit1.Text:=opendialog1.FileName; end; procedure TFMain.BitBtn2Click(Sender: TObject); begin if Savedialog1.Execute then Edit2.Text:=SaveDialog1.FileName; end; procedure TFMain.Edit1Change(Sender: TObject); begin SpeedButton1.Enabled:=FileExists(edit1.Text); if SpeedButton1.Enabled then Edit2.Text:=ChangeFileExt(edit1.Text, '.zlib') else Edit2.Text:='Pilih Target File Hasil kompresi...'; end; procedure TFMain.FormCreate(Sender: TObject); begin Edit1.Text:='Pilih File Yang Akan Dikompress...'; end; procedure TFMain.SpeedButton1Click(Sender: TObject); var F1: TFileStream; sz1, sz2: Integer; p1, p2: Pointer; ratio: real; begin //baca file sumber ke memori f1:=TFileStream.Create(edit1.Text, fmOpenRead); sz1:=f1.Size; Getmem(p1,sz1); f1.Seek(0, soFromBeginning); f1.Read(p1^, sz1); f1.Free; //mulai dengan kompresi p2:=nil; ZCompress(p1, sz1, p2, sz2, zcMax); Freemem(P1, sz1); //Simpan hasil kompresi ke File target F1:=TFileStream.Create(Edit2.Text, fmCreate); f1.Write(p2^, sz2); f1.Free; FreeMem(p2, sz2); //hitung perbandingan ukuran file ratio:= ((sz1 - sz2)/sz1) * 100; lblResult.Caption:= 'Ukuran File Sumber:'#13+IntToStr(sz1)+'Bytes.'#13+ 'Ukuran File Target (hasil kompresi):'#13+IntToStr(sz2)+'Bytes.'#13+ 'Rasio Kompresi:'#13+FormatFloat('0.00', ratio)+'%.'#13#13+ 'Kompresi selesai.'; end; procedure TFMain.Label6Click(Sender: TObject); begin ShellExecute(handle, 'open', PChar(TLabel(Sender).caption),nil, nil, SW_SHOW) end; end.
Dan seperti biasa, Anda harus mengubah ekstensi file hasil download dari .PPT ke .ZIP. Pastikan Anda terhindar dari ancaman virus, trojan dan sebagainya. Silahkan pindai dulu file-file hasil download dengan antivirus sebelum dijalankan.
Tidak ada komentar:
Posting Komentar