Ola Fer... ai vai:


function ValorExtenso(Valor :Currency) :String;
var
  StrValores, StrPart, StrValor, PartDec :String;
  i, Parcela, Posicao :Integer;
begin
  StrValores := 'trilhão  '+'trilhões '+'bilhão  
'+'bilhões  '+
                'milhão   '+'milhões  '+'mil     
'+'mil      ';

//Formata o valor corretamente...
  StrValor := CurrToStr(Valor);
  Posicao  := Pos('.',StrValor);

  if Posicao > 0 then
  begin
    PartDec := Copy(StrValor,Posicao+1,2);
    if Length(PartDec) < 2 then
    begin
      StrValor := StrValor+'0';
      PartDec  := PartDec +'0';
    end;
    StrValor :=
StringReplace(StrValor,'.','',[rfReplaceAll]);
  end
  else
  begin
    PartDec  := '00';
    StrValor := StrValor+PartDec;
  end;

  while Length(StrValor) < 17 do StrValor :=
'0'+StrValor;

//Fim da formatação...
  for i := 1 to 5 do begin
    StrPart := Copy(StrValor,((i-1)*3)+1,3);
    Parcela := StrToInt(StrPart);
    if Parcela = 1 then Posicao := 1 else Posicao
:= 10;
    if Parcela > 0 then
    begin
      if Length(Result) > 0 then Result :=
Result+' e ';
      Result := Result+Centenas(Parcela);
      Result :=
Result+TrimRight(Copy(StrValores,((i-1)*18)+Posicao,9));
      if not i = 5 then Result := Result+' ';
    end;
  end;

  if Length(Result) > 0 then
    if Int(Valor) = 1 then
      Result := Result+'real '
    else
      Result := Result+' reais ';

  Parcela := StrToInt(PartDec);

  if Parcela > 0 then
  begin
    if Length(Result) > 0 then Result := Result+'
e ';
    if Parcela = 1 then
      Result := Result+'um centavo'
    else
      Result :=
Result+Dezenas(Parcela)+'centavos';
    end;

  Result := Ajusta(Result);
end;

function Ajusta(Valor :String) :String;
begin
  Valor := Trim(StringReplace(Valor,'  ','
',[rfReplaceAll]));

  if Pos('um mil ',Valor) = 1 then
    Valor := StringReplace(Valor,'um
mil','mil',[rfReplaceAll]);

  if (Copy(Valor,Length(Valor)-8,9) = 'tos
reais') or
     (Copy(Valor,Length(Valor)-8,9) = 'mil
reais') then
  begin
    Result := Valor;
    Exit;
  end;

//Ajusta milhares
  Valor  := StringReplace(Valor,'mil e cento'    
  ,'mil cento'       ,[rfReplaceAll]);
  Valor  := StringReplace(Valor,'mil e duzentos' 
  ,'mil duzentos'    ,[rfReplaceAll]);
  Valor  := StringReplace(Valor,'mil e trezentos'
  ,'mil trezentos'   ,[rfReplaceAll]);
  Valor  := StringReplace(Valor,'mil e
quatrocentos','mil quatrocentos',[rfReplaceAll]);
  Valor  := StringReplace(Valor,'mil e
quinhentos'  ,'mil quinhentos'  ,[rfReplaceAll]);
  Valor  := StringReplace(Valor,'mil e
seiscentos'  ,'mil seiscentos'  ,[rfReplaceAll]);
  Valor  := StringReplace(Valor,'mil e
setecentos'  ,'mil setecentos'  ,[rfReplaceAll]);
  Valor  := StringReplace(Valor,'mil e
oitocentos'  ,'mil oitocentos'  ,[rfReplaceAll]);
  Valor  := StringReplace(Valor,'mil e
novecentos'  ,'mil novecentos'  ,[rfReplaceAll]);
//Ajusta trilhões, bilhões e milhões
  Valor  := StringReplace(Valor,'ão reais' ,'ão
de reais' ,[rfReplaceAll]);
  Valor  := StringReplace(Valor,'ões reais','ões
de reais',[rfReplaceAll]);
//Retorna valor
  Result := Valor;
end;

function Centenas(Valor :Integer) :String;
var
  StrValor, StrDig :String;
begin
  if Valor = 100 then
    Result := 'cem '
  else
  begin
    Result   := '';
    StrDig   := '00'+IntToStr(Valor);
    StrDig   := Copy(StrDig,Length(StrDig)-2,3);
    StrValor := 'cento       '+'duzentos   
'+'trezentos   '+
                'quatrocentos'+'quinhentos 
'+'seiscentos  '+
                'setecentos  '+'oitocentos 
'+'novecentos  ';
    if StrToInt(StrDig[1]) > 0 then
      Result :=
TrimRight(Copy(StrValor,((StrToInt(StrDig[1])-1)*12)+1,12))+'
';
    if StrToInt(Copy(StrDig,2,2)) > 0 then
    begin
      if Length(Result) > 0 then Result :=
Result+'e ';
        Result :=
Result+Dezenas(StrToInt(Copy(StrDig,2,2)))
    end;
  end;
end;

function Dezenas(Valor :Integer) :String;
var
  StrValor, StrDig :String;
begin
   if Valor < 20 then
     Result := Unidades(Valor)
   else
   begin
     Result   := '';
     StrDig   := '00'+IntToStr(Valor);
     StrDig   := Copy(StrDig,Length(StrDig)-1,2);
     StrValor := 'vinte    '+'trinta  
'+'quarenta '+'cinquenta'+
                 'sessenta '+'setenta  '+'oitenta
 '+'noventa  ';
     Result   :=
TrimRight(Copy(StrValor,((StrToInt(StrDig[1])-2)*9)+1,9))+'
';
     if StrToInt(StrDig[2]) > 0 then
       Result := Result+'e
'+Unidades(StrToInt(StrDig[2]));
   end;
end;

function Unidades(Valor :Integer) :String;
const
  StrValor :Array[0..18] of pChar =
('um','dois','três','quatro','cinco','seis',
                                    
'sete','oito','nove','dez','onze','doze',
                                    
'treze','quatorze','quinze','dezesseis',
                                    
'dezessete','dezoito','dezenove');
begin
  Result := StrValor[Valor-1]+' ';
end;









 --- fpsp2000 <[EMAIL PROTECTED]> escreveu: 

---------------------------------

Ola!

 Alguem poderia me passar uma funçao q converta
valor para extenso.

Desde já agradeço,
Fernanda





-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA
MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:

http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou
[EMAIL PROTECTED]



Yahoo! Grupos, um serviço oferecido por:         
                                                 
                              S&atilde;o         
       Paulo                Rio                
de Janeiro                Curitiba               
Porto                 Alegre                Belo 
               Horizonte               
Bras&iacute;lia                                  
                     

---------------------------------
Links do Yahoo! Grupos

   Para visitar o site do seu grupo na web,
acesse:
http://br.groups.yahoo.com/group/delphi-br/
 
   Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
 
   O uso que você faz do Yahoo! Grupos está
sujeito aos Termos do Serviço do Yahoo!.
 

=====

       Leandro...

[> Mutuka <]  



        
        
                
_______________________________________________________ 
Yahoo! Acesso Grátis - Instale o discador do Yahoo! agora. 
http://br.acesso.yahoo.com/ - Internet rápida e grátis


-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a