Bueno, aquí dejo como comprimir ficheros en un archivo zip usando la capacidad del windows XP de tratar los archivos zip como carpetas.
Código Delphi
[-]
uses ComObj;
function NewZip(Zipfile: String): Boolean;
var
F: File;
begin
Result:= FALSE;
AssignFile(F,Zipfile);
{$I-}
Rewrite(F,1);
{$I+}
if IOResult=0 then
begin
try
BlockWrite(F,PChar(#80#75#5#6#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0)^,22);
Result:= TRUE;
except
end;
CloseFile(F);
end;
end;
function AddToZip(Filename, Zipfile: Variant): Boolean;
var
Shell: Variant;
begin
try
Shell:= CreateOleObject('Shell.Application');
Shell.NameSpace(zipfile).CopyHere(Filename);
Result:= TRUE;
except
Result:= FALSE;
end;
end;
NewZip('c:\prueba.zip');
AddToZip(ParamStr(0),'c:\prueba.zip');
AddToZip('c:\prueba','c:\prueba.zip');
Lo pongo en la sección de código inútil (además de para levantar un poco el hilo

) porque la compresión se realiza de forma asíncrona, y no he encontrado una forma (al menos no ninguna seria) de saber cuando se ha terminado de añadir los ficheros al zip, lo que hace difícil de utilizar este código.