![]() |
|
![]() ![]() ![]() |
|
Proletariy |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 19.2.2008 Репутация: нет Всего: нет |
Доброго всем времени суток.
Хочу создать числовое поле ввода, которое бы воспринимало: цифры (0-9); знаки точка (или запятая) только один раз; знаки "+" и "-" только один раз и перед числом. До недавнего времени пользовался стандартным типом float. Но это не очень удобно. Т.к. в поле можно вводить и другие символы, а так же велика вероятность отсечения дробной части числа от целой если воспользовался не тем знаком разделения (точкой или запятой). Как я делаю: 1.Создаю свой класс CMyEdit (родительский класс CEdit) 2. Добавляю onChar для CMyEdit
Чем задаю возможность ввода только вышеперечисленных символов И дальше не знаю как быть Хотелось, бы чтобы при присвоении переменной для элемента управления EditBox производной от класса CMyEdit с ней можно было бы работать как с переменной типа float. Возможно есть другой путь? Заранее спасибо на добром слове. П.С. Подумалось. Может написать функцию, которая будет анализировать переменную типа CString при добавлении к ней символов. OnUpdate. А при killfokus переводила бы ее в float (atof)??? Но тут тоже... надо две переменные одна типа CString, другая типа float. Это сообщение отредактировал(а) Proletariy - 16.1.2009, 16:36 |
|||
|
||||
voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
А не хочешь воспользоваться уже готовым решением (UltimateToolbox)?
Там есть такой компонент. И ваще там много всего есть. В крайнем случае, там есть исходники и можно посмотреть как сделано. |
|||
|
||||
KEHT |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 17.7.2006 Репутация: 1 Всего: 1 |
А что мешает завести в классе переменную типа float и в событии OnChar анализировать строку и обновлять переменную? |
|||
|
||||
Proletariy |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 19.2.2008 Репутация: нет Всего: нет |
voov, KEHT спасибо за советы.
Про UltimateToolbox не знал, попробую изучить. KEHT,а вы можете выложить простой пример.
Это сообщение отредактировал(а) Proletariy - 19.1.2009, 11:35 |
|||
|
||||
KEHT |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 17.7.2006 Репутация: 1 Всего: 1 |
Возможно я неправильно понял вопрос, но при наличии некоторого метода ToFloat (или используя тот же atof) можно было бы вызвать его в конце OnChar.
Еще есть такой вариант: оставить OnChar такик, как вы привели и добавить 2 переменные для контрола визардами студии. Один типа float, другой типа CString и использовать тот что вам нужно. |
|||
|
||||
Proletariy |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 19.2.2008 Репутация: нет Всего: нет |
Сегодня целый день пытался сделать что-либо внятное. Создать математическое поле ввода.
![]() OnChar благополучно позаимствовал на http://63.236.73.79/cpp/controls/editctrl/...91/?thread=5306 лучшее из того, что я нашел. 1.Создал класс производный от CEdit CFloatEdit. 2.Добавил OnChar куда загнал вышеуказанный код. 3.Добавил в класс CFloatEdit две функции - одну на считывание данных из EditBoxa и преобразование их в тип float, вторую на запись данных из типа float в EditBox ( znach() и sendznach() ). Меня в принципе результат устраивает. Вот еще код OnChar хорошо работает в 7 студии в 8 студии выдает ошибку!! Причину я не понял, а я только хотел на восьмую пересесть. Прошу господа, посмотрите мой код может у Вас будут некоторые замечания и дополнения ![]() Очень хочется знать почему 8 студия ошибку выдает. Присоединённый файл ( Кол-во скачиваний: 6 ) ![]() |
|||
|
||||
voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
||||
|
||||
Proletariy |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 19.2.2008 Репутация: нет Всего: нет |
voov
Странно. ![]() У меня этот проект тоже в 8 студии заработал. Попробовал сделать такой проект заново в 8 студии. Ошибку выдал после того как я прописал функцию OnChar в классе CFloatEdit на этой строке
Ошибка 1 error C2440: инициализация: невозможно преобразовать 'const char [81]' в 'ATL::CStringT<BaseType,StringTraits>' d:\программирование\555\555\floatedit.cpp 29 ????? Это сообщение отредактировал(а) Proletariy - 20.1.2009, 19:09 |
|||
|
||||
voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
Поставь в настройках проекта (Аlt+F7) General -> Character Set -> Use Multi-Byte Character Set
А вообще привыкай строки обрамлять макросом _T(), как правило хорошего тона. Тогда таких проблем не будет.
|
|||
|
||||
Proletariy |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 19.2.2008 Репутация: нет Всего: нет |
voov
Спасибо тебе большое. Ты мне опять очень помог. ![]() |
|||
|
||||
Proletariy |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 19.2.2008 Репутация: нет Всего: нет |
Причесал я немного класс CFloatEdit и получил то что хотел. Выкладываю. Возможно это сохранит кому-нибудь время.
1.Добавляем файлы FloatEdit.h и FloatEdit.cpp в проект. 2.Добавляем EditControl. 3.Добавляем к EditControl переменную Variable type: CfloatEdit Например public: CFloatEdit m_varible; Теперь можно работать с переменной m_varible.m_category=5; //Число будет отображаться с точностью 5 знаков после запятой m_varible.SetValue(float m_value); или m_varible.SetValue(7) //EditControl отобразит значение переменной типа float с указанным числом знаков после запятой Например 7.000 m_varible.GetValue(); //Получает значение с EditControl с которым можно сразу выполнять математические действия тип float П.С. Работает при использовании многобайтовой кодировки (Use Multi-Byte Character Set) Присоединённый файл ( Кол-во скачиваний: 8 ) ![]() |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |