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