Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Аналог MaskEdit на API


Автор: Fox_in 30.4.2007, 17:53
Средствами API сделал Edit. Теперь нужно, чтобы пользователь мог вводить только цифры. Как это можно реализовать??

Автор: anwe 30.4.2007, 21:20
Сабклассить Edit.

Автор: Fox_in 30.4.2007, 22:39
А это как??

Автор: anwe 30.4.2007, 22:43
Надо переопределить процедуру окна твоего edit'а. Посмотри в msdn SetWindowLong.

Автор: Fox_in 1.5.2007, 00:20
Что-то там слишком сложно получается. Вся проблема состоит в том, что EN_CHANGE я использовать не могу -- при программном изменении текста нескольких  edit'ов после изменения первого происходит событие EN_CHANGE, и остальные не изменяются.

Кстати, еще один вопрос возник. Как можно отловить такое -- button уже нажат, но еще не отпущен??
Как убрать рамку у окна?? Или как сделать окно во весь экран??

Автор: anwe 1.5.2007, 00:38
OldWndproc:=SetWindowLong(hwndEdit,GWL_WNDPROC,EditWndProc)
Первый парамент - хэндл  твоего эдита, второй - установка нового адреса для процедры, третий - новое значение процедуры окна. Она вернет адрес старой. Его надо сохранить.

Код

procedure EditWndproc (hEdit,uMsg,wparam,lparam:DWORD);
       if uMsg=WM_CHAR then
       begin
           cod:=wparam;
           cod:=code and 16;
           if ((cod>="0") and (cod<="9")) or (cod=VK_BACK) then
               CallWindowproc(OldWndproc,hEdit,uMsg,eax,lparam);
       end;


Цитата(Fox_in @  1.5.2007,  00:20 Найти цитируемый пост)
button уже нажат, но еще не отпущен??

По нажатию мыши.

Автор: Rouse_ 16.5.2007, 15:42
Цитата(Fox_in @  30.4.2007,  18:53 Найти цитируемый пост)
Средствами API сделал Edit. Теперь нужно, чтобы пользователь мог вводить только цифры.

При создании указать стиль ES_NUMBER или после создания выставить данный флаг стиля:
Код

SetWindowLong(EditHandle, GWL_STYLE, GetWindowLong(EditHandle, GWL_STYLE) or ES_NUMBER);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)