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 02-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Talking Dos decimales en un Edit

Saludos.

Creo sinceramente que pregunto demasiado, pero no tengo más remedio.
O no me entero de cómo se busca en los foros mensajes ya escritos, o sencillamente no están las consultas que yo hago, bueno creo que soy yo el que busca mal, en fin si alguien considera que soy un poco pesado ruego me lo haga saber y pediré mil disculpas.

Gracias.

Mi problema es el siguiente:

Necesito introducir en un Edit solo números una coma y solo dos decimales no mas.

Ejemplo 12345,00

El código para introducir números y cambiar el punto por la coma lo he encontrado y funciona perfecto, es este.

Código Delphi [-]
procedure TF_Cuentas.Edit1KeyPress(Sender: TObject; var Key: Char);
 Var i: Integer;
begin
   i:=0;

  if ( StrScan('0123456789.'+chr(7)+chr(8), Key) = nil ) then  Key := #0;
 // cambia el punto decimal por coma
  if key = '.' then key := ',';
  //controlar entrada una sola coma
  for i := 1 to length(Edit1.Text) do
    if ( copy(Edit1.Text,i,1) = ',' ) and not ( StrScan(',', Key) = nil ) then  Key := #0;

end;

Solo falta que después de la coma solo se introduzca dos decimales.

¿Es esto que pido posible?

Gracias.

Última edición por dec fecha: 02-02-2008 a las 03:08:08.
Responder Con Cita
  #2  
Antiguo 02-02-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A lo mejor te interesaría utilizar el componente "TMaskEdit", que parece más indicado que el "TEdit" para lo que necesitas.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 02-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Hola Dec.

Seguramente tienes razón, pero lo he utilizado en algunas ocasiones y me da muchos problemas, es un componente que no entiendo muy bien, quizas sea por eso.

Gracias pero prefiero no utilizarlo, no me ha ido muy bien con el.

Gracias de todas formas.
Responder Con Cita
  #4  
Antiguo 02-02-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var pos: Cardinal;
begin
 with Sender as TEdit do
  begin
   pos := System.Pos(',', Text);
   if not LongBool(Pos) then Dec(Pos);
   ReadOnly := not (Key in ['0'..'9', ',', #8]) or
               (Pos <> $FFFFFFFF) and (Key = ',') or
               ((Key <> #8) and (Pos < (SelStart - 1)));
  end;
end;
Responder Con Cita
  #5  
Antiguo 02-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Talking

Muchas Gracias chackAll.

Un codigo perfecto.

Funciona a las mil maravillas.

Gracias.
Responder Con Cita
  #6  
Antiguo 02-02-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por cHackAll Ver Mensaje
Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var pos: Cardinal;
begin
 with Sender as TEdit do
  begin
   pos := System.Pos(',', Text);
   if not LongBool(Pos) then Dec(Pos);
   ReadOnly := not (Key in ['0'..'9', ',', #8]) or
               (Pos <> $FFFFFFFF) and (Key = ',') or
               ((Key <> #8) and (Pos < (SelStart - 1)));
  end;
end;
Epale amigo cHackAll, probé el código y funciona muy bien, pero le he dado mas de dos repasadas y NPI que estas haciendo, , bueno algún día lo entenderé....

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #7  
Antiguo 03-02-2008
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Muchisimas gracias por vuestro código, dime como puedo modificarlo para además solo permita valores negativos es decir solo un singno '-'

Yo usaba este código:
Código Delphi [-]
If key in ['-',','] then
     case key of
          '-': if (length((sender as TEdit).Text)>0) then
               if ((pos('-',(sender as TEdit).Text)<>0) or
                  ((sender as TEdit).SelStart >0))
               and
                  ((sender as TEdit).SelLength <> length((sender as TEdit).Text))
               then key:=#0;
          ',': if ((pos(',',(sender as TEdit).Text)<>0) and
                  (pos(',',(sender as TEdit).SelText)<>0))
               xor
                  (pos(',',(sender as TEdit).Text)<>0) or
                  ((length((sender as TEdit).Text)>0) and
                  ((sender as TEdit).Text[length((sender as TEdit).Text)] = '-')) or
                  ((sender as TEdit).SelLength = length((sender as TEdit).Text)) or
                  ((sender as TEdit).SelStart = 0)
               then key:=#0;
     end
     else if not (key in ['0'..'9',#8]) then key:=#0;
Responder Con Cita
  #8  
Antiguo 03-02-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Cita:
Empezado por cHackAll Ver Mensaje
Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var pos: Cardinal;
begin
 with Sender as TEdit do
  begin
   pos := System.Pos(',', Text);
   if not LongBool(Pos) then Dec(Pos);
   ReadOnly := not (Key in ['0'..'9', ',', #8]) or
               (Pos <> $FFFFFFFF) and (Key = ',') or
               ((Key <> #8) and (Pos < (SelStart - 1)));
  end;
end;
Curioso código. Creo que podríamos agregar esta condición:

Código Delphi [-]
((Key = ',') and (Length(Text) - SelStart > 2)

Para evitar que alguien escriba 1234, mueva el cursor tres lugares hacia atrás y escriba una coma.

Bye
Responder Con Cita
  #9  
Antiguo 03-02-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Hay muchos componentes numéricos, creo debería usarse alguno, de la JVCL, RxLib, torry.net, etc.

Si usas el botón derecho y pegar, verás que no se produce el evento OnkeyPress/down, así que tendrás que validar ese texto de nuevo, o añadir un popup al edit sin elementos (para eliminar el popup de windows).

De todas formas, siempre tendrás que convertir ese texto a número; usando un componente especializado, tendrás:
edit1.AsFloat;
edit1.AsInteger;
etc.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Unir Edit con Edit Caral Varios 8 17-11-2006 21:37:35
Decimales Luis Alberto Varios 1 19-05-2006 16:40:25
problemas con el el .Edit: qryCONSULTA.Edit McRose Conexión con bases de datos 3 07-06-2005 15:46:39
Ingresar sólo decimales en un Edit noeres Varios 10 06-12-2004 00:32:11
Decimales alexisns Conexión con bases de datos 2 22-06-2003 21:45:40


La franja horaria es GMT +2. Ahora son las 20:22:08.


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