Поиск:

Ответ в темуСоздание новой темы Создание опроса
> изменение свойств Edit Box, MFC 
:(
    Опции темы
Bishop
Дата 28.9.2006, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 3.6.2005
Где: Минск, Беларусь

Репутация: 2
Всего: 16



Gremlin,
хотя бы так
Код

CString txt;
bool positive = false;
int sel_start, sel_end;
char DesimalSeparator = '.'; // раз без GetLocaleInfo, то и массив не нужен

if (pMsg->message == WM_CHAR)// && pMsg->hwnd == pEdit->m_hWnd)
{
    CEdit *pEdit = NULL;
    UINT edit_controls[] = {IDC_SENSIVITY1, IDC_SENSIVITY2, IDC_SENSIVITY3, IDC_SENSIVITY4};
    for (UINT i = 0; i < sizeof(edit_controls)/sizeof(UINT); i++)
        if (::GetDlgCtrlID(pMsg->hwnd) == edit_controls[i])
        {
            pEdit = (CEdit *) GetDlgItem(edit_controls[i]);
            break;
        }
    if (pEdit) // обработка в единственном экземпляре
    {
        pEdit->GetWindowText(txt);    
        switch (pMsg->wParam)
        {
        case '.': // здесь тоже дублировать незачем 
        case ',':
        ...
        }
    }
}

PM WWW ICQ   Вверх
Gremlin
Дата 28.9.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.8.2006

Репутация: нет
Всего: нет



ага я примерно так и думал тока реализовать не получалось smile сибо
PM MAIL   Вверх
Dart
Дата 29.9.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 26.6.2006
Где: Саратов, РФ

Репутация: 2
Всего: 2



Есть еще один метод, достаточно простой в использовании, но несколько корявый
(Не бейте меня, профи  smile )
Ловить событие изменения edit box, а потом 
UpdateData(TRUE); UpdateData(FALSE);
Только возможно, придется ещё устанавливать позицию курсора.
Зато кода 2 строчки smile
--------------------
ЦитатаЛюблю смотреть, как другие работают
 Дж. К. ДжеромСайт: www.ecosigma.ruПочта: [email protected] 
PM MAIL WWW ICQ   Вверх
Bishop
Дата 30.9.2006, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 3.6.2005
Где: Минск, Беларусь

Репутация: 2
Всего: 16



Dart, это не метод, а побочный эффект.
  • поле не может быть пустым;
  • при вводе нечислового символа вся часть строки после места вставки исчезает;
  • разделитель целой и дробной части можно ввести только если в поле уже есть две цифры, т.е. между ними;
  • большие числа выводятся в экспоненциальном виде, мелкие (дробные) округляются, что недопустимо при вводе;
  • если недопустимый символ первый в строке, выводится сообщение с предложением ввести число.
Я бы не стал так делать.
PM WWW ICQ   Вверх
Dart
Дата 30.9.2006, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 26.6.2006
Где: Саратов, РФ

Репутация: 2
Всего: 2



Цитата(Bishop @  30.9.2006,  08:35 Найти цитируемый пост)
а побочный эффект

Почему же, очень даже метод smile 

Я исходил из того предположения, что в результате необходимо получить необходимые данные определённого типа (ну, int, float, и т.п.). Если не заморачиваться вводом специфичных данных (а как правило это и не надо), то такой метод упрощает решение вопросов правильности ввода данных.

Все твои мысли в принципе правильные, но тем не менее, если необходимо быстро решить этот вопрос, то лучшего решения пожалуй и не стоит придумывать. Потом, ведь не обязательно вешать это на обработчик EN_CHANGE, можно и на другие.

Я и сам так не делаю, когда хочется сделать всё нарядно. Я и в предыдущем посте сказал, что это несколько коряво. Но тем не менее такой вариант имеет право на жизнь.
--------------------
ЦитатаЛюблю смотреть, как другие работают
 Дж. К. ДжеромСайт: www.ecosigma.ruПочта: [email protected] 
PM MAIL WWW ICQ   Вверх
Earnest
Дата 30.9.2006, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(Dart @  30.9.2006,  10:19 Найти цитируемый пост)
Я и сам так не делаю

А ты попробуй - наверняка понравится  smile  ... текст в эдите непрерывно дергается, да еще и меняться может, если форматирование или валидация используется.  Если уж ловить изменения EN_CHANGE, то только затем, чтобы установить факт изменения (ну или еще какие-то действия), но никак не для контроля ввода.
Для контроля ввода есть, в основном, 2 пути: контроль каждого CHAR - для этого надо свой эдит писать, и способ этот хорош только для тех случаев, когда можно задать позиционный шаблон, типа номера телефона и пр.
Второй способ - ждать пока пользователь не закончит мучить эдит, потом считать и поправить (проверить, отформатировать).


--------------------
...
PM   Вверх
Dart
Дата 30.9.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 26.6.2006
Где: Саратов, РФ

Репутация: 2
Всего: 2



Цитата(Earnest @  30.9.2006,  10:50 Найти цитируемый пост)
наверняка понравится

Не понравится, я такие вещи к потере фокуса обычно привязываю smile

Слушайте, ну что мы из элементарного вопроса флуд устроили?
Цитата(Dart @  29.9.2006,  14:27 Найти цитируемый пост)
но несколько корявый

Я ж уже говорил  smile 
Но, такая возможность есть? - ЕСТЬ, и я о ней сказал.

И основной смысл в моем посте был именно в том, чтобы весь контроль за правильностью введения и интерпретации информации можно возложить на MFC.
А уж воспользуется ли кто этим или нет - не мне решать. Может, кому-нибудь и такой метод понравится.

Потом,
Цитата(Dart @  29.9.2006,  14:27 Найти цитируемый пост)
Ловить событие изменения edit box

вовсе не означает использование EN_CHANGE.

--------------------
ЦитатаЛюблю смотреть, как другие работают
 Дж. К. ДжеромСайт: www.ecosigma.ruПочта: [email protected] 
PM MAIL WWW ICQ   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.