Home » Tutorials » Third-Party-Komponenten » DelphiZip

DelphiZip

TSortGrid

Die Komponente TSortGrid ermöglicht es, den Aufbau eines Zip-Archivs einzusehen und visuell darzustellen. Dies lässt sich aber nur in Kombination mit der TZipMaster-Komponente erreichen. Außerdem wird auf die UnzDll.dll zugegriffen, die folglich auch verfügbar sein muss.
Plaziere nun die beiden Komponenten auf dem Formular. Ich empfehle folgende Einstellungen am Objektinspektor vorzunehmen:

  • Height: 150
  • Width: 364
  • FixedCols: 0
  • ColCount: 4
  • DefaultRowHeight: 16
  • GridLineWidth: 0

Dies macht die ganze Geschichte etwas übersichtlicher.
Nun muss der ZipMaster-Komponente der Pfad zur DLL (Eigenschaft DLLDirectory) und der Dateiname des Zip-Archivs (Eigenschaft ZipFilename) übergeben werden:

 Zipmaster1.DLLDirectory:=ExtractFilePath(ParamStr(0));
  ZipMaster1.ZipFilename:='C:\Archiv.zip';

Das SortGrid soll nachher jeden Eintrag in einer eigenen Zeile anzeigen. Dazu muss die Anzahl der Spalten neu gesetzt werden:

SortGrid1.RowCount := ZipMaster1.Count + 1;

Statten wir das Sortgrid nun mit 4 Spalten aus. Die erste Spalte zeigt den Dateinamen an, die zweite Spalte gibt die gepackte Größe an, die dritte die Originalgröße und zum Schluss wird in der vierten Spalte das Datum angezeigt. Zur Übersicht weren die Spalten beschriftet und auf eine ordentliche Größe gesetzt:

with SortGrid1 do
  begin
    //Größen der Spalten festlegen
    Colwidths[0]:=180;
    Colwidths[1]:=50;
    ColWidths[2]:=50;
    ColWidths[3]:=80;

    //Überschriften setzen
    Cells[0,0]:='Datei';
    Cells[1,0]:='Gepackt';
    Cells[2,0]:='Entpackt';
    Cells[3,0]:='Datum';
  end;

Der letzte Schritt wird es nun sein, die einzelnen Zellen mit den Informationen zu füllen. Die Informatioenn finden wir in der Eigenschaft ZipContens der Zipmaster-Komponente. Es handelt sich dabei um den Typ TList, es liegen also nur Pointer vor. Die Pointer zeigen auf einen Record names ZipDirEntry. Die Eigenschaft TZipmaster.Count erhält die Anzahl der Einträge in dem Archiv. Per For-Schleife können diese dann einzeln durchgegangen werden.

 for I:=1 to ZipMaster1.Count do
  begin
    with ZipDirEntry(ZipMaster1.ZipContents[I-1]^) do
    begin
       SortGrid1.Cells[0,I] := FileName; //Dateiname
       SortGrid1.Cells[1,I] := IntToStr(CompressedSize); //Größe in Bytes komprimiert
       SortGrid1.Cells[2,I] := IntToStr(UncompressedSize); //Größe in Bytes normal
       SortGrid1.Cells[3,I] := FormatDateTime('ddddd',FileDateToDateTime(DateTime));
                                 //Zeitinformationen
    end;
  end;

Der Aufbau des Records ZipDirEntry ist recht umfangreich. Wir nutzen in dem Beispiel die Variable FileName, CompressedSize, UnCompressedSize und DateTime. Weitere Variablen sind z.B. FileComment, welche einen möglichen Kommentar enthält oder Encrypted, die angibt, ob das Archiv mit einem Passwort verschlüsselt wurde. Möchtest Du wissen, mit welcher Kompression das Archiv komprimiert wurde, reicht es die Variable CompressionMethod abzufragen. Den genauen Aufbau des Records findest du in der Unit ZipMstr.