![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,328
|
![]()
Приветствую! Следующая программа демонстрационная. Получает два числа из двух Edit'ов и выводит в третий сумму этих чисел. Мне нужно сабклассить Edit'ы для ввода только чисел. Делаю по подобию: http://wasm.ru/article.php?article=1001020. Попытался сабклассить первый Edit. При запуске программы невозможно ввести данные в него (окно Edit'а как-будто зависает). В процедуре EditWndProc в default проваливаемся. Заранее спасибо!
main.c Код:
Код:
Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]()
1. Что-то мне помнится, в свойствах эдита можно установить, что он принимает только цифры.
2. Не помню приоритет операций в С, но если бы аналогичное было записано на Паскале: (0 <= LOWORD(lParam) && LOWORD(lParam) <= 9) то работало бы неправильно из-за отсутствия скобок. Кажется, так: ES_NUMBER Последний раз редактировалось s-andriano; 05.05.2012 в 23:20. |
![]() |
![]() |
![]() |
#3 | |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,328
|
![]() Цитата:
Как теперь реализовать идею: при вводе "не цифр" выводить строку красного цвета "Вводите только цифры!" рядом с Edit'ом . Мне кажется, без сабклассинга не обойтись. Мне нужна эта секция: case WM_CHAR, для анализа вводимых символов. Здесь всё правильно. Приоритет "<=" выше, чем приоритет "&&" |
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
![]()
Потому как надо: return CallWindowProc(OldWndProc,....
а не return 0, как у Вас сейчас. |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,328
|
![]()
EUGY, большое спасибо! Это всё моя невнимательность.
Я нашёл ещё ошибки: Вместо: Код:
Код:
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
![]()
Чтоб не путаться оставьте return CallWindowProc только в конце оконной процедуры.
Не в case default. И если нужно, чтобы при некотором сообщении не доходило до дефолта: Код:
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,328
|
![]()
EUGY, у меня сейчас вот так работает:
Код:
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
![]()
Вот я бы написал так, просто как болванка, не принимайте за эталон:
Код:
Последний раз редактировалось EUGY; 06.05.2012 в 17:07. Причина: поправил параметр в WinMain |
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,328
|
![]()
Точно! Теперь понял! Спасибо!
|
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,328
|
![]()
Я доделал программу! При вводе "не цифры" выскакивает сообщение:
![]() Я предусмотрел удаление цифр с помощью клавиши "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 |