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

 
onKeyPress
Tatiana
Отправлено: 18.10.2004, 09:20


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







У меня есть обработчик события onKeyPress компонента TEdit. Как узнать в теле обработчика, какой текст в Edit в итоге получится
olegenty
Отправлено: 18.10.2004, 09:52


Ветеран

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



прочитай свойство Edit->Text
Tatiana
Отправлено: 19.10.2004, 05:17


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







Извините за неточно заданный вопрос. Нужно узнать текст, который получится уже после нажатия клавиши. Допустим, до нажатия клавиши текст в Edit был "текст", после стал "т_екст". ShowMessage(Edit1->Text) в OnKeyPress выдает "текст", а мне нужно получить уже "т_екст".[B][U]
Vital_K
Отправлено: 19.10.2004, 06:27


Ученик-кочегар

Группа: Участник
Сообщений: 27



А почему бы не использовать обработчик событий OnChange или OnKeyUp — результат один и тотже.
Guest
Отправлено: 19.10.2004, 10:35


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







Но в обратчике OnChange уже не отменить нажатие клавиши. Проблема такая: в Edit вводится вещественное число, и нужно не дать пользователю ввести неверное значение. "Нецифровые" клавиши в OnKeyPress отбрасываются с помощью Key=0, но нужно еще и проверить, не выйдет ли введенное число из нужного диапазона, и если выйдет. отменить нажатие клавиши. Можно, конечно, запоминать старое значение и в OnChange заменять текст на него, но может быть, это можно сделать проще?
Gedeon
Отправлено: 19.10.2004, 11:29


Ветеран

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



Ну по поводу проще, не факт. Хотя наверное более правильно, определяйте где в данный момент стоит курсор, прибавляйте к уже имеющемуся тексту символ и анализируйте, если не подходит Key=NULL;
Vital_K
Отправлено: 19.10.2004, 11:41


Ученик-кочегар

Группа: Участник
Сообщений: 27



Напиши в обработчике событий Edit1KeyPress() следующее:

Set<'char, '0', '9''>Dig ;
Dig<<'0'<<'1'<<'2'<<'3'<<'4'<<'5'<<'6'<<'7'<<'8'<<'9';
if(!Dig.Contains(Key))
Key=0;
P.S. Опострофы перед char и после '9' удалить. Связано с косяком страницы — не выводит значение в скобках '<>'.

Отредактировано Vital_K — 19/10/2004, 12:54
Gedeon
Отправлено: 19.10.2004, 12:51


Ветеран

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



2Vital_K
Тегами CODE надо пользоваться.
2Tatiana
Про буфер обмена не забудьте и еще про SetWindowText(...); тоже.

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