TEdit limitado para la entrada de números
Artículo por Club Developers · 31 diciembre 2005
4590 vistas
Es suficiente con reemplazar todo carácter por el carácter nulo dentro del evento OnKeyPress del TEdit con excepción, claro está, del separador decimal (DecimalSeparator), la tecla de borrar (VK_BACK), la de suprimir (VK_DELETE) y el signo negativo.
También hay que controlar el pegado desde el portapapeles
Para números enteros:
Para números reales
También hay que controlar el pegado desde el portapapeles
Para números enteros:
delphi
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); var sNumAnterior:string; begin sNumAnterior := (sender as TEdit).Text; if (key <> #3) and (key <> #22) then // #3 = Copiar (Ctrl + C) begin // #22 = Pegar (Ctrl + V) if key = '-' then begin if ((pos(key,(sender as TEdit).Text) > 0) and (pos(key,(sender as TEdit).SelText) = 0)) or ((sender as TEdit).SelStart > 0) then key:=#0; end else if not (key in ['0'..'9',#8]) then key:=#0; end; if key = #22 then try key := #0; (sender as TEdit).PasteFromClipBoard; StrToInt((sender as TEdit).Text); except (sender as TEdit).Text := sNumAnterior; (sender as TEdit).SelStart := Length((sender as TEdit).Text); end; end;
Para números reales
delphi
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); var sNumAnterior:string; begin sNumAnterior := (sender as TEdit).Text; if (key <> #3) and (key <> #22) then // #3 = Copiar (Ctrl + C) begin // #22 = Pegar (Ctrl + V) if key in ['-','.'] then begin if (pos(key,(sender as TEdit).Text) > 0) and (pos(key,(sender as TEdit).SelText) = 0) then key:=#0; case key of '-': if ((sender as TEdit).SelStart > 0) then key:=#0; '.': if ((sender as TEdit).SelStart = 0) or (((sender as TEdit).SelStart = 1) and ((sender as TEdit).Text[1] = '-')) then key:=#0; end; end else if not (key in ['0'..'9',#8]) then key:=#0; end; if key = #22 then try key := #0; (sender as TEdit).PasteFromClipBoard; StrToFloat((sender as TEdit).Text); except (sender as TEdit).Text := sNumAnterior; (sender as TEdit).SelStart := Length((sender as TEdit).Text); end; end;