Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.19;
Скачать: CL | DM;

Вниз

Проверка значения в 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.053 c
15-1138765315
12DFBDD
2006-02-01 06:41
2006.02.19
Поисковики vs IBM


3-1135167042
kreyl
2005-12-21 15:10
2006.02.19
Как подсчитать количество неодинаковых записей в датасете?


2-1139106124
quadronik
2006-02-05 05:22
2006.02.19
следим за значением DateTimePicker


2-1138809656
maxim161
2006-02-01 19:00
2006.02.19
MonAPI


8-1126147717
dm37
2005-09-08 06:48
2006.02.19
Вывод формы на второй экран монитора?