Todo este código es pura API y me funciona muy bien con archivos y carpetas, "origen" y "destino" son strings globales y en la Uses añadir ShellApi.
Código Delphi
[-]
procedure CopyProc;
var StructFile: _SHFILEOPSTRUCT;
begin
if destino <> "" then
begin
StructFile.Wnd:= 0;
StructFile.wFunc:= FO_MOVE;
StructFile.pFrom:= PChar(origen + #0);
StructFile.pTo:= destino;
StructFile.fFlags:= FOF_SIMPLEPROGRESS;
StructFile.lpszProgressTitle:= PChar(origen + ' a ' + destino);
if SHFileOperation(StructFile) = 0 then
MessageBox(0,'Copiado','OK',0);
else
MessageBox(0,'No copiado','Error',MB_ICONHAND);
end
else
MessageBox(hMain,'Se debe seleccionar una carpeta de destino','Error',MB_ICONEXCLAMATION);
end;
Saludos!!!