Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.031 c
3-1135332668
Andry
2005-12-23 13:11
2006.02.19
Поле memo и поиск без учета регистра


2-1139040526
Julia
2006-02-04 11:08
2006.02.19
Как объявить тип TDateSetState?


15-1138259278
wal
2006-01-26 10:07
2006.02.19
Железячники, отзовитесь!!!


2-1138582094
Anatoly123
2006-01-30 03:48
2006.02.19
QReports


2-1139040100
Julia
2006-02-04 11:01
2006.02.19
Ошибка на Locate





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский