Escrever valores por extenso

Bom dia!

Pessoal, algum tem alguma funo pronta em Xojo para converter valores por extenso?

Encontrei uma funo em VB5 no Google e estou convertendo para Xojo, mas caso algum tenha uma pronto mais fcil.

De qualquer forma, assim que terminar posto aqui.

Abs

Pessoal, consegui um cdigo para converter para extenso. Testei umas 4 funes diferentes e cheguei nessa. Ela recursiva por isso bem menor e simples.

Crie um mtodo como:

ValorExtenso(Valor As Double, MoedaPlural As String, MoedaSingular As String) retornando string
  '-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  ' ValorExtenso
  '
  ' Fonte: http://www.vbweb.com.br/dicas_visual.asp?Codigo=1162 (Mensagem postada em 14/7/2003 pelo usurio "Everest"
  ' Acessado em 18/nov/2014
  '
  ' Adaptado para o Xojo por Tiago (baciotti@gmail.com)
  ' Data : 18/11/2014
  '
  ' Objetivo: Recebe um Double e converte para o nmero por extenso. 
  '-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  'Fonte: http://www.vbweb.com.br/dicas_visual.asp?Codigo=1162
  
  Dim StrValor As String, Negativo As Boolean
  Dim Buf As String, Parcial As Integer
  Dim Posicao as integer
  dim Unidades(20) As String
  Dim Dezenas(20) As String
  dim Centenas(20) As String
  dim PotenciasSingular(20) As String
  Dim PotenciasPlural(20) As String
  dim vbNullString as string=""
  dim Extenso as String
  
  Negativo = (Valor < 0)
  Valor = Abs((Valor))
  If Valor<>0 Then
    Unidades = Array(vbNullString, "Um", "Dois", _
    "Trs", "Quatro", "Cinco", _
    "Seis", "Sete", "Oito", "Nove", _
    "Dez", "Onze", "Doze", "Treze", _
    "Quatorze", "Quinze", "Dezesseis", _
    "Dezessete", "Dezoito", "Dezenove")
    Dezenas = Array(vbNullString, vbNullString, _
    "Vinte", "Trinta", "Quarenta", _
    "Cinqenta", "Sessenta", "Setenta", _
    "Oitenta", "Noventa")
    Centenas = Array(vbNullString, "Cento", _
    "Duzentos", "Trezentos", _
    "Quatrocentos", "Quinhentos", _
    "Seiscentos", "Setecentos", _
    "Oitocentos", "Novecentos")
    PotenciasSingular = Array(vbNullString, " Mil", _
    " Milho", " Bilho", _
    " Trilho", " Quatrilho")
    PotenciasPlural = Array(vbNullString, " Mil", _
    " Milhes", " Bilhes", _
    " Trilhes", " Quatrilhes")
    
    StrValor = Left(Format(Valor, "000000000000000000.000"), 18)
    For Posicao = 1 To 18 Step 3
      Parcial = Val(Mid(StrValor, Posicao, 3))
      If Parcial<>0 Then
        If Parcial = 1 Then
          Buf = "Um" + PotenciasSingular((18 - Posicao) \\ 3)
        ElseIf Parcial = 100 Then
          Buf = "Cem" + PotenciasSingular((18 - Posicao) \\ 3)
        Else
          Buf = Centenas(Parcial \\ 100)
          Parcial = Parcial Mod 100
          If Parcial <> 0 And Buf <> vbNullString Then
            Buf = Buf + " e "
          End If
          If Parcial < 20 Then
            Buf = Buf + Unidades(Parcial)
          Else
            Buf = Buf + Dezenas(Parcial \\ 10)
            Parcial = Parcial Mod 10
            If Parcial <> 0 And Buf <> vbNullString Then
              Buf = Buf + " e "
            End If
            Buf = Buf + Unidades(Parcial)
          End If
          Buf = Buf + PotenciasPlural((18 - Posicao) \\ 3)
        End If
        If Buf <> vbNullString Then
          If Extenso <> vbNullString Then
            Parcial = Val(Mid(StrValor, Posicao, 3))
            If Posicao = 16 And (Parcial < 100 Or (Parcial Mod 100) = 0) Then
              Extenso = Extenso + " e "
            Else
              Extenso = Extenso + ", "
            End If
          End If
          Extenso = Extenso + Buf
        End If
      End If
    Next
    If Extenso <> vbNullString Then
      If Negativo Then
        Extenso = "Menos " + Extenso
      End If
      If clong(cstr(Valor)) = 1 Then
        Extenso = Extenso + " " + MoedaSingular
      Else
        Extenso = Extenso + " " + MoedaPlural
      End If
    End If
    'Parcial = clong((Valor - clong(Valor)) * 100 + 0.1)
    
    Parcial = clong(  cstr((cdbl(cstr(Valor)) - clong(cstr(Valor))  ) * 100 + 0.1))
    
    
    If Parcial<>0 Then
      Buf = ValorExtenso(Parcial, "Centavos", "Centavo")
      If Extenso <> vbNullString Then
        Extenso = Extenso + " e "
      End If
      Extenso = Extenso + Buf
    End If
  End If
  return Extenso

Tiago,

Esse mtodo est funcionando bem mesmo? No meu teste aqui ele deu problema com os centavos. Alguma dica?

Obrigado.