Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Separador de miles en un memo (https://www.clubdelphi.com/foros/showthread.php?t=78914)

rufo 25-05-2012 00:36:41

Separador de miles en un memo
 
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: Taller práctico – EditMask y TFormatSettings. 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í

Ejemplo:
Código Delphi [-]
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.

Código Delphi [-]
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

Código Delphi [-]
// 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.


La franja horaria es GMT +2. Ahora son las 01:21:53.

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