Newsgroup: it.comp.lang.visual-basic
Titolo: [?]OCX

Ciao!!!!
Sapete dove posso trovare, se esiste, un OCX per la conversione dei numeri
in lettere?
Grazie
Marco

 in lettere?
Dovrebbe essere completa (senza necessità di riferimenti esterni).
Per numeri con decimali, passa prima l'intero e poi la parte decimale,
sempre come intero.
Function NUMLETT(numero, Optional cifre_a_destra_da_ignorare = 0, Optional
carattere_separazione = "")
'   numero  Solo intero e positivo!
    numlettere = ""
    '   Dimensiona e carica tabella di decodifica
    Dim t(27)
    t(1) = "UNO"
    t(2) = "DUE"
    t(3) = "TRE"
    t(4) = "QUATTRO"
    t(5) = "CINQUE"
    t(6) = "SEI"
    t(7) = "SETTE"
    t(8) = "OTTO"
    t(9) = "NOVE"
    t(10) = "DIECI"
    t(11) = "UNDICI"
    t(12) = "DODICI"
    t(13) = "TREDICI"
    t(14) = "QUATTORDICI"
    t(15) = "QUINDICI"
    t(16) = "SEDICI"
    t(17) = "DICIASSETTE"
    t(18) = "DICIOTTO"
    t(19) = "DICIANNOVE"
    t(20) = "VENTI"
    t(21) = "TRENTA"
    t(22) = "QUARANTA"
    t(23) = "CINQUANTA"
    t(24) = "SESSANTA"
    t(25) = "SETTANTA"
    t(26) = "OTTANTA"
    t(27) = "NOVANTA"
    If numero = 0 Then
        numlettere = "ZERO"
        GoTo esce
    End If
'       Ricava carattere/i di separazione
    csep = carattere_separazione
'       Azzera risposta e considera numero positivo come stringa di 15 crt
    numlettere = ""
    n = Mid(Str(Abs(numero)), 2)
    n = String(15 - Len(n), "0") & n
'       Determina l'entita' del numero e quindi il punto di partenza
'       Il num.e' di 15 cifre in n con eventuali "0" non significativi in
testa
    For cifre = 15 To 3 Step -3
        If cifre_a_destra_da_ignorare = cifre Then
'               Non traduce cifre restanti
            If n <> String(Len(n), "0") Then
                For comodo = 1 To Len(n) / 3
                    numlettere = numlettere & Mid(n, (comodo - 1) * 3 + 1,
3)
                    If comodo < Len(n) / 3 Then numlettere = numlettere &
csep
                Next comodo
            End If
            Exit For
        End If
        terna = Val(Left(n, 3))     'Terna da tradurre
        If terna Then
'               Terna non nulla oltre le (cifre-3) cifre del num.originario
            If terna > 1 Or cifre = 3 Then
'                   La terna e' maggiore di 1 o si sta traducendo
'                   l'ultima terna assoluta del numero originario
'                   Traduce in lettere (in comodo_str) la terna di cifre in
terna
'                   senza accodarvi alcuna traduzione di entita'
'                   Traduce centinaia (0-9)
                comodo = Fix(terna / 100)
                Select Case comodo
                    Case 0
                        comodo_str = ""
                    Case 1
                        comodo_str = "CENTO"
                    Case Else
                        GoSub traduce
                        comodo_str = comodo1_str & "CENTO"
                End Select
'                   Ricava e traduce decine e unita' (0-99)
                comodo = (terna Mod 100)
                GoSub traduce
                comodo_str = comodo_str + comodo1_str
'                   Determina entita' della terna
                Select Case cifre
                    Case 15
                        comodo1_str = "BILIARDI"
                    Case 12
                        comodo1_str = "MILIARDI"
                    Case 9
                        comodo1_str = "MILIONI"
                    Case 6
                        comodo1_str = "MILA"
                    Case 3
                        comodo1_str = ""
                End Select
            Else
'                   La terna e' uguale a 1 e non si sta traducendo
'                   l'ultima terna assoluta del numero originario
'                   Determina entita' della terna
                comodo_str = ""
                Select Case cifre
                    Case 15
                        comodo1_str = "UNBILIARDO"
                    Case 12
                        comodo1_str = "UNMILIARDO"
                    Case 9
                        comodo1_str = "UNMILIONE"
                    Case 6
                        comodo1_str = "MILLE"
                End Select
            End If
'               Accoda a stringa finale numero (comodo_str) e sua entita'
(comodo1_str)
            numlettere = numlettere & comodo_str & comodo1_str
'               Accoda eventuale separatore fra le migliaia
            If cifre > 3 And Val(Mid(n, 4)) > 0 Then numlettere = numlettere
& csep
        End If
'           Ricava cifra restante
        n = Mid(n, 4)
    Next cifre
esce:
    NUMLETT = numlettere
    Exit Function
'   Routine che traduce in lettere (in comodo1_str) la cifra in comodo
'   intesa globalmente con unita' da 0 a 99
traduce:
    Select Case comodo
        Case 0
            comodo1_str = ""
        Case 1 To 19
            comodo1_str = t(comodo)
        Case 20 To 99
            comodo1_str = t(Fix(comodo / 10) + 18)       'Decina
            comodo = (comodo Mod 10)
            If comodo Then
'                   Vi sono unita' - Continua la decina non conclusa
                If comodo = 1 Or comodo = 8 Then
'                       L'unita' comincia con vocale (UNO, OTTO)
'                       Corregge (per esempio)  VENTIUNO in VENTUNO,
'                                               TRENTAOTTO in TRENTOTTO
                    comodo1_str = Left(comodo1_str, Len(comodo1_str) - 1)
                End If
'                   Accoda unita' a decina
                comodo1_str = comodo1_str & t(comodo)
            End If
    End Select
    Return
End Function

Gazie 1000