Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.10;
Скачать: CL | DM;

Вниз

Использование ZLib   Найти похожие ветки 

 
Виталий Панасенко ©   (2007-03-22 15:45) [0]

Вот мой тестовый код:
procedure TForm1.Button1Click(Sender: TObject);
var
InStream,
OutStream : TMemoryStream;
Z : TCompressionStream;
Size : Int64;
begin
 InStream := TMemoryStream.Create();
 RichEdit1.Lines.SaveToStream(InStream);
 if InStream.Size<>0 then
   begin
     OutStream := TMemoryStream.Create();
     Z := TCompressionStream.Create(clMax, OutStream);
     InStream.Position := 0;
     Size := Z.CopyFrom(InStream, 0);
     Form1.Caption := IntToStr(Size);
     Z.Free;
     //OutStream.SaveToFile("c:\stream");
     RichEdit.Lines.LoadFromStream(OutStream);
     OutStream.Free;
   end;
 InStream.Free;
end;


Это из фирменного модуля intrcptu.pas.
Отличия только в том, что OutStream пишет в IDataBlock
{
 DataOut is called whenever data is leaving the client or server.  Use this
 procedure to compress or encrypt data.
}
procedure TDataCompressor.DataOut(const Data: IDataBlock);
var
 InStream, OutStream: TMemoryStream;
 ZStream: TCompressionStream;
 Size: Integer;
begin
 InStream := TMemoryStream.Create;
 try
   { Skip BytesReserved bytes of data }
   InStream.Write(Pointer(Integer(Data.Memory) + Data.BytesReserved)^, Data.Size);
   Size := InStream.Size;
   if Size = 0 then Exit;
   OutStream := TMemoryStream.Create;
   try
     ZStream := TCompressionStream.Create(clFastest, OutStream);
     try
       ZStream.CopyFrom(InStream, 0);
     finally
       ZStream.Free;
     end;
     { Clear the datablock, then write the compressed data back into the
       datablock }
     Data.Clear;
     Data.Write(Size, SizeOf(Integer));
     Data.Write(OutStream.Memory^, OutStream.Size);
   finally
     OutStream.Free;
   end;
 finally
   InStream.Free;
 end;
end;

Но мне так и не удалось в моем примере упаковать данные - получаю пустой поток. В Сети находил примеры - вроде как все с моим сходится.. А не работает...


 
Сергей М. ©   (2007-03-22 15:56) [1]


> получаю пустой поток


На основании чего такие утверждения ?


 
Виталий Панасенко ©   (2007-03-22 16:06) [2]


> Сергей М. ©   (22.03.07 15:56) [1]
>
> > получаю пустой поток
>
>
> На основании чего такие утверждения ?

На основании данных, полеченных этими двумя методами

>      //OutStream.SaveToFile("c:\stream");
>      RichEdit.Lines.LoadFromStream(OutStream);

Файл нулевой длинны, в RichEdit тоже пусто...


 
Виталий Панасенко ©   (2007-03-22 16:11) [3]

Странно. использую мемо вместо RichEdit - есть данные...


 
Сергей М. ©   (2007-03-22 16:11) [4]


> На основании данных, полеченных этими двумя методами
>
> >      //OutStream.SaveToFile("c:\stream");


А почему комментарий ?


 
Виталий Панасенко ©   (2007-03-22 16:16) [5]


> А почему комментарий ?

Экспериментировал...


 
Сергей М. ©   (2007-03-22 16:22) [6]


> Виталий Панасенко ©   (22.03.07 16:16) [5]


> Экспериментировал...


"Есть/нет данные" и "непустой/пустой поток" - две разнве разницы)


 
Виталий Панасенко ©   (2007-03-22 16:35) [7]

Вообще, мне БЛОБ сжать нужно... А нашу ветку можно перенести в раздел "Потрепаться" - очень информативная..:-)


 
Сергей М. ©   (2007-03-22 16:36) [8]


> нашу ветку можно перенести в раздел "Потрепаться" - очень
> информативная


Каков вопрос, такова и "информативность")


 
umbra ©   (2007-03-22 17:25) [9]


> >      RichEdit.Lines.LoadFromStream(OutStream);
>
> Файл нулевой длинны, в RichEdit тоже пусто...
>

дело может быть в том, что Lines в RichEdit имеют тип TRichEditStrings, а не Tstrings


 
Виталий Панасенко(дом)   (2007-03-22 23:12) [10]


> umbra ©   (22.03.07 17:25) [9]
>
>
> > >      RichEdit.Lines.LoadFromStream(OutStream);
> >
> > Файл нулевой длинны, в RichEdit тоже пусто...
> >
>
> дело может быть в том, что Lines в RichEdit имеют тип TRichEditStrings,
>  а не Tstrings
>

Но я то пакую поток данных. Архиватору пофиг, что это: документ, картинка или текст. Я то решение нашел в сети(от Devrace) но все равно, интересно было бы самому решить...:-)


 
НеХитрый   (2007-04-13 14:24) [11]

попробуй такой код

procedure TForm1.Button1Click(Sender: TObject);
var
InStream,
OutStream : TMemoryStream;
Z : TCompressionStream;
Size : Int64;
begin
InStream := TMemoryStream.Create();
RichEdit1.Lines.SaveToStream(InStream);
if InStream.Size<>0 then
  begin
    OutStream := TMemoryStream.Create();
    Z := TCompressionStream.Create(clMax, OutStream);
    InStream.Position := 0;
    Size := Z.CopyFrom(InStream, 0);
    Form1.Caption := IntToStr(Size);
    Z.Free;
    //OutStream.SaveToFile("c:\stream");
    //Вот эту строчку добавь:
    OutStream.Seek(0, soFromBeginning);
   
    RichEdit.Lines.LoadFromStream(OutStream);
    OutStream.Free;
  end;
InStream.Free;
end;


 
Johnmen ©   (2007-04-13 14:58) [12]

Чё за НеХитрый реаниматор?
:)



Страницы: 1 вся ветка

Текущий архив: 2007.06.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.041 c
2-1179525517
AlexeiBerkov
2007-05-19 01:58
2007.06.10
поблема с TStringList


2-1179588723
Xamil
2007-05-19 19:32
2007.06.10
Плз, подскажите по opengl


15-1179344956
Суслик
2007-05-16 23:49
2007.06.10
CVS vs SVN


2-1179471546
Клара
2007-05-18 10:59
2007.06.10
Фильтрация


3-1174363086
Lex_!
2007-03-20 06:58
2007.06.10
Заголовки в гриде