Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

BuGFiX

[Tutorial] Extraindo arquivos RAR com seu programa

Recommended Posts

Extraindo arquivos RAR

 

Primeiro baixe o componente DFUnRAR no seguinte Link

 

http://www.rarlab.com/rar/TDFUnRar.zip

 

descomprima o arquivo em um diretório qualquer

 

vá até o diretório "src" e abra o arquivo "DFUnRAR.pas"

 

vá até Component > Install Compoenent

Imagem Postada

 

Clique na aba "Into New Package"

 

Imagem Postada

 

Clique em OK e depois responda "Yes" na mensagem que irá aparecer

 

Pronto! O Componente será instalado e a aba "DFrisch" aparecerá no Delphi

 

 

Crie um novo projeto no Delphi

 

Adicione 3 Label, 2 Button,2 SpeedButton, 1 OpenDialog, 2 Edit, um Gauge que fica na aba "Samples"

e por fim o componente DFUnRAR (na aba DFrisch)

 

Agora mude algumas propriedades....

 

Label1.Caption = "Arquivo:"
Label2.Caption = "Extrair para:"
Label3.Caption = "Progresso:"

Button1.Caption = "Extrair"
Button2.Caption = "Cancelar Extração"

SpeedButton1.Caption = "..."
SpeedButton2.Caption = "..."
SpeedButton1.Flat = "True"
SpeedButton2.Flat = "True"

OpenDialog1.Filer = "Arquivos RAR|*.rar"
Organize os componentes desta maneira (ou de qualque jeito se você quiser :)

 

Imagem Postada

 

Adicione a unit "untUnRAR" e a unit QDialogs que tem uma função util para nós

( tanto tempo sem mexer com delphi que não lembro + como escolher diretórios manualmente :)

 

Declare na seção Public do Form1 as variáveis

 

IsExtracting: Boolean;

Abort: Boolean;

 

 

no evento OnCreate do Form1 adicione:

 

procedure TForm1.FormCreate(Sender: TObject);
begin
LoadRarLibrary();
end;

e no envento OnDestroy:

 

procedure TForm1.FormCreate(Sender: TObject);
begin
UnLoadRarLibrary();
end;

no evento onclick do Button1 adicione o seguite código:

 

procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Enabled:=False; 
Button2.Enabled:=True;
SpeedButton1.Enabled:=False;
SpeedButton2.Enabled:=False;
Gauge1.Progress:=Gauge1.MinValue;
with Edit2 do
if Text <> '' then DFUnRAR1.Directory:=Text;
DFUnRar1.FileName := Edit1.Text;
if not FileExists(DFUnRar1.FileName) then begin
 ShowMessage('Este arquivo não existe!'+#13#10+
 'Você deve digitar o nome de um arquivo');
 Exit;
 end
 else begin
 isExtracting:=True;
 DFUnRar1.Extract;

 isExtracting:=False;
if not Abort then ShowMessage('Extração Competa!');
 Button1.Enabled:=True;
 Button2.Enabled:=False;
 SpeedButton1.Enabled:=True;
 SpeedButton2.Enabled:=True;
 end;
end;

no evento onclick do Button2 adicione:

 

procedure TForm1.Button2Click(Sender: TObject);
begin
DFUnRAR1.StopProcessing:=True;
Abort:=True;
ShowMessage('Extração cancelada pelo usuário!');
Gauge1.Progress:=Gauge1.MinValue;
end;

no envento onclick do SpeedButton1 adicione:

 

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
 Edit1.Text := OpenDialog1.FileName;
end;

 

e no evento onclick do SpeedButton2 adicione:

procedure TForm1.SpeedButton2Click(Sender: TObject);
var
dir: widestring;
begin
// função da unit QDialogs seleciona um diretório
if SelectDirectory('Selecione um diretório','',dir ) then
 Edit2.Text:=dir+'\';
end;

mude a propriedade CanProgress do DFUnRAR1 para True e adicione o seguinte codigo ao evento onprogress do componente DFUnRAR1:

 

procedure TForm1.DFUnRar1Progress(Sender: TObject; FilesProcessed,
 FileCount, SizeProcessed, SizeCount: Cardinal);
begin
if (FileCount > 0) and (isExtracting) then
 begin
 Gauge1.Progress:=FilesProcessed * 100 div FileCount;
 Application.ProcessMessages;
 end;
end;

Copie a dll "UnRAR.dll" para o diretório do seu aplicativo!!

se a dll não estiver lá o programa não funciona!!!

 

Pronto! Agora seu programa já pode extrair arquivos RAR. Por enquanto este programa extrai todos os arquivo comprimidos dentro do RAR

mas com alguns melhoramentos ele pode extrair arquivos individuais

 

PS: não comentei o código aqui porque ia ficar uma confusão.

 

link código fonte deste aplicativo e o programa compilado MUITO BEM COMENTADO http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

 

http://www.delphinsi...emplo_unrar.rar

 

Créditos: BuGFiX http://forum.imasters.com.br/public/style_emoticons/default/clap.gif=)

 

flw, Abraços http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola fiz os procedimentos do tutorial mas na hora que vou executar

esta dando acess violation pode me dizer oq acontece??? Estou rodando aplicaçao no Vista

 

 

"Access violation at address 012C476D in module 'unrar.dll'. Write of address 000036AC."

 

o trecho do codigo segue abaixo

 

procedure TFPrincipal.BitBtn12Click(Sender: TObject);
var
 aplicacao :string;
begin
 aplicacao := ExtractFilePath(ParamStr(0));
 winrar.Directory := aplicacao + 'MODGS.rar';
 winrar.FileName := aplicacao + 'MODGS.rar';
 winrar.Password := 'GSCOMEX';
 winrar.Extract;
end;

obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

boa tarde

 

gostaria de saber se esse sistema também pode ajudar para fazer um auto update onde baixa o arquivo .rar e substitui na pasta de onde foi baixado

 

Olá,

 

aqui no Delphi 2010 não está funcionando para adicionar o componente não veio arquivos DCU nem BPL

alguem poderia me falar se há outra maneira de adicioanar ele

 

Obrigado

 

--------- EDIT

 

Link pra download do exemplo pronto está offline também!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.