Problema com Quick Tips : Compactar e Descompactar com Winrar + Delphi

09/03/2017

0

Olá gente, é o seguinte:
[url:descricao=Quick Tips : Compactar e Descompactar com Winrar + Delphi - Parte I]https://www.devmedia.com.br/quick-tips-compactar-e-descompactar-com-winrar-delphi-parte-i/16256[/url]
[url:descricao=Quick Tips : Compactar e Descompactar com Winrar + Delphi - Parte II]https://www.devmedia.com.br/quick-tips-compactar-e-descompactar-com-winrar-delphi-parte-ii/16257#comentariosArtigo[/url]

Fiz aqui em casa com Delphi 2010. Está funcionando, porém ele não reconhece os arquivos que aponto na CheckListBox e salva tudo que está na raiz do executável.
As Unit's seguintes são as do projeto que fiz seguindo o tutorial. É na primeira que acredito estar o problema, me parece que falta uma linha, seria algo como: "Original := CheckListBox.Items;" mas dessa forma retorna o erro: Incompatible types: 'TStringList' and 'TStrings'
Pelo pouco que entendo de Delphi, acho que não está declarado para a variável Original que ela precisa receber da CheckListBox.

Alguém pode analisar e me ajudar?


unit uAutoBackup;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uDescompactar, uCompactar, StdCtrls, Buttons, ComCtrls, CheckLst;

type
  TfrmPrincipal = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    EdtCaminhoWinrar: TEdit;
    EdtArquivoOriginal: TEdit;
    EdtDestino: TEdit;
    EdtExtensao: TEdit;
    BtnCaminhoWinrar: TBitBtn;
    BtnArquivoOriginal: TBitBtn;
    BtnDestino: TBitBtn;
    BtnDescompactar: TBitBtn;
    OpenDialog1: TOpenDialog;
    Label5: TLabel;
    EdtCaminhoWinrarCompactar: TEdit;
    BtnCaminhoWinrarCompactar: TBitBtn;
    Label6: TLabel;
    CheckListBox: TCheckListBox;
    BtnCheckListBoxAbrir: TBitBtn;
    BtnCheckListBoxLimpar: TBitBtn;
    Label7: TLabel;
    EdtDestinoCompactar: TEdit;
    BtnDestinoCompactar: TBitBtn;
    BtnCompactar: TBitBtn;
    procedure BtnCaminhoWinrarClick(Sender: TObject);
    procedure BtnArquivoOriginalClick(Sender: TObject);
    procedure BtnDestinoClick(Sender: TObject);
    procedure BtnDescompactarClick(Sender: TObject);
    procedure BtnCaminhoWinrarCompactarClick(Sender: TObject);
    procedure BtnCheckListBoxAbrirClick(Sender: TObject);
    procedure BtnCheckListBoxLimparClick(Sender: TObject);
    procedure BtnDestinoCompactarClick(Sender: TObject);
    procedure BtnCompactarClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    CompactarWinrar: TCompactarWinrar;
  end;

var
  frmPrincipal: TfrmPrincipal;

implementation

{$R *.dfm}

procedure TfrmPrincipal.BtnArquivoOriginalClick(Sender: TObject);
begin
  if OpenDialog1.Execute then
  EdtArquivoOriginal.Text := OpenDialog1.FileName;
end;

procedure TfrmPrincipal.BtnCaminhoWinrarClick(Sender: TObject);
begin
  if OpenDialog1.Execute then
  EdtCaminhoWinrar.Text := OpenDialog1.FileName;
end;

procedure TfrmPrincipal.BtnCaminhoWinrarCompactarClick(Sender: TObject);
begin
  if OpenDialog1.Execute then
  EdtCaminhoWinrarCompactar.Text := OpenDialog1.FileName;
end;

