Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-12-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.339
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Has probado el componente que hay en la sección componentes del Club?

En la carpeta de Conversion.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por ecfisa fecha: 29-03-2013 a las 14:14:49. Razón: actualizar dirección del enlace
Responder Con Cita
  #2  
Antiguo 05-12-2004
lionsoft lionsoft is offline
Miembro
 
Registrado: sep 2004
Posts: 22
Poder: 0
lionsoft Va por buen camino
Necesito usar el componente ATexto en un reporte QuickReport, o sea, dp de poner $ 200, necesito que lo diga en palabras. Como lo uso sobre reportes?
Ahh.. ademas necesito pasar la fecha (por eje: 04/12/2004) a letras... como hago?
Muchas gracias
Lion
Responder Con Cita
  #3  
Antiguo 13-12-2004
jmedina jmedina is offline
Miembro
 
Registrado: jun 2004
Posts: 92
Poder: 21
jmedina Va por buen camino
numero a letras

He visto el Atexto que esta en el Foro pero la verdad no entiendo como llamarlo como, usarlo.

Alguien me puede explicar,

Saludos

Jmedina
Responder Con Cita
  #4  
Antiguo 13-12-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por jmedina
Alguien me puede explicar,
En la propiedad Numero pones la cantidad que desees, por ejemplo:

Letras1.Numero := 1425.3;

Para obtener el número escrito en letras usas la propiedad AsString:

Edit1.Text := Letras1.AsString;

Con lo que obtendrás:

"mil cuatrocientos veinticinco con treinta"

Las propiedades Moneda y Centavos te sirven para indicar cómo quieres nombrar las unidades y los decimales. Por ejemplo, si pones

Letras1.Monedas := 'euros';
Letras1.Monedas.Centavos := 'centavos';

la propiedad AsString te dará:

"mil cuatrocientos veinticinco euros con treinta centavos"

La propiedad Masculino es para indicar su quieres que el texto esté en género masculino o femenino. Así, si pones

Letras1.Moneda := 'mujeres';
Letras1.Centavos := 'niñas';
Letras1.Numero := 3.04;
Letras1.Masculino := false;

La propiedad AsString te dará:

"tres mujeres con cuatro niñas"

Finalmente, la propiedad Separador me parece que es para indicar el separador decimal (punto, coma o el que uses).

// Saludos
Responder Con Cita
  #5  
Antiguo 14-12-2004
llonigualker llonigualker is offline
Miembro
 
Registrado: jul 2003
Posts: 67
Poder: 21
llonigualker Va por buen camino
Mira, aqui tienes una funcion parecida y ademas te da la posibilidad de traducir los numeros al catalan.

(**************************************)
(* Conversión Número -> Letra *)
(* *)
(* Parámetros: *)
(* *)
(* mNum: Número a convertir *)
(* iIdioma: Idioma de conversión *)
(* 1 -> Castellano *)
(* 2 -> Catalán *)
(* iModo: Modo de conversión *)
(* 1 -> Masculino *)
(* 2 -> Femenino *)
(* *)
(* Restricciones: *)
(* *)
(* - Redondeo a dos decimales *)
(* - Rango: 0,00 a 999.999.999.999,99 *)
(* *)
(**************************************)

