Информатика первый курс / ДЛЯ САМОСТОЯТЕЛЬНОГО ИЗУЧЕНИЯ / BUILDER / Запрет ввода нежелательных символов
.doc-----------------------------------------------------------------------------
Ограничения на ввод в Edit
-----------------------------------------------------------------------------
// коды запрещенных клавиш заменим нулем, в результате
// символы этих клавиш в поле редактирования не появятся
// (можно использовать и KeyDown)
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
// Key - код нажатой клавиши
// проверим, является ли символ допустимым
if((Key >= '0') && (Key <= '9')) return; // цифра
// Глобальная переменная DecimalSeparator
// содержит символ, используемый в качестве разделителя
// при вводе дробных чисел в поля ввода (запятая по умолчанию)
if(Key == DecimalSeparator)
{
if((Edit1->Text).Pos(DecimalSeparator) != 0)
{
Key = 0 ; // разделитель уже введен
return;
}
}
// Знаки + и - можно вводить только первым символом
if(Key == '+' || Key == '-') if ((Edit1->Text)).IsEmpty()) return;
// клавиши <Backspace> и <Enter>
if (Key == VK_BACK) || Key == VK_RETURN ) return;
Key = 0; // остальные клавиши запрещены - не отображать символ
}
----------------------------------------------------------------------------- Чтобы на такой обработчик можно было ссылаться из других Edit, имя объекта должно быть универсальным. Поэтому первой строчкой нужно поставить:
TEdit *myEdit = (TEdit*) Sender;
и далее в тексте писать везде myEdit вместо Edit1.
-----------------------------------------------------------------------------
Вариант обработчика (хуже, т.к. не проверок позиции)
-----------------------------------------------------------------------------
void __fastcall TFormForm::Edit3KeyPress(TObject *Sender, char &Key)
{
// Разрешение ввода только цифр, минуса и точки
Set <char, 0, 255> Dig;
Dig << '0'<<'1'<<'2'<<'3'<<'4'<<'5'<<'6'<<'7'<<'8'<<'9'<<'-'<<'.';
if(Key == VK_BACK || Key == VK_DELETE) return;
if(!Dig.Contains(Key)) Key = 0;
}
-----------------------------------------------------------------------------