Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: ON_EN_CHANGE (versus OnKeyPress в Delphi)  (Прочитано 14310 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Tuborg
Команда клуба

ee
Offline Offline

« : 05-07-2007 22:28 » 

Подскажите пожалуйста как при помощи обработчика события ON_EN_CHANGE контроллировать ввод символов? К примеру чтобы человечишко не смог ввести цифры, а только буквы... Помнится в Дельфи был обработчик OnKeyPress который в качестве параметра передавал нажатую людишками клавишу и её можно было проанализировать и не обращать на неё, к примеру, внимания. В Visual C такого быть не может.... если же я обращаюсь к ф-ции GetWindowTextA то получаю всю строку, включая нажатый символ.

Как можно разрешить проблему контроля нажатия клавиши в Visual C? Неужели перехватывать WM_CHAR? :'(
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 06-07-2007 08:42 » 

Проблема заключается в том, что ты хочешь работать со стандартным контроллом нестандартными методами. Ага


ON_EN_CHANGE - говорит тебе о том, что техт уже изменён. Если ты пользуешься MFC, то там предусмотрен механизм валидирования вводимых данных - макросы DDX. Для ввода только цифр есть стиль контролла. Короче можно придумать
безобидные методы.

Посмотри, если не поможет будем дальше разбираться. Я подобную задачу решал, именно перехватывая WM_CHAR.


« Последнее редактирование: 06-07-2007 08:46 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Tuborg
Команда клуба

ee
Offline Offline

« Ответ #2 : 06-07-2007 09:31 » 

Стилем контрола мне не обойтись, потому что я хочу как в Ворде, сделать контрол где измняется размер шрифта.... то есть это комбобокс где вюбираешь размер например 23 pt, или если в списке твоего размера нет вводишь в ручную - 23. А Ворд сразу после этого добавляет к введённым цифрам pt.... и при этом не даёт ввести любые другие буквы кроме pt. Т.е. сделать стиль сразу только цифры - не выход в моём случае....
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 06-07-2007 09:50 » 

Tuborg, предлагаю выход проще )

1) Пусть стиль будет Number , а "pt" напиши рядом с контролом в CStatic-контроле.

2 )Или после окончания ввода удали все не цифровые символы и припиши pt

---
3) а есть ещё более симпатишныйвариант (но сложнее) - делай вариант 2 после каждого введённого символа. Только тут придётся перед удалением нецифровых сначала запоминать положение каретки в строке, а после удаления - пытаться ставить курсор на место. Иначе вводить будет неудобно. И мерцать может при этом способе.
« Последнее редактирование: 06-07-2007 09:55 от Алексей1153++ » Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 06-07-2007 09:59 » 

Tuborg, однозначно - делай свой контрол на базе CComboBox - себе дешевле будет. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Tuborg
Команда клуба

ee
Offline Offline

« Ответ #5 : 06-07-2007 10:27 » 

методы Алексей1153++ пробовал, пришёл к выводу что надо WM_CHAR отслеживать.  Я за свой контрол. Тут вон что отрыл - http://www.netcode.ru/cpp/?artID=1029.  Как этим событием грамотно пользоваться? Оно же перехватывает сообщения небось от всего окна? А мне надо понять когда сообщение пришло именно в фокусе ввода моего combo?
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 06-07-2007 11:23 » 

Ну твой же контролл это и есть окно, именно в нём и буделшь ОнЧар отлавливать.

Я тут ща подумал... Прикинул... (Сам-то я такое не делал) Там может быть такая фишка. Тебе надо будет свой СEdit сделать и сказать своему кобобоксу, чтобы он его использовал вместо своего. ХОтя сначала попробуй напрямую.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 06-07-2007 11:46 » 

Джон,Tuborg,  я делал с едитом. Вне едита ничего не получится, переопределять надо именно CEdit, тогда выходит на ура. Даже код могу поискать, если что )
 А вот заменять у комбы едит своим - не доводилось...
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 06-07-2007 12:01 » 

С едитым я тоже делал. Может с комбиком посложней будет.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Tuborg
Команда клуба

ee
Offline Offline

« Ответ #9 : 06-07-2007 12:21 » 

А можно на едит глянуть.... А я буду делать по аналогии (постараюсь =) )
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 06-07-2007 18:37 » 

вот файлы моего класса CEditNumAndPoint , который произведён от CEdit. У меня он был предназначен для ввода IP , поэтому пропускает только цифры и точки. Причём, если прилетают чары
Код:
','
'<'
'Б'
'б'
'ю'
'Ю'
'>'
'?'
'/'
- то они также преобразуются в точку. Комментариев я писал маловато... Но где что находится, думаю разберёшся, код небольшой. Если что - спрашивай сюда Улыбаюсь


* EditNumAndPoint_01.zip (2.47 Кб - загружено 985 раз.)
« Последнее редактирование: 06-07-2007 18:50 от Алексей1153++ » Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines