Pues, compadre, la forma de hacerlo es programarlo.
Y esto, ya sea con una función recursiva, o que se mande llamar tantas veces como bloques de 3 digitos tengas. Algo así:
function ResolverCentenas(pCentena: String): String;
begin
//Resolver hasta 3 dígitos que puede contener pCentena
end;
function NumeroALetra(pNumero: Real): String;
var
sNumero, sTemp: String;
i, j: Integer;
begin
sTemp := '';
if pNumero > 0 then
begin
i := 0
sNumero := IntToStr(Trunc(pNumero));
while Length(sNumero) > 0 do
begin
if Length(sNumero) > 3 then
j := Length(sNumero) - 2
else
j := 1;
case i of
0: sTemp := ResolverCentenas(Copy(sNumero,j,3));
1,3: sTemp := ResolverCentenas(Copy(sNumero,j,3)) + 'mil ' + sTemp;
2: sTemp := ResolverCentenas(Copy(sNumero,j,3)) + 'milllones ' + sTemp;
end;
end;
end;
Result := sTemp;
end;
Algo así.
Nota que no he resuelto la parte decimal, ni he propuesto forma alguna de resolver los centenares, pero esto puede ser tu comienzo, hacia la resolución, sin necesidad de hacerlo recursivo, aunque podrías.
Saludos.