** 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'у и т.д... но как-то громоздко все это. А вот чтоб также просто и изящно?
Кто как делает? |
|
** 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>
|
Не катит... не по-порядку коды идут... Или я тупой... |
|
** 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 не обойтись, а то между ',' и цифрами еще символы имеются.... |
|
** Harold |
Отправлено: 23.05.2005, 20:02 |
|
Не зарегистрирован
|
Проверьте, pls, еще на "большой" (101 кнопка) клаве...
А на ноутбучной и так работает... Ничего кроме ',' и цифр ввести не удается ни на русском ни на латинском регистре... (WinXP_Rus_Home), хотя символы между ',' и цифрами еще имеются....('-' '.' '/')
Частный случай? |
|
|