Ver Mensaje Individual
  #1  
Antiguo 06-04-2007
Hell_Raiser Hell_Raiser is offline
Miembro
 
Registrado: jun 2004
Posts: 13
Reputación: 0
Hell_Raiser Va por buen camino
texto de edit tipo currency

He buscado en el foro como limitar un edit a cierta cantidad de enteros un punto y cierta cantidad de decimales
por ejemplo "12345.00". Aqui la cantidad de enteros es de 5 caracteres, un solo punto, y dos caracteres para los decimales todo esto sin que el usuario final tenga la posibilidad de equivocarse, o sea que solo puede escribir el punto una sola vez, despues del punto solo puede escribir 2 caracteres y antes del punto solo puede escribir 5 caracteres. Y claro debe estar alineado a la derecha como toda cadena de tipo numerico. El codigo es una recopilacion del foro, no dudaria que ya existiera algun metodo para hacer esto sin batallar tanto.
Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
  i,decimales,enteros: integer;
  numEnteros,numDecimales:integer;
  cantidad:string;
begin
  //Aqui se definen la cantidad de enteros y decimales que se desean
  numEnteros:=5;
  numDecimales:=2;
  ///////////////

  cantidad:=(Sender as TEdit).Text;
  decimales:=-1;
  enteros:=1;

  if (not(key in ['0'..'9', #8, #9,'.'])) then
    key:=#0;

  for i:=1 to Length(cantidad) do
    begin
      enteros:=enteros+1;
      if (cantidad[i] = '.') then
      begin
        if (key = '.') then
          key:=#0;
        decimales:=decimales+1
      end;
      if decimales >= 0 then
        decimales:=decimales+1;
      if (decimales>numDecimales) and (not (key in[#8, #9])) then
        key:=#0;
      if (enteros>numEnteros) then
      begin
        if  (decimales<0) and (i=Length(cantidad)) then
        begin
          if not (key in[#8, #9, '.']) then
            key:=#0
        end;
      end;

    end;
end;
Aqui se valida en el evento onKeyPress de un TEdit, todos los caracteres validos y se especifican las cantidades, si se desea que algun otro edit tenga la misma funcionalidad solo es necesario agregarle al evento onKeyPress en el Object Inspector el evento onKeyPress del TEdit que tiene el codigo antes mencionado, para eso es la linea
Código Delphi [-]
cantidad:=(Sender as TEdit).Text;

Para mi caso en particular todos los edits de mi forma deben ser de este tipo por lo que todos deben tener el texto alineado a la derecha.
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
var obj:Tedit;
begin
  SysLocale.MiddleEast := true;
  for i:=1 to self.ComponentCount do
  begin
    if self.Components[i-1].ClassType = TEdit then
      obj:=self.Components[i-1] as TEdit;
      obj.BiDiMode := bdRightToLeft
  end;
end;

Pero para el caso en que no sea asi agrego el siguiente codigo solo es necesario nombrar al componente TEdit las primeras cuatro letras edit pero creo que es mejor modificarlo a sus necesidades.
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
var obj:Tedit;
begin
  SysLocale.MiddleEast := true;
  for i:=1 to self.ComponentCount do
  begin
    if (AnsiLeftStr(self.Components[i-1].Name,4)='Edit') then
      obj:=self.Components[i-1] as TEdit;
      obj.BiDiMode := bdRightToLeft
  end;
end;

Espero que esto les sea de utilidad y si conocen alguna manera mas sencilla o mas facil de hacerlo espero que me lo digan para saber como es que perdi mi tiempo.
Responder Con Cita