(* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is TurboPower Abbrevia
 *
 * The Initial Developer of the Original Code is
 * TurboPower Software
 *
 * Portions created by the Initial Developer are Copyright (C) 1997-2002
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * ***** END LICENSE BLOCK ***** *)

{*********************************************************}
{* ABBREVIA: QSTREAMS1.PAS                               *}
{*********************************************************}
{* ABBREVIA Example program file                         *}
{*********************************************************}

unit QStreams1;

interface

uses
  SysUtils, Classes, QGraphics, QForms, AbView, AbZView, AbArcTyp, AbZBrows,
  AbUnzper,   AbZipper, AbZipKit, AbBrowse, AbBase, QDialogs, QMenus, QTypes,
  QControls, QStdCtrls, QGrids, AbQView, AbQZView;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    Open1: TMenuItem;
    Exit1: TMenuItem;
    Action1: TMenuItem;
    Extract1: TMenuItem;
    AbZipView1: TAbZipView;
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    Close1: TMenuItem;
    N1: TMenuItem;
    Add1: TMenuItem;
    AbZipKit1: TAbZipKit;
    Clearmemo1: TMenuItem;
    procedure Open1Click(Sender: TObject);
    procedure Extract1Click(Sender: TObject);
    procedure Close1Click(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure AbZipView1DblClick(Sender: TObject);
    procedure Clearmemo1Click(Sender: TObject);
    procedure Add1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.xfm}

const
  MainCaption = ' Compressed Memo';

procedure TForm1.Open1Click(Sender: TObject);
begin
  OpenDialog1.Filename := '*.zip';
  if OpenDialog1.Execute then
    AbZipKit1.OpenArchive(OpenDialog1.Filename);
end;

procedure TForm1.Extract1Click(Sender: TObject);
var
  ToStream : TMemoryStream;
  Item : TAbArchiveItem;
begin
  Memo1.Clear;
  ToStream := TMemoryStream.Create;
  try
    Item := AbZipView1.Items[AbZipView1.ActiveRow];
    Caption := Item.Filename;
    AbZipKit1.ExtractToStream(Item.FileName, ToStream);
    ToStream.Position := 0;
    Memo1.Lines.LoadFromStream(ToStream);
  finally
    ToStream.Free;
  end;
end;

procedure TForm1.Close1Click(Sender: TObject);
begin
  AbZipKit1.CloseArchive;
  Caption := MainCaption;
end;

procedure TForm1.Exit1Click(Sender: TObject);
begin
  Close1Click(nil);
  Close;
end;

procedure TForm1.AbZipView1DblClick(Sender: TObject);
begin
  Extract1Click(nil);
end;

procedure TForm1.Clearmemo1Click(Sender: TObject);
begin
  Memo1.Clear;
end;

procedure TForm1.Add1Click(Sender: TObject);
var
  FromStream : TMemoryStream;
  FN : string;
begin
  FromStream := TMemoryStream.Create;
  try
    Memo1.Lines.SaveToStream(FromStream);
    if InputQuery('Streams', 'Give it a filename', FN) then begin
      Caption := FN;
      AbZipKit1.AddFromStream(FN, FromStream);
    end;
  finally
    FromStream.Free;
  end;
end;

end.
