Hola,
Al cabo me he decidido con un ejemplo que consigue más o menos lo que precisas, recuerda que los componentes utilizados son bastante más potentes que lo que se muestra aquí, quiere decirse que pueden dar mucho más de sí.
Código Delphi
[-]
uses
Dialogs, ExtDlgs, SysUtils,
AbZipKit, AbArcTyp, AbZipTyp;
procedure ComprimirImagenesDentroArchivoZip;
resourcestring
rsExtensioZip = 'zip';
rsFiltrDlgZip = 'Archivos Zip (*.zip)|*.zip';
rsTitleDlgZip = '¿Dónde quieres guardar el archivo Zip?';
rsTitleDlgImg = 'Elige las imágenes que quieres comprimir';
var
i: integer;
zip: TAbZipKit;
dlgZip: TSaveDialog;
dlgImg: TOpenPictureDialog;
begin
zip := TAbZipKit.Create(nil);
dlgZip := TSaveDialog.Create(nil);
dlgImg := TOpenPictureDialog.Create(nil);
try
dlgZip.Title := rsTitleDlgZip;
dlgImg.Title := rsTitleDlgImg;
dlgZip.Filter := rsFiltrDlgZip;
dlgZip.DefaultExt := rsExtensioZip;
dlgZip.Options := dlgZip.Options + [ofOverwritePrompt];
dlgImg.Options := dlgImg.Options + [ofAllowMultiSelect];
if dlgImg.Execute then
begin
if dlgZip.Execute then
begin
zip.DeflationOption := doMaximum;
zip.OpenArchive(dlgZip.FileName);
zip.FileName := dlgZip.FileName;
zip.StoreOptions := [soStripDrive, soStripPath, soFreshen];
for i := 0 to dlgImg.Files.Count-1 do
begin
zip.AddFiles(dlgImg.Files[i], faAnyFile);
end;
zip.Save;
zip.CloseArchive;
end;
end;
finally
zip.Free;
dlgZip.Free;
dlgImg.Free;
end;
end;
procedure TfrmPrincipal.Button1Click(Sender: TObject);
begin
ComprimirImagenesDentroArchivoZip;
end;