function NumLetra(const mNum: Currency; const iIdioma, iModo: Smallint): String;
const
iTopFil: Smallint = 6;
iTopCol: Smallint = 10;
aCastellano: array[0..5, 0..9] of PChar =
( ('UNA ','DOS ','TRES ','CUATRO ','CINCO ',
'SEIS ','SIETE ','OCHO ','NUEVE ','UN '),
('ONCE ','DOCE ','TRECE ','CATORCE ','QUINCE ',
'DIECISEIS ','DIECISIETE ','DIECIOCHO ','DIECINUEVE ',''),
('DIEZ ','VEINTE ','TREINTA ','CUARENTA ','CINCUENTA ',
'SESENTA ','SETENTA ','OCHENTA ','NOVENTA ','VEINTI'),
('CIEN ','DOSCIENTAS ','TRESCIENTAS ','CUATROCIENTAS ','QUINIENTAS ',
'SEISCIENTAS ','SETECIENTAS ','OCHOCIENTAS ','NOVECIENTAS ','CIENTO '),
('CIEN ','DOSCIENTOS ','TRESCIENTOS ','CUATROCIENTOS ','QUINIENTOS ',
'SEISCIENTOS ','SETECIENTOS ','OCHOCIENTOS ','NOVECIENTOS ','CIENTO '),
('MIL ','MILLON ','MILLONES ','CERO ','Y ',
'UNO ','DOS ','CON ','','') );
aCatalan: array[0..5, 0..9] of PChar =
( ( 'UNA ','DUES ','TRES ','QUATRE ','CINC ',
'SIS ','SET ','VUIT ','NOU ','UN '),
( 'ONZE ','DOTZE ','TRETZE ','CATORZE ','QUINZE ',
'SETZE ','DISSET ','DIVUIT ','DINOU ',''),
( 'DEU ','VINT ','TRENTA ','QUARANTA ','CINQUANTA ',
'SEIXANTA ','SETANTA ','VUITANTA ','NORANTA ','VINT-I-'),
( 'CENT ','DOS-CENTES ','TRES-CENTES ','QUATRE-CENTES ','CINC-CENTES ',
'SIS-CENTES ','SET-CENTES ','VUIT-CENTES ','NOU-CENTES ','CENT '),
( 'CENT ','DOS-CENTS ','TRES-CENTS ','QUATRE-CENTS ','CINC-CENTS ',
'SIS-CENTS ','SET-CENTS ','VUIT-CENTS ','NOU-CENTS ','CENT '),
( 'MIL ','MILIO ','MILIONS ','ZERO ','-',
'UN ','DOS ','AMB ','','') );
var
aTexto: array[0..5, 0..9] of PChar;
cTexto, cNumero: String;
iCentimos, iPos: Smallint;
bHayCentimos, bHaySigni: Boolean;

(*************************************)
(* Cargar Textos según Idioma / Modo *)
(*************************************)

procedure NumLetra_CarTxt;
var
i, j: Smallint;
begin
(* Asignación según Idioma *)

for i := 0 to iTopFil - 1 do
for j := 0 to iTopCol - 1 do
case iIdioma of
1: aTexto[i, j] := aCastellano[i, j];
2: aTexto[i, j] := aCatalan[i, j];
else
aTexto[i, j] := aCastellano[i, j];
end;

(* Asignación si Modo Masculino *)

if (iModo = 1) then
begin
for j := 0 to 1 do
aTexto[0, j] := aTexto[5, j + 5];

for j := 0 to 9 do
aTexto[3, j] := aTexto[4, j];
end;
end;

(****************************)
(* Traducir Dígito -Unidad- *)
(****************************)

procedure NumLetra_Unidad;
begin
if not( (cNumero[iPos] = '0') or (cNumero[iPos - 1] = '1')
or ((Copy(cNumero, iPos - 2, 3) = '001') and ((iPos = 3) or (iPos = 9))) ) then
if (cNumero[iPos] = '1') and (iPos <= 6) then
cTexto := cTexto + aTexto[0, 9]
else
cTexto := cTexto + aTexto[0, StrToInt(cNumero[iPos]) - 1];

if ((iPos = 3) or (iPos = 9)) and (Copy(cNumero, iPos - 2, 3) <> '000') then
cTexto := cTexto + aTexto[5, 0];

if (iPos = 6) then
if (Copy(cNumero, 1, 6) = '000001') then
cTexto := cTexto + aTexto[5, 1]
else
cTexto := cTexto + aTexto[5, 2];
end;

(****************************)
(* Traducir Dígito -Decena- *)
(****************************)

procedure NumLetra_Decena;
begin
if (cNumero[iPos] = '0') then
Exit
else if (cNumero[iPos + 1] = '0') then
cTexto := cTexto + aTexto[2, StrToInt(cNumero[iPos]) - 1]
else if (cNumero[iPos] = '1') then
cTexto := cTexto + aTexto[1, StrToInt(cNumero[iPos + 1]) - 1]
else if (cNumero[iPos] = '2') then
cTexto := cTexto + aTexto[2, 9]
else
cTexto := cTexto + aTexto[2, StrToInt(cNumero[iPos]) - 1]
+ aTexto[5, 4];
end;

(*****************************)
(* Traducir Dígito -Centena- *)
(*****************************)

procedure NumLetra_Centena;
var
iPos2: Smallint;
begin
if (cNumero[iPos] = '0') then
Exit;

iPos2 := 4 - Ord(iPos > 6);

if (cNumero[iPos] = '1') and (Copy(cNumero, iPos + 1, 2) <> '00') then
cTexto := cTexto + aTexto[iPos2, 9]
else
cTexto := cTexto + aTexto[iPos2, StrToInt(cNumero[iPos]) - 1];
end;

(**************************************)
(* Eliminar Blancos previos a guiones *)
(**************************************)

procedure NumLetra_BorBla;
var
i: Smallint;
begin
i := Pos(' -', cTexto);

