Форум: "Начинающим";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];
ВнизПроверка значения в edit Найти похожие ветки
← →
Trilon1 (2006-01-30 17:52) [0]Здравствуйте! Помогите начинющему :)
Есть edit, в него вводят текст, как проверить что ввели не букву.
В него надо вводить только цифирки.
← →
Gero © (2006-01-30 17:54) [1]В OnKeyPress проверять значение Key, и, если оно не устраивает, менять.
← →
Trilon1 (2006-01-30 18:12) [2]А можно на примере?
← →
Gero © (2006-01-30 18:20) [3]OnKeyPress — свойство TEdit. Написать для него обработчик сам сумеешь?
В него передается var-параметр Key. Он содержит нажатый символ. Если его изменишь, TEdit будет «думать», что нажали то, на что ты изменил.
Или с проверкой и заданием значений переменной не справишься?
← →
azl © (2006-01-30 18:22) [4]
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;
← →
Trilon1 (2006-01-30 18:34) [5]Спасибо за помощь.
← →
КиТаЯц © (2006-02-01 15:38) [6]Проще.
procedure TMainForm.EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
tEdit(Sender).ReadOnly:= (not (Key in [VK_BACK, VK_DELETE, с нужного..до нужного символа, еще нужный символ]));
end;
← →
ivc_andr © (2006-02-01 17:50) [7]еще проще
procedure TMainForm.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not(Key in ["0".."9",DecimalSeparator]) and (Key <> #8) then Key := #0;
end;
← →
azl © (2006-02-01 18:01) [8]
> ivc_andr ©
Совершенно не корректный пример.
В этом случае можно поставить миллион тринадцать запятых, а это грубейшая ошибка. Кроме того, нельзя ввести точку, которая автоматически будет заменена на запятую.
← →
Zeqfreed © (2006-02-01 21:34) [9]azl © (01.02.06 18:01) [8]
Пример гораздо лучше [4], т.к. хотя бы жестко не привязан к запятой в качестве десятичного разделителя. А проверку введенного числа логичнее было бы производить уже во время его непосредственного преобразования из строкового в числовое представление. Пользовательские интерфейсы же, ограничивающие, а тем более подменяющие, ввод пользователя мне кужутся крайне не дружественными и не «юзабельными».
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c