C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Маска ввода в EDIT'e, Как проще реализовать?
** Harold
Отправлено: 23.05.2005, 19:15


Не зарегистрирован







CODE

Обработчик OnKeyPress в Edit'e:
        if ( Key != VK_BACK)
         {
         Set <char, '0', '9'> Dig;
         Dig << '0' <<'1' <<'2' <<'3' <<'4' <<'5' <<'6' <<'7' <<'8' <<'9';
           if (!Dig.Contains(Key))
             Key = 0;
          if (!Dig.Contains(Key))
             Key = 0;
         }

Примерчик честно "спилен" из книжки Архангельского и прекрасно работает, но может принять, как видно, только цифры..
А как же дробные значения? Конечно, можно "разобрать" введенное значение на предмет соответствия float'у и т.д... но как-то громоздко все это. А вот чтоб также просто и изящно?
Кто как делает? ohmy.gif
** Harold
Отправлено: 23.05.2005, 19:17


Не зарегистрирован







Второй раз, конечно, излишне. Прошу прощения.
CODE

         if (!Dig.Contains(Key))
            Key = 0;
Gedeon
Отправлено: 23.05.2005, 19:31


Ветеран

Группа: Модератор
Сообщений: 1742



CODE

Dig << '0' <<'1' <<'2' <<'3' <<'4' <<'5' <<'6' <<'7' <<'8' <<'9'<<'.';
** Harold
Отправлено: 23.05.2005, 19:40


Не зарегистрирован







CODE

template<class T, unsigned char minEl, unsigned char maxEl> class RTL_DELPHIRETURN Set : SetBase<T, minEl, maxEl>

Не катит... не по-порядку коды идут... Или я тупой... sad.gif
** Harold
Отправлено: 23.05.2005, 19:50


Не зарегистрирован







Извини, сам допер:
CODE

        if ( Key != VK_BACK)
         {
          Set <char, ',' , '9'> Dig;
          Dig <<','<< '0' <<'1' <<'2' <<'3' <<'4' <<'5' <<'6' <<'7' <<'8' <<'9';
           if (!Dig.Contains(Key))
             Key = 0;
         }


',' и '.' раньше цифр идут..
Ну, видимо, без try-catch не обойтись, а то между ',' и цифрами еще символы имеются.... smile.gif
** Harold
Отправлено: 23.05.2005, 20:02


Не зарегистрирован







Проверьте, pls, еще на "большой" (101 кнопка) клаве...
А на ноутбучной и так работает... Ничего кроме ',' и цифр ввести не удается ни на русском ни на латинском регистре... (WinXP_Rus_Home), хотя символы между ',' и цифрами еще имеются....('-' '.' '/')
Частный случай?

Вернуться в Вопросы программирования в C++Builder