procedure TfrmPrincipal.BtnCheckListBoxAbrirClick(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
  CompactarWinrar.Original.Add(OpenDialog1.FileName);
  CheckListBox.Items.Add(OpenDialog1.FileName);
end;
end;

procedure TfrmPrincipal.BtnCheckListBoxLimparClick(Sender: TObject);
begin
  CompactarWinrar.Original.Clear;
  CheckListBox.Clear;
end;

procedure TfrmPrincipal.BtnCompactarClick(Sender: TObject);
Var
       CompactarWinrar : TCompactarWinrar;
begin
  Try
      CompactarWinrar := TCompactarWinrar.Create;
       with CompactarWinrar do
       begin

//Acredito que aqui falta algo como "Original := CheckListBox..." Tentei: "Original := CheckListBox.Items;" Mas ele retorna o erro: Incompatible types: 'TStringList' and 'TStrings'

           Destino := EdtDestinoCompactar.Text;
           PathInstalacao := EdtCaminhoWinrarCompactar.Text;
           Compactar;
       end;
       Finally
         FreeAndNil(CompactarWinrar);
       end;

end;

procedure TfrmPrincipal.BtnDescompactarClick(Sender: TObject);
Var
       DescompactarWinrar : TDescompactarWinrar;
begin
  Try
       DescompactarWinrar := TDescompactarWinrar.Create;
       with DescompactarWinrar do
       begin
              ArquivoOriginal := EdtArquivoOriginal.Text;
              Extensao := EdtExtensao.Text;
              PathDestino := EdtDestino.Text;
              PathInstalacao := EdtCaminhoWinrar.Text;
              Descompactar;
       end;
       Finally
         FreeAndNil(DescompactarWinrar);
       end;
end;

procedure TfrmPrincipal.BtnDestinoClick(Sender: TObject);
begin
  if OpenDialog1.Execute then
  EdtDestino.Text := OpenDialog1.FileName;
end;

procedure TfrmPrincipal.BtnDestinoCompactarClick(Sender: TObject);
begin
  if OpenDialog1.Execute then
  EdtDestinoCompactar.Text := OpenDialog1.FileName;
end;

procedure TfrmPrincipal.FormCreate(Sender: TObject);
begin
  CompactarWinrar := TCompactarWinrar.Create;
end;

procedure TfrmPrincipal.FormDestroy(Sender: TObject);
begin
  CompactarWinrar.Original.Destroy;
  FreeAndNil(CompactarWinrar);
end;

end.


unit uCompactar;
interface
uses
Windows, Dialogs, SysUtils, Classes;
Type
TCompactarWinrar = class
private
FPathInstalacao: String;
FDestino: String;
FOriginal: TStringList;
procedure SetDestino(const Value: String);
procedure SetOriginal(const Value: TStringList);
procedure SetPathInstalacao(const Value: String);
{ private declarations }
protected
{ protected declarations }
public
{ public declarations }
property PathInstalacao : String read FPathInstalacao write SetPathInstalacao;
property Original : TStringList read FOriginal write SetOriginal;
property Destino : String read FDestino write SetDestino;
procedure Compactar;
constructor Create;
published
{ published declarations }
end;
implementation
{ TCompactarWinrar }

procedure TCompactarWinrar.Compactar;
Var
cmd, Arquivos : String;
I: Integer;
begin
for I := 0 to Original.Count - 1 do
begin
Arquivos := Arquivos + '"' + Original.Strings[I] + '" ' ;
end;
Cmd := PathInstalacao + ' a "' + Destino + '"' + ' ' + Arquivos;
WinExec( PAnsiChar(AnsiString(Cmd)), SW_HIDE);
Showmessage('Arquivo Compactado com sucesso !!!');
end;

constructor TCompactarWinrar.Create;
begin
Original := TStringList.Create;
end;

procedure TCompactarWinrar.SetDestino(const Value: String);
begin
if DirectoryExists(ExtractFileDir(Value)) then
FDestino := Value
else
raise Exception.Create('Arquivo de Destino não existe ' + #13+
'Arquivo : ' + Value );
end;

procedure TCompactarWinrar.SetOriginal(const Value: TStringList);
begin
FOriginal := Value
end;

procedure TCompactarWinrar.SetPathInstalacao(const Value: String);
begin
FPathInstalacao := Value;
end;

end.


Desde já agradeço!
Luziraldo Godinho

Luziraldo Godinho

Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar