|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
05.05.2012, 21:35 | #1 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
Ограничение ввода в edit
Приветствую! Следующая программа демонстрационная. Получает два числа из двух Edit'ов и выводит в третий сумму этих чисел. Мне нужно сабклассить Edit'ы для ввода только чисел. Делаю по подобию: http://wasm.ru/article.php?article=1001020. Попытался сабклассить первый Edit. При запуске программы невозможно ввести данные в него (окно Edit'а как-будто зависает). В процедуре EditWndProc в default проваливаемся. Заранее спасибо!
main.c Код:
Код:
Код:
|
05.05.2012, 23:17 | #2 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
1. Что-то мне помнится, в свойствах эдита можно установить, что он принимает только цифры.
2. Не помню приоритет операций в С, но если бы аналогичное было записано на Паскале: (0 <= LOWORD(lParam) && LOWORD(lParam) <= 9) то работало бы неправильно из-за отсутствия скобок. Кажется, так: ES_NUMBER Последний раз редактировалось s-andriano; 05.05.2012 в 23:20. |
06.05.2012, 07:09 | #3 | |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
Цитата:
Как теперь реализовать идею: при вводе "не цифр" выводить строку красного цвета "Вводите только цифры!" рядом с Edit'ом . Мне кажется, без сабклассинга не обойтись. Мне нужна эта секция: case WM_CHAR, для анализа вводимых символов. Здесь всё правильно. Приоритет "<=" выше, чем приоритет "&&" |
|
06.05.2012, 09:32 | #4 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Потому как надо: return CallWindowProc(OldWndProc,....
а не return 0, как у Вас сейчас. |
06.05.2012, 15:45 | #5 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
EUGY, большое спасибо! Это всё моя невнимательность.
Я нашёл ещё ошибки: Вместо: Код:
Код:
|
06.05.2012, 15:50 | #6 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Чтоб не путаться оставьте return CallWindowProc только в конце оконной процедуры.
Не в case default. И если нужно, чтобы при некотором сообщении не доходило до дефолта: Код:
|
06.05.2012, 16:39 | #7 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
EUGY, у меня сейчас вот так работает:
Код:
|
06.05.2012, 16:58 | #8 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Вот я бы написал так, просто как болванка, не принимайте за эталон:
Код:
Последний раз редактировалось EUGY; 06.05.2012 в 17:07. Причина: поправил параметр в WinMain |
06.05.2012, 17:20 | #9 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
Точно! Теперь понял! Спасибо!
|
07.05.2012, 10:01 | #10 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
Я доделал программу! При вводе "не цифры" выскакивает сообщение:
Я предусмотрел удаление цифр с помощью клавиши "Backspace" (VK_BACK). Возник вопрос: почему секция WM_CHAR не срабатывает при нажатии на клавишу "Delete"? Заранее спасибо за ответ! main.c Код:
Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ограничение ввода в stringgrid | Человек Панда | Помощь студентам | 1 | 10.07.2011 11:04 |
Ограничение ввода с клавиатуры | jekidollar | Общие вопросы C/C++ | 1 | 12.05.2010 08:23 |
Ограничение ввода в Edit | xxxsas | Общие вопросы C/C++ | 4 | 22.01.2009 12:36 |
Ограничение ввода символов. Delphi | Alex_2017 | Помощь студентам | 0 | 04.06.2008 17:26 |
Ограничение ввода в Edit | Макс84 | Компоненты Delphi | 7 | 23.07.2007 09:38 |