Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика первый курс / ДЛЯ САМОСТОЯТЕЛЬНОГО ИЗУЧЕНИЯ / BUILDER / Запрет ввода нежелательных символов

.doc
Скачиваний:
66
Добавлен:
27.03.2015
Размер:
33.79 Кб
Скачать

-----------------------------------------------------------------------------

Ограничения на ввод в 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;

}

-----------------------------------------------------------------------------