Форум: "Основная";
Текущий архив: 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.47 MB
Время: 0.04 c