Недавно добавленные исходники

•  Animation Loaders  699

•  DeLiKaTeS Tetris (Тетрис)  5 700

•  TDictionary Custom Sort  7 657

•  Fast Watermark Sources  7 348

•  3D Designer  10 555

•  Sik Screen Capture  7 874

•  Patch Maker  8 096

•  Айболит (remote control)  8 157

•  ListBox Drag & Drop  6 951

•  Доска для игры Реверси  100 173

•  Графические эффекты  8 220

•  Рисование по маске  7 613

•  Перетаскивание изображений  6 216

•  Canvas Drawing  6 583

•  Рисование Луны  6 509

•  Поворот изображения  5 684

•  Рисование стержней  4 606

•  Paint on Shape  3 302

•  Генератор кроссвордов  4 291

•  Головоломка Paletto  3 435

•  Теорема Монжа об окружностях  4 254

•  Пазл Numbrix  2 756

•  Заборы и коммивояжеры  3 660

•  Игра HIP  2 469

•  Игра Go (Го)  2 454

•  Симулятор лифта  2 861

•  Программа укладки плитки  2 297

•  Генератор лабиринта  3 021

•  Проверка числового ввода  2 523

•  HEX View  2 931

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Сжимаем и разжимаем потоки




uses 
  ZLib; 

{ Compress a stream } 

procedure CompressStream(inpStream, outStream: TStream); 
var 
  InpBuf, OutBuf: Pointer; 
  InpBytes, OutBytes: Integer; 
begin 
  InpBuf := nil; 
  OutBuf := nil; 
  try 
    GetMem(InpBuf, inpStream.Size); 
    inpStream.Position := 0; 
    InpBytes := inpStream.Read(InpBuf^, inpStream.Size); 
    CompressBuf(InpBuf, InpBytes, OutBuf, OutBytes); 
    outStream.Write(OutBuf^, OutBytes); 
  finally 
    if InpBuf <> nil then FreeMem(InpBuf); 
    if OutBuf <> nil then FreeMem(OutBuf); 
  end; 
end; 


{ Decompress a stream } 
procedure DecompressStream(inpStream, outStream: TStream); 
var 
  InpBuf, OutBuf: Pointer; 
  OutBytes, sz: Integer; 
begin 
  InpBuf := nil; 
  OutBuf := nil; 
  sz     := inpStream.Size - inpStream.Position; 
  if sz > 0 then  
    try 
      GetMem(InpBuf, sz); 
      inpStream.Read(InpBuf^, sz); 
      DecompressBuf(InpBuf, sz, 0, OutBuf, OutBytes); 
      outStream.Write(OutBuf^, OutBytes); 
    finally 
      if InpBuf <> nil then FreeMem(InpBuf); 
      if OutBuf <> nil then FreeMem(OutBuf); 
    end; 
  outStream.Position := 0; 
end; 


{ 
  Example: 
   Compress the contents of RichEdit1 and 
   calculate the compression rate. 
   Then save the stream to a file (ms2.dat) 

  Beispiel: 
   Komprimiert den Inhalt von RichEdit1 und 
   berechnet die Kompressionsrate. 
   Dann wird der Stream in eine Datei (ms2.dat) gespeichert. 
} 

procedure TForm1.Button1Click(Sender: TObject); 
var 
  ms1, ms2: TMemoryStream; 
begin 
  ms1 := TMemoryStream.Create; 
  try 
    ms2 := TMemoryStream.Create; 
    try 
      RichEdit1.Lines.SaveToStream(ms1); 
      CompressStream(ms1, ms2); 
      ShowMessage(Format('Stream Compression Rate: %d %%', 
        [round(100 / ms1.Size * ms2.Size)])); 
      ms2.SaveToFile('C:\ms2.dat'); 
    finally 
      ms1.Free; 
    end; 
  finally 
    ms2.Free; 
  end; 
end; 

{ 
  Loads the stream from a file (ms2.dat) 
  and decompresses it. 
  Then loads the Stream to RichEdit1. 

  Ladt den komprimierten Stream von einer Datei (ms2.dat) 
  und dekomprimiert ihn. 
  Dann wird der Stream wieder in RichEdit1 geladen. 
} 

procedure TForm1.Button2Click(Sender: TObject); 
var 
  ms1, ms2: TMemoryStream; 
begin 
  ms1 := TMemoryStream.Create; 
  try 
    ms2 := TMemoryStream.Create; 
    try 
      ms1.LoadFromFile('C:\ms2.dat'); 
      DecompressStream(ms1, ms2); 
      RichEdit1.Lines.LoadFromStream(ms2); 
    finally 
      ms1.Free; 
    end; 
  finally 
    ms2.Free; 
  end; 
end;





Похожие по теме исходники

Потоки NTFS

Потоки Multi Thread




Copyright © 2004-2026 "Delphi Sources" by «SiteAnalyzer». Delphi World FAQ

Группа ВКонтакте