Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-06-2008
luigi_cr luigi_cr is offline
Miembro
 
Registrado: jul 2007
Ubicación: Costa Rica
Posts: 39
Poder: 0
luigi_cr Va por buen camino
Post MaskEdit numérico y con puntos

Pues este es mi problema nesecito un el MaskEdit ponerle una mascara que acepte solo número y punto para los decimales es decir que puede ingresar cantidades como: 123.5, 125, 987.3657, etc.

Gracias y por favor no me digan que use otro control...
Responder Con Cita
  #2  
Antiguo 05-06-2008
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 24
ContraVeneno Va por buen camino
En lugar de usar un MaskEdit para controlar valores numéricos, yo te recomendaría que utilizaras un control específico para eso.

El TjvValidateEdit de las Jedi por ejemplo. Con ese control solo defines el formato (en este caso tipo moneda) y te olvidas de tener que validar si fue punto o coma, si son número o no, etc, incluso hasta prefijos puedes poner (como el símbolo $ por ejemplo).
Con ese control no necesitas codificar nada ni convertir cadenas a números.
__________________


Última edición por ContraVeneno fecha: 05-06-2008 a las 22:20:48.
Responder Con Cita
  #3  
Antiguo 05-06-2008
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
No pongas ninguna máscara y pon esto en el el evento OnKeyPress

Código Delphi [-]
  //controlar entrada solo números
  if ( StrScan('0123456789.'+chr(7)+chr(8), Key) = nil ) then  Key := #0;
  //controlar entrada una sola coma
  for i := 1 to length(EDos.Text) do
    if ( copy(EDos.Text,i,1) = '.' ) and not ( StrScan('.', Key) = nil ) then  Key := #0;
Responder Con Cita
  #4  
Antiguo 05-06-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 24
BlueSteel Va por buen camino
Cool

Cita:
Empezado por fidel Ver Mensaje
No pongas ninguna máscara y pon esto en el el evento OnKeyPress


Código Delphi [-]
//controlar entrada solo números
if ( StrScan('0123456789.'+chr(7)+chr(8), Key) = nil ) then Key := #0;
//controlar entrada una sola coma
for i := 1 to length(EDos.Text) do
if ( copy(EDos.Text,i,1) = '.' ) and not ( StrScan('.', Key) = nil ) then Key := #0;



bueno el codigo.. pero si lo tienes que agregar a varios edits igual es más trabajo... como dicen... para que vas a inventar la rueda y esta ya fue inventda..

creo que el JvValidateEdit que menciona Contraveneno es la mejor opción..

Salu2
__________________
BlueSteel
Responder Con Cita
  #5  
Antiguo 06-06-2008
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Estoy de acuerde en que es una tontería reinventar la rueda, pero la última línea de la consulta pone: Gracias y por favor no me digan que use otro control..., supongo que sus razones tendrá
Responder Con Cita
  #6  
Antiguo 06-06-2008
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 24
ContraVeneno Va por buen camino
a que caray... tienes razón, como que la edad ya me está afectando y no había visto esa línea de "no usar otro control"

__________________

Responder Con Cita
  #7  
Antiguo 10-06-2008
luigi_cr luigi_cr is offline
Miembro
 
Registrado: jul 2007
Ubicación: Costa Rica
Posts: 39
Poder: 0
luigi_cr Va por buen camino
Thumbs up

Código Delphi [-]
procedure txtKeyPress(
  Sender: TObject; var Key: Char);
var s, t: String;
  i: integer;
begin
  if key='.' then
    with TMaskEdit(Sender) do
      begin
        t:= Trim(stripped('.', Text));
        //s:= EditMask;
        //Delete(S, Length(s)-3, 4);
        s:= '9';
        for i := 0 to Length(Trim(stripped(' ', t))) - 2 do
        begin
          s:= s + '9';
          EditMask:= S+'\.9999;1; ';
        end;
        Text:= stripped(' ', t);
        SelStart:= Length(Trim(Text))-4;
      end;

  if key = #8 then
    with TMaskEdit(Sender) do
    begin
      t := Trim (Text);
      EditMask := '9999999999;1; ';
      Text := stripped(' ', t);
      SelStart:= Length(Trim(Text));
    end;

end;

Al final lo deje algo asi.

El stripped es una función que elimina un determinado caracter en una cadena, en este caso el espacio en blanco.

el
Código Delphi [-]
if key = #8 then
es para cuando se presiona backspace.

el codigo de la función stripped es el siguiente:
Código Delphi [-]
function stripped(stripchar: char; str: string): string;
var
  tmpstr : string;
begin
  tmpstr := str;
  while pos(stripchar, tmpstr) > 0 do
    delete(tmpstr, pos(stripchar, tmpstr), 1);
  stripped := tmpstr;
end;

Lo tome de aca: http://www.q3.nu/trucomania/ftesp.html

Gracias por las respuestas.
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
Cargar puntos en una DB juanchi Conexión con bases de datos 8 06-03-2007 18:06:56
Dll y puntos de entrada chete Varios 1 11-01-2006 13:20:28
comas por puntos pruz API de Windows 4 05-07-2005 22:59:24
Puntos Carlex Varios 2 23-09-2004 14:44:09
Codigos de Puntos Roberto Impresión 1 04-06-2003 22:12:54


La franja horaria es GMT +2. Ahora son las 05:18:46.


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