![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверка значения в edit
Trilon1 © (2006-01-30 17:52:00)Здравствуйте! Помогите начинющему :)
Есть edit, в него вводят текст, как проверить что ввели не букву.
В него надо вводить только цифирки.
Zeqfreed (2006-02-01 21:34:00) [1]azl © (01.02.06 18:01) [8]
Пример гораздо лучше [4], т.к. хотя бы жестко не привязан к запятой в качестве десятичного разделителя. А проверку введенного числа логичнее было бы производить уже во время его непосредственного преобразования из строкового в числовое представление. Пользовательские интерфейсы же, ограничивающие, а тем более подменяющие, ввод пользователя мне кужутся крайне не дружественными и не «юзабельными».
azl (2006-02-01 18:01:00) [2]
> ivc_andr ©
Совершенно не корректный пример.
В этом случае можно поставить миллион тринадцать запятых, а это грубейшая ошибка. Кроме того, нельзя ввести точку, которая автоматически будет заменена на запятую.
ivc_andr (2006-02-01 17:50:00) [3]еще проще
procedure TMainForm.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not(Key in ['0'..'9',DecimalSeparator]) and (Key <> #8) then Key := #0;
end;
КиТаЯц (2006-02-01 15:38:00) [4]Проще.
procedure TMainForm.EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
tEdit(Sender).ReadOnly:= (not (Key in [VK_BACK, VK_DELETE, с нужного..до нужного символа, еще нужный символ]));
end;
Trilon1 (2006-01-30 18:34:00) [5]Спасибо за помощь.
azl (2006-01-30 18:22:00) [6]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var //цифровая маска
vrPos,vrLength,vrSelStart : byte;
const
i : byte=1; //I+1 = количество знаков после запятой (в данном случае - 2 знака)
begin
with Sender as TEdit do
begin
vrLength:=Length(Text); //определяем длину текста
vrPos:=Pos(',', Text); //проверяем наличие запятой
vrSelStart:=SelStart; //определяем положение курсора
end;
case Key of '0'..'9' : begin
//проверяем положение курсора и количество знаков после запятой
if (vrPos>0)and(vrLength-vrPos>I)and(vrSelStart>=vrPos) then
Key:=#0; //"погасить" клавишу
end;
',','.' : begin
//если запятая уже есть или запятую пытаются поставить перед числом или никаких цифр в поле ввода еще нет
if (vrPos>0)or(vrSelStart=0)or(vrLength=0) then
Key:=#0 //"погасить" клавишу
else Key:=#44; //всегда заменять точку на запятую
end;
#8 : ; //позволить удаление знаков клавишей 'Back Space'
else Key := #0; //"погасить" все остальные клавиши
end;
end;
Gero (2006-01-30 18:20:00) [7]OnKeyPress — свойство TEdit. Написать для него обработчик сам сумеешь?
В него передается var-параметр Key. Он содержит нажатый символ. Если его изменишь, TEdit будет «думать», что нажали то, на что ты изменил.
Или с проверкой и заданием значений переменной не справишься?
Trilon1 (2006-01-30 18:12:00) [8]А можно на примере?
Gero (2006-01-30 17:54:00) [9]В OnKeyPress проверять значение Key, и, если оно не устраивает, менять.