Здравствуйте, Гость
Воскресенье, 22.10.2017, 23:25
Главная Главная страница форума Регистрация Вход
Новые сообщения Участники форума Правила форума Поиск
Страница 1 из 11
Модератор форума: stalker, Ekz 
Форум » Все о Delphi » Начинающим » Фильтрация ввода в Edit (Только цифры)
Фильтрация ввода в Edit
DanДата: Понедельник, 05.07.2010, 14:57 | Сообщение # 1
Ранг 1
Группа: Проверенные
Сообщений: 13
Награды: 0
Репутация: 0
Статус: Offline
Добрый день.
У меня есть Edit, и нужно чтобы можно в него было вводить только цифры. Если в поле ввести буквы то происходит ошибка в StrToInt (так как букву нельзя перевести в число).

Я хотел сделать просто проверку, т.е. если число то все нормально, если в введенном тексте есть не число то выдавать сообщение, но у меня не получилось.

В других программах просто нельзя ввести букву. Как так сделать? Или хотябы проверить на принадлежность к числу.
Я прохожу всю строку в цикле.

Code
for i:=1 to Length(s) do
begin
    if s[i] = {и тут нужно сделать сравнение. Через 10 and-ов же это не выход!}
end;

Вобщем подскажите как сделать.
Спасибо!


Я не волшебник, я только учусь
 
skycarДата: Понедельник, 05.07.2010, 16:15 | Сообщение # 2
Ранг 6
Группа: Проверенные
Сообщений: 116
Награды: 5
Репутация: 31
Статус: Offline
Code

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    if (Key in ['0'..'9']) = False then
    Key:=Chr(0);
end;

Надо так изменить обработчик OnKeyPress у Edit'а

И ещё вдобавок проверять на всякий случай с помощью функции

Code

   function ValueStr(const S: string): Boolean;
   var I: Cardinal;
begin
    Result:=True;
   for I:=1 to Length(S) do
   if (S[I] in ['0'..'9']) = False then
   begin
   Result:=False;
   Break;
end;
end;

Code

   if ValueStr(Edit1.Text) then // проверка строки

Эта функция возвращает истину, если в передаваемом параметре-строке все символы являются цифрами

Сообщение отредактировал skycar - Понедельник, 05.07.2010, 19:12
 
AdminДата: Вторник, 06.07.2010, 10:44 | Сообщение # 3
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
skycar, че еще за ValueStr? Первый раз слышу... Да и компилятор ругается, какой нужно подключать модуль? Может быть просто Val? Но там нужно подавать 3 параметра, один из которых будет результатом.

Dan, а еще в Delphi 2010 у Edit есть свойство Numerable (насколько я помню оно так называется). Ставим в True и разрешен ввод только чисел. В Delphi 7 такого еще нет.


Не оказываю помощь через личные сообщения и ICQ
 
DJ_ЕвсДата: Вторник, 06.07.2010, 12:29 | Сообщение # 4
Ранг 6
Группа: Проверенные
Сообщений: 165
Награды: 3
Репутация: 1
Статус: Offline
Admin, блин! Ты ТУПИШЬ!1!1!1 Прочитай первый код.

ПРОЙДИ ТЕСТ!!!!!
http://FIDO20.ru/test.php?4052&c=bbea2a1

 
skycarДата: Вторник, 06.07.2010, 13:13 | Сообщение # 5
Ранг 6
Группа: Проверенные
Сообщений: 116
Награды: 5
Репутация: 31
Статус: Offline
Так это ж самописная функция, я и код привёл в посте
 
AdminДата: Вторник, 06.07.2010, 20:38 | Сообщение # 6
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
skycar, DJ_Евс, ох епрст! Точно, видемо глаз замылился очень. Или думал о другом smile Реально протупил smile

Не оказываю помощь через личные сообщения и ICQ
 
DanДата: Вторник, 06.07.2010, 20:43 | Сообщение # 7
Ранг 1
Группа: Проверенные
Сообщений: 13
Награды: 0
Репутация: 0
Статус: Offline
Всем большое спасибо. Разобрался.

Я не волшебник, я только учусь
 
BlitzkriegДата: Суббота, 27.09.2014, 19:07 | Сообщение # 8
Ранг 1
Группа: Пользователи
Сообщений: 1
Награды: 0
Репутация: 0
Статус: Offline
Господа, есть в таком подходе одна неловкость... нужно сделать исключения на горячие клавиши (ну или хотя бы Backspace) - а то уж очень неудобно пользователю)))

Переписал для собственных нужд вот этот метод

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key in ['0'..'9']) = False then
Key:=Chr(0);
end;

с учетом того, что номера сочетаний клавиш:
8 – Backspace
1 – Ctrl+A
3 – Ctrl+C
22 – Ctrl-V
24 – Ctrl-X

Получаем:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (((Key in ['0'..'9']) = True) or (ord(Key)=1) or (ord(Key)=3) or (ord(Key)=8) or (ord(Key)=22) or (ord(Key)=24)) then Key:=Chr(0);
end;


Сообщение отредактировал Blitzkrieg - Суббота, 27.09.2014, 19:11
 
Форум » Все о Delphi » Начинающим » Фильтрация ввода в Edit (Только цифры)
Страница 1 из 11
Поиск:

Copyright DelphiDevelop.ru © 2008-2017
Хостинг от uCoz