Sono alle prese con una funzione di conversione da intero ad "egiziano".

"|" =1;
"n"=10;
"9"=100
"8"=1000
"r"=10000

Ad esempio il numero intero 4023=|||nn8888 oppure 24230=nnn998888rr

Devo costruire una funzione che prenda in ingresso una stringa (diciamo edit1.Text, che contiene il numero intero) e restitusca un'altra stringa (quella converitita in egiziano)
Ho abbozzato una cosa simile:
codice:
function TfmSecond.DecToEg(s:string): string;
var
  unita,decine,centinaia,migliaia,decimigliaia:0..9;
begin
unita:=0;
decine:=0;
centinaia:=0;
migliaia:=0;
decimigliaia:=0;


unita:=StrToInt(Copy(s,Length(s),1));
decine:=StrToInt(Copy(s,Length(s)-1,1));
centinaia:=StrToInt(Copy(s,Length(s)-2,1));
migliaia:=StrToInt(Copy(s,Length(s)-3,1));
decimigliaia:=StrToInt(Copy(s,Length(s)-4,1));

 while unita<>0 do
   begin
   Result:=Result+'|'; //Result è il valore di ritorno della funzione
   Dec(unita);
   end;

 while decine<>0 do
   begin
   Result:=Result+'n'; //E' uguale a DecToEg:=DecToEg(s)+'n';
   Dec(centinaia);
   end;

 while centinaia<>0 do
   begin
   Result:=Result+'9'; //Result è il valore di ritorno della funzione
   Dec(centinaia);
   end;

 while migliaia<>0 do
   begin
   Result:=Result+'8'; //Result è il valore di ritorno della funzione
   Dec(migliaia);
   end;

 while decimigliaia<>0 do
   begin
   Result:=Result+'r'; //Result è il valore di ritorno della funzione
   Dec(decimigliaia);
   end;
end;
L'attuale funzione non è adoperabile con molti parametri in ingresso, ma in sostanza dovrebbe andare. La mia idea è prendere dalla stringa ogni singolo numero e fare una sorta di abaco. Ad esempio se il mio numero intero è 345 pensavo di prendere a ritroso le:
unita=5
decine=4
centinaia=3

I cicli while non dovrebbero fare altro che stampare il simbolo corrispondente in "egiziano". Dovrei richiamare questa funzione con un pulsante e passare il tutto ad una label:
codice:
procedure TfmSecond.bbOKClick(Sender: TObject);
begin
fmMain.lbNumero1.Caption:=DecToEg(edNumero1.Text);
fmMain.lbNumero2.Caption:=DecToEg(edNumero2.Text);
end;
Ogni volta che eseguo il programma mi va in loop, quasi il blocca il pc. Il problema dovrebbe quindi essere nella sfilza di cicli while che uso, cosa sbaglio?
Vorrei trovare un algoritmo di sviluppo migliore.Spero di essermi spiegato.ciao