while (i > 0) do
begin
Delete(cTexto, i, 1);
i := Pos(' -', cTexto);
end;
end;

begin
(* Control de Argumentos *)

if (mNum < 0.00) or (mNum > 999999999999.99) or (iIdioma < 1) or (iIdioma > 2)
or (iModo < 1) or (iModo > 2) then
begin
Result := 'ERROR EN ARGUMENTOS';
Abort;
end;

(* Cargar Textos según Idioma / Modo *)

NumLetra_CarTxt;

(* Bucle Exterior -Tratamiento Céntimos- *)
(* NOTA: Se redondea a dos dígitos decimales *)

cNumero := Trim(Format('%12.0f', [Int(mNum)]));
cNumero := StringOfChar('0', 12 - Length(cNumero)) + cNumero;
iCentimos := Trunc((Frac(mNum) * 100) + 0.5);

repeat
(* Detectar existencia de Céntimos *)

if (iCentimos <> 0) then
bHayCentimos := True
else
bHayCentimos := False;

(* Bucle Interior -Traducción- *)

bHaySigni := False;

for iPos := 1 to 12 do
begin
(* Control existencia Dígito significativo *)

if not(bHaySigni) and (cNumero[iPos] = '0') then
Continue
else
bHaySigni := True;

(* Detectar Tipo de Dígito *)

case ((iPos - 1) mod 3) of
0: NumLetra_Centena;
1: NumLetra_Decena;
2: NumLetra_Unidad;
end;
end;

(* Detectar caso 0 *)

if (cTexto = '') then
cTexto := aTexto[5, 3];

(* Traducir Céntimos -si procede- *)

if (iCentimos <> 0) then
begin
cTexto := cTexto + aTexto[5, 7];
cNumero := Trim(Format('%.12d', [iCentimos]));
iCentimos := 0;
end;
until not (bHayCentimos);

(* Eliminar Blancos innecesarios -sólo Catalán- *)

if (iIdioma = 2) then
NumLetra_BorBla;

(* Retornar Resultado *)

Result := Trim(cTexto);
end;

Saludos.
__________________
El que pregunta es tonto durante 5 minutos, el que no pregunta es tonto para toda su vida.
Responder Con Cita
  #6  
Antiguo 14-12-2004
jmedina jmedina is offline
Miembro
 
Registrado: jun 2004
Posts: 92
Poder: 21
jmedina Va por buen camino
Cita:
Empezado por roman
En la propiedad Numero pones la cantidad que desees, por ejemplo:

Letras1.Numero := 1425.3;

Para obtener el número escrito en letras usas la propiedad AsString:

Edit1.Text := Letras1.AsString;

Con lo que obtendrás:

"mil cuatrocientos veinticinco con treinta"

Las propiedades Moneda y Centavos te sirven para indicar cómo quieres nombrar las unidades y los decimales. Por ejemplo, si pones

Letras1.Monedas := 'euros';
Letras1.Monedas.Centavos := 'centavos';

la propiedad AsString te dará:

"mil cuatrocientos veinticinco euros con treinta centavos"

La propiedad Masculino es para indicar su quieres que el texto esté en género masculino o femenino. Así, si pones

Letras1.Moneda := 'mujeres';
Letras1.Centavos := 'niñas';
Letras1.Numero := 3.04;
Letras1.Masculino := false;

La propiedad AsString te dará:

"tres mujeres con cuatro niñas"

Finalmente, la propiedad Separador me parece que es para indicar el separador decimal (punto, coma o el que uses).

// Saludos
Ok en este caso si le entiendo, pero por ejemplo esto lo puedo aplicar en el evento onclick de algun boton que yo inerte, o algo parecido, es decir no se si me puedan decir como es que ejecuto este codigo, por ejemplo se me ocurre que cuando salga de una caja de texto, en la cual contiene la cantidad a convertir ahi puedo hacer la conversion, o bien como la realizaria

Saludos
Y disculpen la lata es que soy un poco novato en esto
Jmedina
Responder Con Cita
  #7  
Antiguo 15-12-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Si no sabes cuando lo necesitas, entonces es que NO lo necesitas

que tal en el evento OnExit de la cajita que tiene el número?
que tal en el OnKey Pressed ?

Saludos
Responder Con Cita
  #8  
Antiguo 17-12-2004
lionsoft lionsoft is offline
Miembro
 
Registrado: sep 2004
Posts: 22
Poder: 0
lionsoft Va por buen camino
In en el form de impresion (QReport)... como lo uso??
Saludos!
Lion
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:30:05.


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
Copyright 1996-2007 Club Delphi