Buenas.
Yo uso un objeto de Indy el TIdFTP y sin tener mucha idea fui capaz de usarlo con lo cual a mi parecer es bastante sencillo.
Puedes configurar la ruta, el puerto, usuario, login e incluso directorio inicial por propiedades publicas del objeto así que las puedes poner predefinidas en el código fuente o de algún fichero(un .ini) o pedir al usuario en ese momento...
El obejto devuelve una lista por valor(var lista) y también puedes coger un fichero de esa lista.
Código Delphi
[-]
FTP.List(lista,'',false);
FTP.Get([nombre fichero en FTP a granar],[fichero en local a grabar],true,false);
El resto de varibles booleanas hechales un ojo en la rutina Get,no tiene mucho misterio.
Espero haberte ayudado, un saludo.