Внешний вид сайта:

Создание TEdit с вводом только цифр

Допустим, Вам нужен компонент поле ввода, который будет принимать только цифровые значения. Можно, конечно, запрограммировать каждый компонент в программе, но можно и просто создать новый компонент, который будет выполнять эти функции.

Вот пример, когда нужно вводить только цифры в TEdit:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin 
if not (key in [#8,'0'..'9']) then 
 key:=#0; 
end;

А вот довольно простой компонент, который будет выполнять это для Вас:

unit GSSimp;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TGSErrorType = (etChange, etPress);

type
  TErrorEvent = procedure(Sender: TObject; ErrType: TGSErrorType)
    of object;

type
  TGsSimpleNumEdit = class(TEdit)
  private
    FOnError: TErrorEvent;
  protected
    procedure Change; override;
    procedure KeyPress(var Key: Char); override;
  published
    property OnError: TErrorEvent read FOnError write FOnError;
  end;

procedure Register;

implementation

procedure TGsSimpleNumEdit.Change;
var
  tmpI: integer;
begin
  try
    tmpI := StrToInt(Text);
    inherited Change;
  except
    if Assigned(FOnError) then
      FOnError(self, etChange);
  end;
end;

procedure TGsSimpleNumEdit.KeyPress(var Key: Char);
var
  tText: string;
begin
  if SelLength <> Length(Text) then
    tText := Text
  else
    tText := EmptyStr;
  if Key in ['0'..'9', #8, #127] then
    inherited KeyPress(Key)
  else
  begin
    Key := #0;
    if Assigned(FOnError) then
      FOnError(self, etPress);
  end;
end;

procedure Register;
begin
  RegisterComponents('Sample', [TGsSimpleNumEdit]);
end;

end.

Как видите все работает. Но на самом деле это очень плохой и неправильный пример.
Зачем изобретать кривой велосипед, когда есть много стандартных рабочих решений! Вот одно из них:
в событии создания формы пишем код:

var
style: cardinal;
...
begin
...
style := GetWindowLong({ нужный_TEdit}.H andle, GWL_STYLE);
SetWindowLong({ нужный_TEdit}.H andle, GWL_STYLE, style + ES_NUMBER);
...

end;

На том все!

Комментарии

Нет комментариев. Ваш будет первым!