Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Edit only for double 
V
    Опции темы
devmstr
Дата 9.12.2006, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


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

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



Решил сделать Edit, который смог бы принимать только double значения. Стандартный режим Only Numbers конечно рулет, но в данной ситуации - безполезен.
Вот как я это сделал:
Код
INT_PTR EdtProc(HWND hWnd, UINT msg, WPARAM wPar, LPARAM lPar)
{
    switch (msg)
    {
    case WM_KEYDOWN:
        if (!IsNum(wPar))
            wPar = 0;
        break;
    }
    return CallWindowProc(OldEdtProc, hWnd, msg, wPar, lPar);
}

Но почему-то не помогает, тоесть 
Код
wPar = 0
, абсолютно ни к чему не приводит...


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
Rodman
Дата 9.12.2006, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



devmstr, используй функцию TryStrToFloat

Код

float Test;
if(TryStrToFloat(Edit1.Text, Test)==TRUE)
      Showessage("Все данные введены НОРМАЛЬНО");
else
     Showessage("Данные введены не НОРМАЛЬНО");

PM MAIL WWW Skype GTalk YIM MSN   Вверх
586
Дата 9.12.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Код
int __stdcall EditWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, long lParam)
{
    switch(uMsg)
    {
    case WM_CHAR:
        if(!(wParam>='0' && wParam<='9') && wParam!='.' && wParam!=8)
        {
            MessageBeep(0);
            return 0;
        }
        break;
    }
    __asm {
        leave
        jmp dword ptr pEditWndProc
    }
}


Это сообщение отредактировал(а) 586 - 9.12.2006, 14:32
PM   Вверх
devmstr
Дата 11.12.2006, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


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

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



Rodman
Ну это само-собой, но уже потом. А хотелось бы контроль во время ввода, но ненавящивый. Сделал так:

Код

case WM_CHAR:
        sT = new TCHAR[STRMAX];
        GetWindowText(hWnd, sT, STRMAX);
        if (!IsNum((CHAR)wPar, sT))
        {
            delete[] sT;
            return 1;
        }
        delete[] sT;
        break;
...
BOOL IsNum(CHAR ch, TCHAR* szStr)
{
    TCHAR sT[2];
    INT      iCd;
    GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, sT, 2);
                                                     // 8 - admitting BackSpace
    if (((ch >= __TEXT('0')) && (ch <= __TEXT('9'))) || (ch == 8))
        return TRUE;
    if (ch == sT[0])
    {
        for (int it = 0; it < lstrlen(szStr); it++)
            if (szStr[it] == sT[0])
                return FALSE;
        return TRUE;
    }
    return FALSE;
}


Добавлено @ 10:05 
586, 
Вообщем, что-то подобное, но нужно по else делать return 1;


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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