Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cambiar numeros a cantidad con letra (https://www.clubdelphi.com/foros/showthread.php?t=56596)

odrack 21-05-2008 17:44:48

Cambiar numeros a cantidad con letra
 
Saludos.

Quiza ya se haya hablado varias veces de este tema pero tengo un pequeño problema que me esta dando dolor de cabeza, tengo este codigo (mostrado en la parte de abajo) el cual esta funcionando correctamente hasta 999,999.99, tengo la necesidad de ampliarlo hasta 9 millones lo cual he tenido algunos problemas para esto. Cuando lo ejecuto marca el siguiente error "EconvertError with message".
Alguien me puede ayudar con esto, se los agradeceria mucho.

Tal y como esta hasta el momento funciona hasta 999,999.99, cuando quito la parte comentada en el codigo produce el error.

Código Delphi [-]
unit Extens;
interface
function extenso (valor: real): string;
implementation
uses
  SysUtils,  Dialogs;
function extenso (valor: real): string;
var
 Centavos, Centena, Millar, Millon,Texto, msg: string;
 const
  Unidades: array[1..9] of string = ('Un','Dos', 'Tres', 'Cuatro', 'Cinco',
                                    'Seis', 'Siete', 'Ocho', 'Nueve');
  Diez: array[1..9] of string = ('Once', 'Doce', 'Trece', 'Catorce', 'Quince',
                               'Dieciseis', 'Diecisiete', 'Dieciocho', 'Diecinueve');
  Decenas: array[1..9] of string = ('Diez', 'Veinte', 'Treinta', 'Cuarenta',
                                   'Cincuenta', 'Sesenta', 'Setenta',
                                   'Ochenta', 'Noventa');
  Centenas: array[1..9] of string = ('Ciento', 'Doscientos', 'Trescientos',
                                    'Cuatrocientos', 'Quinientos', 'Seiscientos',
                                    'Setecientos', 'Ochocientos', 'Novecientos');
  Millones: array[1..9] of string = ('Un ','Dos ', 'Tres ', 'Cuatro ', 'Cinco ',
                                    'Seis ', 'Siete ', 'Ocho ', 'Nueve ');
function ifs(Expresado: Boolean; CasoVerdadero, CasoFalso: String): String;
  begin
    if Expresado then
      Result:=CasoVerdadero
    else
      Result:=CasoFalso;
  end;
 function MiniExtenso (tres: string): string;
  var
    Unidad, Decena, Centena, Millones: string;
  begin
    Unidad:='';
    Decena:='';
    Centena:='';
    Millones:='';
   if (tres[2]='1') and (tres[3]<>'0') then
    begin
      Unidad:=Diez[strtoint(tres[3])];
      Decena:='';
    end
    else
    begin
      if tres[2]<>'0' then Decena:=Decenas[strtoint(tres[2])];
      if tres[3]<>'0' then Unidad:=Unidades[strtoint(tres[3])];
//      if tres[4]<>'0' then Unidad:=Unidades[strtoint(tres[4])];
    end;
    if (tres[1]='1') and (Unidad='') and (Decena='') and (Millones='') then
      Centena:='Cien'
    else
      if tres[1]<>'0' then
        Centena:=Centenas[strtoint(tres[1])]
      else
        Centena:='';
        Result:=
//         Millones + ifs((Millones<>'') and ((Centena<>'') or (Decena<>'')), ' ', '')
         Centena + ifs((Centena<>'')  and ((Decena<>'')  or (Unidad<>'')), ' ', '')
         + Decena + ifs((Decena<>'')   and (Unidad<>''),' y ', '') + Unidad;
    end;
begin
  if (valor>9999999.99) or (valor<0) then
   begin
    msg:='El Valor esta fuera del rango permitido';
    msg:=msg+'El numero debe ser menor que: 9.999.999.99';
    showmessage(msg);
    Result:='';
    exit;
   end;
 if valor=0 then
  begin
    Result:='';
    Exit;
  end;
   Texto:=formatfloat('0000000.00',valor);
   Millon:=MiniExtenso(copy(Texto, 1,3));
   Millar:=MiniExtenso(Copy(Texto,2,3));
   Centena:=MiniExtenso(Copy(Texto,5,3));
   Centavos:=MiniExtenso('0'+Copy(Texto,9,2));
   Result:=Millar;
 if Millon<>'' then
   if copy(texto,1,3)='1' then
     Result:=Result+' Un Millon'
   else
     Result:=Result+' Millones ';
 if Millar<>'' then
   if copy(texto,4,3)='000' then
     Result:=Result+' Mil pesos'
   else
     Result:=Result+' Mil ';
 if (Millar+Centena <>'') then
     Result:=Result+Centena;
 if (Millar='') and (copy(texto,4,3)='001') then
     Result:=Result+' Peso'
   else
    if (copy(texto,4,3)<>'000') then
      Result:=Result+' Pesos ';
 
{ if Centavos='' then
    begin
      Result:=Result+'.';
      Exit;
    end
    else
    begin
      if Millar+Centena='' then
        Result:=Centavos
      else
        Result:=Result+' con '+Centavos;
    if (copy(texto,8,2)='01') and (Centavos<>'') then
      Result:=Result+' Centavos.'
    else
    Result:=Result+' Centavos.';
  end;}
end;
end.

maeyanes 21-05-2008 18:01:57

Hola...

Te recomiendo que cheques los enlaces que se muestran en la parte inferior de este hilo, ahí donde dice: Temas Similares.

También si haces una búsqueda por ATexto podrás encontrar información que te sirva...


Saludos...

enecumene 21-05-2008 18:05:50

Hola, el componente ATexto se encuentra en el FTP del club,

http://www.terawiki.clubdelphi.com/a...tes/ATexto.zip

Y Concordando con maeyanes, con una pequeña busqueda por el foro lo hubieses encontrado.

Saludos. ;)

