decimalseparator delphi



Delphi keypress

Автор Џн Хелли задал вопрос в разделе Другие языки и технологии

Delphi как сделать ввод только чисел с точкой ? и получил лучший ответ

Ответ от Андрей орлов[гуру]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not(key in ['0'..'9',#8,'.']) then key:=#0;
end;
андрей орлов
(2857)
таково мое понимание задачи. у вас есть какой-то свой вариант?

Ответ от 3 аниме[новичек]
Программа на Delphi, запрещающая ввод нечисловых символов
Программа состоит из двух процедур. Первая, работающая в обработчике события KeyPress компонента Edit, не допускает появления нежелательных символов, то есть любых, не равных цифре или символу-разделителю целой и дробной частей числа. Последний может быть равен точке или запятой, в зависимости от текущих настроек Windows. Поэтому используется встроенная в Delphi константа DecimalSeparator, содержащая нужный символ. Вторая процедура, базирующаяся на обработчике события KeyUp, приводит вводимое число к привычному, общеупотребительному виду. Например, не допускает появления числа, у которого символ-разделитель - первый из символов.
unit Unit1;
interface
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;
var
Form1: TForm1;
implementation
{$R *.dfm}
{Процедура, запрещающая появление нежелательных символов в 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;
end.
Сначала положите на Форму компонент Edit. Затем, открыв вкладку Events в Инспекторе Объектов и дважды щёлкнув по обработчикам событий OnKeyPress и OnKeyUp компонента Edit, создайте заготовки обработчиков этих событий. Затем замените обработчики предлагаемыми процедурами - и ваш Edit сможет содержать только числа. Если у вас несколько компонентов, то достаточно создать тоько одну пару предлагаемых процедур, для одного, любого из них. К остальным их нужно подключить, выбрав в Инспекторе Объектов в качестве обработчиков соответствующих событий.

Ответ от Ёергей Гудыменко[активный]
А как на счет отрицательных чисел?

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Delphi как сделать ввод только чисел с точкой ?
спросили в Inheritance VRR
помогите с созданием калькулятора в delphi...
Можешь просто:
/ процедура обработки события KeyPress
procedure Edit1.KeyPress(var
подробнее...

Проверка Edit в Delphi
Доброго времени суток.

Трудно не зная тонкостей задачи дать вменяемый ответ. Попробую в
подробнее...

Мне нравиться актёр Дольф Лунгренд. Что о нём известно?
Вот некоторые интересные факты)

Настоящее имя Дольфа Лундгрена — Ханс.
До того как
подробнее...
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*