Ver Mensaje Individual
  #7  
Antiguo 25-05-2012
Avatar de champy
champy champy is offline
Miembro
 
Registrado: sep 2003
Ubicación: Alicante, España
Posts: 75
Reputación: 21
champy Va por buen camino
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;
Responder Con Cita