odrack 21-05-2008 18:08:55

Gracias por responder, anteriormente lo habia buscado en el foro y encontre varios temas similares interesantes, descargue Atexto pero no he logrado instalarlo, me podrian explicar de forma rapida como cargar el archivo??

Saludos

enecumene 21-05-2008 18:17:44

Pues es tan facil instalar como cualquier otro componente común, a traves de la solapa components/install component, luego buscas el .PAS y lo instalas.

Saludos.

ContraVeneno 21-05-2008 18:32:04

http://www.clubdelphi.com/trucos/ind...ll=0&scrollb=0

http://www.clubdelphi.com/foros/show...5&postcount=15

odrack 21-05-2008 18:50:42

No he logrado instalar Atexto ya que no tengo la opcion de components/install component, estoy trabajando actualmente con la version Code Gear win32, he intentado instalar con import component pero solo me permite agregar 3 tipos, a) Type Library. b) ActiveX Control y c) .NET Assembly, y ninguna de estas opciones puedo instalar .PAS.

Tengo que instalar desde otra ruta acaso??

Saludos, gracias.

enecumene 21-05-2008 18:54:41

A ver, Pues, como no habias mencionado que version delphi estas utilizando, ahora es momento de mencionarlo. Pues la ruta que te mostre se aplica a Delphi 7.

Saludos.

odrack 21-05-2008 18:59:23

La version que utilizo es CodeGear Delphi 2007 for Win32 R2 Version 11.0.2902.1047

En esta versión se puede instalar el componente??

enecumene 21-05-2008 19:06:23

Cita:

Empezado por odrack (Mensaje 288363)
La version que utilizo es CodeGear Delphi 2007 for Win32 R2 Version 11.0.2902.1047

En esta versión se puede instalar el componente??

Realmente no sabria decirte ya que nunca he usado Delphi 2007, y yo creo que si se puede, a ver si algún compañero que use esa version te ayude.

Saludos. ;)

odrack 21-05-2008 19:09:36

Ok, he encontrado esta nota en el foro y voy a probarlo. De todas formas gracias.

Cita:

Esta explicación es válida para Delphi 7 o inferior, para Delphi 8 o superior el procedimiento es distinto, ya que los desarrolladores de Borland/CodeGear removieron este menú desde esta versión, por lo que el procedimiento para agregar componentes sueltos deberás hacerlo desde File, Open y abrir el paquete predeterminado de paquetes del usuario en Delphi desde la carpeta de instalación y agregarlos o crear un nuevo paquete (package).


enecumene 21-05-2008 19:17:44

Pues manos a la carga!!, aqui te espero para cualquier duda. ;)

Saludos.

odrack 21-05-2008 19:25:01

Lo he tratado de instalar de la siguiente forma NEW ITEMS - Package - Abrir atexto.pas. Lo he guardado todo en una carpeta y en el archivo PAckage lo he instalado (boton derecho install), al finalizar el proceso me muestra que s e ha isntalado el package. ¿Ahora como puedo comprobar que ralmente se insatalo? y ¿como puedo ejecutarlo? ya que estoy confundido con esto.

Saludos

enecumene 21-05-2008 19:30:40

Pues, si luego de crear el paquete con el ATexto.pas y ejecutado e instalado, en las solapas de los componentes debe haber uno que diga aloySoft si no es asi debes abrir el paquete creado y darle al boton install.

Saludos.

odrack 21-05-2008 19:36:00

Ya lo he revisado y ya se encuentra instalado. Actualmente utilizo
Código SQL [-]
    edit1.text := atexto.tletras(strtofloat(edit2.text));
para ejecutar el codigo que tengo para cambio de numero y letras, ¿Como lo llamo desde algun boton?

perdona las molestias que te ocasiono.:p

enecumene 21-05-2008 19:38:21

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var Numero: Extended;
begin
Numero := StrToFloat(Edit1.Text);
Letras1.Numero := Trunc(Numero);
Edit2.Text := Format('%s CON %d/100 .-', [Letras1.AsString, Trunc(100*Frac(Numero))]);
end;

Molestias no hay ninguna ;).

Saludos.

odrack 21-05-2008 19:43:04

Muchas gracias funciona perfectamente. solo tengo una duda mas, cuando yo quiera hacer la distrubución de este programa (mi desarrollo) ¿Tengo que agregar algun componente o se compila con el mismo programa para su distribucion?

enecumene 21-05-2008 19:47:55

Cita:

Empezado por odrack (Mensaje 288382)
Muchas gracias funciona perfectamente. solo tengo una duda mas, cuando yo quiera hacer la distrubución de este programa (mi desarrollo) ¿Tengo que agregar algun componente o se compila con el mismo programa para su distribucion?

No, al compilar el programa el componente queda parte de ella, pues, no utiliza archivos externos como Dll, etc, etc.

Saludos.

odrack 21-05-2008 19:49:36

Muchas gracias, de vdd que no se que haria sin todo su apoyo y sin este foro claro esta.

Saludos.

elchino07 02-12-2008 23:26:37

una duda
 
El resultado me sale en letras minusculas, hay alguna manera de que el resultado se muestre en mayusculas o algo que yo haya omitido?


La franja horaria es GMT +2. Ahora son las 13:58:56.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi