Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   MaskEdit numérico y con puntos (https://www.clubdelphi.com/foros/showthread.php?t=57120)

luigi_cr 05-06-2008 21:33:39

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...:p

ContraVeneno 05-06-2008 22:11:20

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.

fidel 05-06-2008 22:12:46

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;

BlueSteel 05-06-2008 22:22:28

Cita:

Empezado por fidel (Mensaje 291619)
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:p:D

fidel 06-06-2008 21:55:22

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á

ContraVeneno 06-06-2008 22:08:31

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"

:o:o

luigi_cr 10-06-2008 01:08:53

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.


La franja horaria es GMT +2. Ahora son las 06:09:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi