PDA

Ver la Versión Completa : Separador de miles en un memo


rufo
25-05-2012, 00:36:41
Hola amigos buenas tardes, necesito su ayuda, lo que pasa es que tengo una factura en la opcion de escribir la cantidad en un memo la escribe sin formato numerico es decir que si yo escribio 1525.15 asi la deja al momento de imprimir y lo que yo quiero saber como hacer que cuando se escriba la cantidad en el memo me vaya haciendo la separacion de miles es decir 1,525.15.

Espero su ayuda y de antemano gracias.Uso Delphi 2007

champy
25-05-2012, 01:22:48
No me queda muy claro lo que necesitas.:confused:

¿La factura la generas en el Tmemo por código tomando los valores de otro lugar y ese código no te está formateando el importe como quieres?

¿o estás escribiendo en el Tmemo directamente como quien escribe en un bloc de notas y pretendes que mientras escribes el número, este se formatee solo?

dec
25-05-2012, 01:24:24
Hola,

Me permito recomendar el siguiente artículo de Salvador Jover (http://www.sjover.com): Taller práctico – EditMask y TFormatSettings (http://www.sjover.com/delphi/?p=2825). Creo que puede ser de utilidad.

rufo
25-05-2012, 01:25:39
Asi es mi amigo champy quiero que este se formatee solo al escribir directamente en el memo.

ecfisa
25-05-2012, 01:31:54
Hola rufo.

Se le puede dar una solución similar a lo que tratamos aquí (http://www.clubdelphi.com/foros/showthread.php?t=78725)

Ejemplo:

var
S: TSmallPoint;
begin
// Salvar separadores actuales
S.x:= Ord(ThousandSeparator);
S.y:= Ord(DecimalSeparator);

// Configurar separadores
ThousandSeparator:= ',';
DecimalSeparator:= '.';

// Poner unos números en el memo
Memo1.Lines.Add(FormatFloat('#,##0.00',1525.15));
Memo1.Lines.Add(FormatFloat('#,##0.00',25312.33));
...

// Restaurar separadores
ThousandSeparator:= Chr(S.x);
DecimalSeparator:= Chr(S.y);
end;


Saludos.

champy
25-05-2012, 01:56:14
¿Las máscaras no se pueden usar en mitad un TMemo verdad?

Planteas un reto interesante :rolleyes: se me ocurre alguna forma un tanto liosa pero antes de liarme a escribir funciones que compruben y formateen el texto mientras escribes, esperemos a ver si alguno de los maestros del foro tiene alguna solución maravillosa y que no requiera mucho código. :D

champy
25-05-2012, 10:12:54
Esto debería servirte.
En resumen, el procedimiento mira la última palabra que estás escribiendo en el Memo y si esa palabra puede ser transformada en un Flotante, como los importes por ejemplo, se muestra en un label el Mensaje "Pulsa Intro para: 0.000.000,00", al pulsar Intro se sustituye el valor por el valor formateado con separador de miles.


var
Form1: TForm1;
ULTPALABRA : STRING;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Memo1Change(Sender: TObject);
{Extraemos la última palabra escrita y si puede ser transformada en flotante se dará la posibilidad de formatearlo pulsando Intro}
var
N : INTEGER;
SALIR : BOOLEAN;
NUMERO : DOUBLE;
begin
//Recorremos el texto hacia atras hasta encontrar un Espacio o el principio del String
SALIR:=FALSE;
N := LENGTH(MEMO1.Text);
REPEAT
IF COPY(MEMO1.Text, N, 1) = ' ' THEN SALIR:=TRUE;
N:=N-1;
UNTIL (N<1) OR (SALIR=TRUE);

//Se extrae la última palabra
ULTPALABRA := COPY(MEMO1.TEXT, N+1, LENGTH(MEMO1.TEXT)-N);

//Y si es un posible flotante, se muestra el mensaje de que Al pulsar Intro se la dará formato
IF TRYSTRTOFLOAT(TRIM(ULTPALABRA), NUMERO) THEN
LABEL1.CAPTION := 'Pulse Intro para: '+FORMATFLOAT('##,##0.00', NUMERO)
ELSE
LABEL1.CAPTION := '';
end;

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: char);
{Si el usuario ha pulsado enter, se reemplaza el posible importe por su valor formateado}
begin
IF (KEY = #13) AND (LABEL1.CAPTION <> '') THEN
BEGIN
KEY:=#0;
MEMO1.TEXT := STRINGREPLACE(MEMO1.Text, TRIM(ULTPALABRA), FORMATFLOAT('##,##0.00',STRTOFLOAT(ULTPALABRA)), [RFREPLACEALL]);
MEMO1.SelStart := LENGTH(MEMO1.TEXT);
end;
end;

maeyanes
25-05-2012, 15:44:12
Hola...

Otra función que puedes usar para dar formato al texto: Format


// Formato de valores númericos:
Moneda := Format('%m', [15.0]); // Moneda = $15.00

// Formato de valores decimales:
Decimal := Format('%0.2d', [13]); // Decimal = 13.00


Consulta en la ayuda de Delphi para más opciones de formato.


Saludos...

rufo
25-05-2012, 19:01:51
Gracias por responderme, probare dichos codigos que me muestran y despues dire el resultado.