Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2009, 22:16   #1
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
Радость Как запретить ввод всего алфавита и логических знаков "=+-*/"

Здравствуйте! Подскажите пожалуйста Как запретить ввод всего алфавита и логических знаков "=+-*/", в поле Edit1 используя Key. Может для этого существуют какие-то функции?
Что не вводить так довольно громоздко:
if (Key == 'a','b','c','d','e','f','g','h','i' ,'j','k','l','m','n','o','p','q','r ','s','t','u','v','w','x','y','z',' +','-','*','/','==')
{
Key = 0;
}
prikolist вне форума Ответить с цитированием
Старый 26.03.2009, 22:50   #2
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

Имхо - надо ловить сообщение (вроде EN_CHANGE) и руками поправлять содержимое...
wyvern@localhost:~$ sudo emerge --unmerge world

Последний раз редактировалось wyvern; 26.03.2009 в 22:53.
wyvern вне форума Ответить с цитированием
Старый 26.03.2009, 22:56   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот примерчик набросал.
Не позволяет вводить строчные буквы латинского алфавита.
Используется обработчик onChange
Код:
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
char c;  // здесь будет введенный символ
AnsiString s;  // а это будет вся строка из эдита
s = Edit1->Text;   // читаем строку в s
if(Edit1->Tag == 1) return;  // Если флаг = 1, то есть событие onChange вызвано самой функцией,
   // то выходим
Edit1->Tag = 1;  //  иначе устанавливаем флаг (таким образом сказав, что функция начала обработку)
c = s[s.Length()];  // в c заносим последний символ из эдита (как раз тот, что только что ввели
if ((c>='a' && c<='z'))   // если это строчная буква алфавита
 {
  s[s.Length()] = NULL;    // ...то укорачиваем строку на 1 символ
  Edit1->Text = s;   // и переносим ее в Эдит
 }

Edit1->Tag = 0;  // Возвращаем флаг в 0, чтобы можно было дальше обрабатывать символы
Edit1->SelStart = Edit1->Text.Length();   // ставим курсор в конец Эдита
Edit1->SelLength = 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 26.03.2009 в 23:13. Причина: добавил комменты
Sazary вне форума Ответить с цитированием
Старый 26.03.2009, 23:04   #4
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Напишите пожалуйста пояснение пару предложений, о вашем коде.
Например делается то-то, после того-то. Заранне благодарю.
prikolist вне форума Ответить с цитированием
Старый 26.03.2009, 23:13   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Добавил комменты в листинг.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 27.03.2009, 20:09   #6
Ch00kan0ff
 
Регистрация: 23.03.2009
Сообщений: 8
По умолчанию

а если в обработчике OnKeyPress написать
Код:
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{if ((Key >= '0') && (Key <= '9') || Key == VK_BACK) {}
        else
        if ((Key == '.') || (Key == ','))
             {if(Key=='.')
               Key=',';
             }
             else
              {Key = 0;
               Beep();
              }
разве не годится? у меня вводит только цифры и запятую. Или мож я че не так понял?
Ch00kan0ff вне форума Ответить с цитированием
Старый 27.03.2009, 23:48   #7
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

if(Digit > 0x29 && Digit<0x3A)AddDigittoEdit(Digit); - это скажем так псевдокод - надеюсь все понятно из него.
0x30 = '0'
0x39 = '9'
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Старый 27.03.2009, 23:53   #8
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Можно еще использовать функцию isalpha() или еще проще isdigit(). Первая проверяет, является ли символ буквой, а вторая - проверяет является ли символ цифрой.
MaTBeu вне форума Ответить с цитированием
Старый 28.03.2009, 11:01   #9
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

isdigit(). и isalpha() интересно, как же их использовать, просто я впервые о них слышу.

Пожалуйста, кто писал вот это
Код:
if(Digit > 0x29 && Digit<0x3A)AddDigittoEdit(Digit); - это скажем так псевдокод - надеюсь все понятно из него. 
0x30 = '0'
0x39 = '9'
Дайте пояснение,что оно делает, я как новичок, только понял что 0х29 - это помоему какоето 16 -ричное число.
Этот кусок AddDigittoEdit(Digit) также не понятен.
Напишите также смысл, этого куска кода. Зараннее благодарю. Извините что много вопросов.

Последний раз редактировалось prikolist; 28.03.2009 в 11:08.
prikolist вне форума Ответить с цитированием
Старый 28.03.2009, 13:25   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
isdigit(). и isalpha() интересно, как же их использовать, просто я впервые о них слышу.
isdigit возвращает ненулевое значение, если аргумент - цифра
isalpha - то же самое, только если аргумент - буква.
Вот еще один пример:
Код:
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
if(Edit1->Tag==1) return;
Edit1->Tag = 1;
if(!isdigit(Edit1->Text[Edit1->Text.Length()]))
 {
  Edit1->SelStart = Edit1->Text.Length()-1;
  Edit1->SelLength = 1;
  Edit1->SelText = "";
 }
Edit1->Tag = 0;
}
И совсем короткий для keyPress:
Код:
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key)) Key = 0;
}
prikolist
Ivan_32 привел псевдокод, а не код на сях.
AddDigittoEdit(Digit); - дословно "добавить цифру в эдит". То есть использовать соответствующую функцию.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запрашивает ввод времени суток и в зависимости от этого выводит на экран "Доброе утро", "Добрый день". Maria, Russia Помощь студентам 5 17.02.2009 21:44
Как установить в TEdit фразу "инкрементный поиск" с последующим его очищением на ввод символов? SkAndrew Общие вопросы Delphi 3 10.11.2008 02:38
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49
Запретить закрытие окошка формы крестиком "Х" Slim Microsoft Office Excel 5 28.03.2007 19:39