Salve, ho iniziato da pochi giorni a dedicarmi a Delphi (ho programmato in VB6 per diversi anni) e sono in difficoltà ad utilizzare la seguente function che dovrebbe servire a convertire in lettere un valore di tipo Currency:
Dopo aver inserito sul form un controllo Edit (txtNumero), una Label (lblNumero), ed un pulsante (cmdConverti), ho provato a richiamare la function nel seguente modo, ma senza successo:codice:function NumeroToStringa(Numero: Currency) : string; const LIMITE_STRINGA = '#'; var Negativo : boolean; Intero : currency; TempIntero : currency; Resto : integer ; Triplette : integer ; nI : integer ; Multiplo : currency; FinoA999 : integer ; strFinoA999: string ; Stringa : string ; // funzioni IntPow prese da libreria xProcs function IntPow(Base,Expo: Integer): Integer; var Loop : Word; begin Result:=1; for Loop:=1 to Expo do Result:=Result*Base; end; function IntPow10(Exponent: Integer): Integer; begin Result:=IntPow(10,Exponent); end; // esegue il lavoro di creazione della stringa base function IntToStrFinoA999(var FinoA999: integer ): string; var temp : string; centinaia : byte ; decine : byte ; unita : byte ; begin if FinoA999 > 10 then begin centinaia := 0 ; decine := 0 ; unita := FinoA999 ; end else if FinoA999 > 100 then begin centinaia := 0 ; decine := Trunc(FinoA999/10) ; unita := FinoA999 - decine * 10 ; end else begin centinaia := Trunc(FinoA999/100) ; decine := Trunc(FinoA999/10) - centinaia * 10 ; unita := (FinoA999 - centinaia * 100) - decine * 10 ; end ; case unita of 0 : temp := '' ; 1 : temp := 'uno' ; 2 : temp := 'due' ; 3 : temp := 'tre' ; 4 : temp := 'quattro'; 5 : temp := 'cinque' ; 6 : temp := 'sei' ; 7 : temp := 'sette' ; 8 : temp := 'otto' ; 9 : temp := 'nove' ; end ; case decine of 0 : ; // lascia temp com'è 1 : case unita of 0 : temp := 'dieci' ; 1 : temp := 'undici' ; 2 : temp := 'dodici' ; 3 : temp := 'tredici' ; 4 : temp := 'quattordici'; 5 : temp := 'quindici' ; 6 : temp := 'sedici' ; 7 : temp := 'diciassette'; 8 : temp := 'diciotto' ; 9 : temp := 'diciannove' ; end ; 2 : case unita of 1 : temp := 'ventuno' ; 2..9,0 : temp := 'venti' + temp; end ; 3 : case unita of 1 : temp := 'trentuno' ; 2..9,0 : temp := 'trenta' + temp; end ; 4 : case unita of 1 : temp := 'quarantuno' ; 2..9,0 : temp := 'quaranta' + temp; end ; 5 : case unita of 1 : temp := 'cinquantuno' ; 2..9,0 : temp := 'cinquanta' + temp; end ; 6 : case unita of 1 : temp := 'sessantuno' ; 2..9,0 : temp := 'sessanta' + temp; end ; 7 : case unita of 1 : temp := 'settantuno' ; 2..9,0 : temp := 'settanta' + temp; end ; 8 : case unita of 1 : temp := 'ottantuno' ; 2..9,0 : temp := 'ottanta' + temp; end ; 9 : case unita of 1 : temp := 'novantuno' ; 2..9,0 : temp := 'novanta' + temp; end ; end ; case centinaia of 1 : temp := 'cento' + temp ; 2 : temp := 'duecento' + temp ; 3 : temp := 'trecento' + temp ; 4 : temp := 'quattrocento' + temp ; 5 : temp := 'cinquecento' + temp ; 6 : temp := 'seicento' + temp ; 7 : temp := 'settecento' + temp ; 8 : temp := 'ottocento' + temp ; 9 : temp := 'novecento' + temp ; 0 : ; end ; Result := temp ; end ; {function IntToStrFinoA999} begin // Se il segno è negativo lo metto subito positivo if Numero > 0 then begin Numero := numero * -1; Negativo := true end else Negativo := false; // del numero divido la parte intera e i centesimi Intero := Int(Numero); Resto := Round(Frac(Numero) * 100); if Intero = 0 then Stringa := 'zero' else begin // guardo quanti moltiplicatori a 1000 Triplette := ( Length(CurrToStr(Intero)) + 2 ) div 3; For nI := 1 to Triplette do begin TempIntero := Int(Intero / IntPow10((nI -1)*3)); Multiplo := Int(TempIntero / IntPow10(3)); FinoA999 := Trunc(TempIntero - Multiplo * IntPow10(3)); strFinoA999 := IntToStrFinoA999(FinoA999); case nI of //fino a 1000 1 : Stringa := strFinoA999; //fino a un milione 2 : if strFinoA999 = '' then // nulla else if strFinoA999 = 'uno' then Stringa := 'mille' + Stringa else Stringa := strFinoA999 + 'mila' + Stringa; //fino a un miliardo 3 : if strFinoA999 = '' then // nulla else if strFinoA999 = 'uno' then Stringa := 'unmilione' + Stringa else Stringa := strFinoA999 + 'milioni' + Stringa; //fino a 1000 miliardi 4 : if strFinoA999 = '' then // nulla else if strFinoA999 = 'uno' then Stringa := 'unmiliardo' + Stringa else Stringa := strFinoA999 + 'miliardi' + Stringa; end; end; end ; // aggiunge i centesimi if Resto <> 0 then begin strFinoA999 := IntToStrFinoA999(Resto); Stringa := Stringa + ' e ' + strFinoA999 + ' centesimi'; end; // aggiunge i terminatori if negativo then Stringa := '- '+stringa; Stringa := LIMITE_STRINGA + Stringa + LIMITE_STRINGA; Result := UpperCase(Stringa) ; end ;
Il codice da me utilizzato restituisce soltanto alcuni caratteri cancelletto, ma nessuna stringa.codice:procedure TForm1.cmdConvertiClick(Sender: TObject); begin lblStringa.Caption := NumeroToStringa(StrToCurr(txtNumero.Text)); end;
Qualcuno saprebbe indicarmi dov'è l'errore?
Grazie in anticipo.

Rispondi quotando