delphi edit только цифры

Программа состоит из двух процедур. Первая, работающая в обработчике события KeyPress компонента Edit, не допускает появления нежелательных символов, то есть любых, не равных цифре или символу-разделителю целой и дробной частей числа. Последний может быть равен точке или запятой, в зависимости от текущих настроек Windows. Поэтому используется встроенная в Delphi константа DecimalSeparator, содержащая нужный символ. Вторая процедура, базирующаяся на обработчике события KeyUp, приводит вводимое число к привычному, общеупотребительному виду. Например, не допускает появления числа, у которого символ-разделитель — первый из символов.

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

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
private
< Private declarations >
public
< Public declarations >
end;

<Процедура, запрещающая появление нежелательных символов в edit.
Если вводимый символ, код которого содержится в переменной Key, не содержится во множествах Digit или Separator, то переменной Key присваивается код «отсутствие символа», равный #0.
Для того чтобы раскладки клавиатуры не влияли на ввод символа-разделителя, производится анализ на символы, находящиеся на тех кнопках, где располагаются точка либо запятая. Нажатие этих кнопок приводит к вводу символа DecimalSeparator. Однако повторный ввод разделителя не допускается.>

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
//Множество цифр, допустимых для ввода в edit:
const Digit: set of Char=[‘1’..’9′, ‘0’];
//Множество символов, воспринимаемых как символ-разделитель:
Separator: set of Char=[‘/’, ‘.’, ‘,’, ‘ю’, ‘Ю’, ‘б’, ‘Б’];
begin
with (Sender as TEdit) do
begin
if (Key in Separator)
then Key:=DecimalSeparator //Delphi-константа типа Char, равная символу-разделителю Windows
else
if (not(Key in Digit))
then Key:=#0;
if ((Key=DecimalSeparator)and(pos(DecimalSeparator, Text)<>0))
then Key:=#0;
end;
end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var n: Integer;
S: String;
begin
with (Sender as TEdit) do
begin
if pos(DecimalSeparator, Text)=1 then
begin
Text:=’0’+Text;
SelStart:=Length(Text);
end;
if (pos(DecimalSeparator, Text)<>Length(Text)) then
if Text[Length(Text)]<>‘0’ then
if FloatToStr(StrToFloat(Text))<>‘0’ then
Text:=FloatToStr(StrToFloat(Text));
if Key=8 then
begin
n:=SelStart;
S:=Text;
Delete(S, n, 1);
Text:=S;
end;
SelStart:=Length(Text);
end;
end;

Сначала положите на Форму компонент Edit. Затем, открыв вкладку Events в Инспекторе Объектов и дважды щёлкнув по обработчикам событий OnKeyPress и OnKeyUp компонента Edit, создайте заготовки обработчиков этих событий. Затем замените обработчики предлагаемыми процедурами — и ваш Edit сможет содержать только числа. Если у вас несколько компонентов, то достаточно создать тоько одну пару предлагаемых процедур, для одного, любого из них. К остальным их нужно подключить, выбрав в Инспекторе Объектов в качестве обработчиков соответствующих событий.

Дополнительно можно обеспечить размещение числа у правого края Edit, как в калькуляторе Windows. Для этого сразу после

добавьте следующий код:

type
TMEdit = class(TEdit)
procedure CreateParams(var Params: TCreateParams); override;
end;

procedure TMEdit.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := Params.Style or ES_RIGHT;
end;

а также в обработчике события OnCreate Формы (если его нет — создайте!) добавьте строку

Естественно, Edit1 замените на имя вашего компонента.

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

В Delphi делается это достаточно просто. Все, что требуется — написать обработчик события OnKeyPress

Этого небольшого кода достаточно чтобы запретить пользователям вводить Edit все кроме цифр и разделителя целой части числа от дробной (в России это «,» в западных странах «.»). Перечень символов разрешенных для ввода символов перечислен тут: [‘0’ .. ‘9’, decimalseparator]. Через запятую вы можете расширить данный список.

Стоит заметить, что это не единственный способ запретить вводить символы в Edit. В последних версиях Emb a rcadero у класса Tedit появилось свойство NumbersOnly, поставив это свойство в true, вы запретите вводить в поле буквы.

Приведу пример, где можно применить полученные знания. Допустим вы пишете приложение, которое производит расчет на основе введеных данных. Пользователь программы вводит начальные значения, на основе которых происходит расчет. В таком случае стоит запретить ввод символов, иначе это может привести к ошибке. Лучше преодостерчься от этого и подстраховаться. Используйте полученные знания везде, где от юзера требуется получить исключительно цифры. Это поможет предотвратить нелепые ошибки.

Используйте любой, понравившийся Вам метод. Надеюсь, что я смог помочь. Спасибо за внимание.

Очень часто возникает необходимость ограничить ввод в поле TEdit, разрешив, например, только цифры. Сделать это можно с помощью несложного обработчика, назначаемого на событие OnKeyPress нужного компонента TEdit:

По аналогии можно осуществить другие виды фильтрации. Например, запретить ввод русских букв, или добавив в список разрешённых не только цифры, но и математические символы. Главное здесь — понять принцип: нужные клавиши пропускаются, лишние — «обнуляются». Также можно «на лету» заменять некоторые символы (в приведённом примере осуществляется замена десятичного разделителя, что может быть удобно при работе с SQL-базами данных, поскольку отпадает необходимость в дополнительное проверке содержимого поля.

Альтернативное решение данной задачи предложил наш читатель dunin:

Оцените статью