Книга знаний

1С:Предприятие / Приемы программирования / Внешние компоненты

ВК для работы с zlib

Внешняя компонента для работы с упаковщиком и распаковщиком zlib. Приложен тестовый пример для 1С:Предприятие 7.7 и исходный код (Delphi 7).Автор статьи: romix
Последняя редакция №1 от 11.09.10
URL: http://kb.mista.ru/article.php?id=808

Ключевые слова: zlib, компрессия, упаковка, архиватор


Компонента поддерживает два метода - УпаковатьФайл(имяф1, имяф2) и РаспаковатьФайл(имяф2, имяф3), а также свойство УровеньСжатия - "None", "Fastest", "Default" или "Max".

Процедура Выполнить()
    Результ = ЗагрузитьВнешнююКомпоненту (КаталогИБ()+"..\vk_zlib.dll");
    Если Результ = 1 Тогда 
        zlib=СоздатьОбъект("Addin.vk_zlib");
    Иначе 
        Сообщить ("Не найдена внешняя компонента vk_zlib.");
        Возврат;
    КонецЕсли;
    
    имяф1=КаталогИБ()+"Test\colors2.html";
    Сообщить("Файл для упаковки: "+имяф1);
    имяф2=КаталогИБ()+"Test\colors2.zlib";
    Сообщить("Упакованный файл: "+имяф2);
    zlib.УровеньСжатия="Max"; // "None", "Fastest", "Default" или "Max"
    zlib.УпаковатьФайл(имяф1, имяф2);
    
    имяф3=КаталогИБ()+"Test\colors2.test";
    Сообщить("Распакованный файл: "+имяф3);
    zlib.РаспаковатьФайл(имяф2, имяф3);
КонецПроцедуры


Для интересующихся - тестовый код в Delphi 7


///////////////////////////////////////////////////////////////
//Примеры взяты из DRKB Library, 2009 Автор RoboSol
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Zlib, ZlibConst;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure ComressStream( aSource, aTarget : TStream; compressionRate : TCompressionLevel );
var comprStream : TCompressionStream;   
begin  
   // compression level : (clNone, clFastest, clDefault, clMax)   
   comprStream := TCompressionStream.Create( compressionRate, aTarget );
  try  
   comprStream.CopyFrom( aSource, aSource.Size );
   comprStream.CompressionRate;   
  finally  
   comprStream.Free;   
  End;   
End;

procedure DecompressStream(aSource, aTarget: TStream);
var decompStream : TDecompressionStream;   
           nRead : Integer;   
          buffer : array[0..1023] of Char;   
begin  
   decompStream := TDecompressionStream.Create( aSource );   
  try  
    repeat  
      nRead:=decompStream.Read( buffer, 1024 );   
      aTarget.Write( buffer, nRead );   
    Until nRead = 0;   
  finally  
   decompStream.Free;   
  End;   
End;

procedure TForm1.Button1Click(Sender: TObject);
var f1, f2: Tstream;
begin

  f1 := TFileStream.Create('c:\colors2.html', fmOpenRead);
  f2 := TFileStream.Create('c:\colors2.zlib', fmCreate);
  ComressStream(f1, f2, clMax);
  f1.Free;
  f2.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var f1, f2: Tstream;
begin

  f1 := TFileStream.Create('c:\colors2.zlib', fmOpenRead);
  f2 := TFileStream.Create('c:\colors2.test', fmCreate);
  DecompressStream(f1, f2);
  f1.Free;
  f2.Free;
end;

end.


Файл для скачивания


http://x-romix.narod.ru/
vk_zlib.zip

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика