Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проверка значения в 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, и, если оно не устраивает, менять.


Наверх

Титульная страница Поиск, карта сайта Написать письмо