Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];

Вниз

Использование 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 2.101 c
15-1179055784
boriskb
2007-05-13 15:29
2007.06.10
И все таки (старый спор)


3-1174533472
merko$
2007-03-22 06:17
2007.06.10
Копирование записи в IBTable


2-1179798888
delphino
2007-05-22 05:54
2007.06.10
Копирование набора Query в Table


15-1177462495
Потребитель
2007-04-25 04:54
2007.06.10
В США появится медаль "За победу в холодной войне"


2-1179592485
Rafik
2007-05-19 20:34
2007.06.10
Как сменить приоритет у процесса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский