|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 5, 2003 15:03:41 Такой вопрос меня волнует, для того чтобы отфильтровать символы вводимые в Edit я использовал сабклассинг, но потерял возможность вставлять в этот Edit текст из буфера обмена, есть ли какие-нибудь пути решить эту проблему? |
|
|
Дата: Ноя 5, 2003 15:12:00.elseif uMsg == WM_CHAR
invoke GetAsyncKeyState, VK_CONTROL ; allow clipboard works
.if !( eax & 80000000h )
.endif |
|
|
Дата: Ноя 5, 2003 15:28:00 Спасибо, попробую! |
|
|
Дата: Ноя 5, 2003 15:44:53 У меня не работает :-( Я что-то делаю не так? SubclassWndProc6 PROC hEdit:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
.if uMsg==WM_CHAR
invoke GetAsyncKeyState, VK_CONTROL ;allow clipboard works
.if !( eax & 80000000h )
mov eax,wParam
.if (al>="0" && al<="9") || (al>="A" && al<="F") || (al>="a" && al<="f") || al==VK_BACK
.if al>="a" && al<="f"
sub al,20h
.endif
invoke CallWindowProc,OldWndProc6,hEdit,uMsg,eax,lParam
ret
.endif
.endif
.elseif uMsg==WM_KEYDOWN
mov eax,wParam
.if al==VK_TAB
invoke SetFocus,Edit2
.else
invoke CallWindowProc,OldWndProc6,hEdit,uMsg,wParam,lParam
ret
.endif
.else
invoke CallWindowProc,OldWndProc6,hEdit,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
SubclassWndProc6 endp |
|
|
Дата: Ноя 5, 2003 16:19:45 хз, разбираться некогда. Вот моя - работает.
MaskedEditProc proc uses edi ebx hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
mov edi, $invoke(GetWindowLong, hWnd, GWL_USERDATA)
mov ebx, [edi][256]
; WM_NCDESTROY is the LAST message that a window will receive -
; therefore we must finally remove the old wndproc here
.if uMsg == WM_NCDESTROY
invoke free, edi
.elseif uMsg == WM_CHAR
invoke GetAsyncKeyState, VK_CONTROL ; allow clipboard works
.if !( eax & 80000000h )
mov eax, wParam
and eax, 0FFh
.if ( BYTE PTR [edi][eax] != TRUE) && !( eax == VK_BACK )
xor eax, eax
ret
.endif
.endif
.endif
return $invoke(CallWindowProc, ebx, hWnd, uMsg, wParam, lParam)
MaskedEditProc endp
|
|
|
Дата: Ноя 5, 2003 16:30:00 Да, где-то лежал у меня этот твой примерчик(MaskedEdit) сейчас посмотрю. |
|
|
Дата: Ноя 5, 2003 16:53:23 Four-F Нашёл в MaskedEdit баг, через буфер обмена можно вставить любой символ(фильтр не работает), это меня не устраивает :-( |
|
|
Дата: Ноя 5, 2003 17:48:38 Ребятки, а почему вы 'ловите' клавиатуру вместо WM_PASTE? Ведь это как раз то место где происходит обмен. А клавиатура - это просто ускоритель для WM_PASTE. Надо 'сесть' на WM_PASTE. Вынуть и проверить содержимое CLIPBOARD. Если что-то не так - изменить это содержимое и вставить назад в CLIPBOARD. А затем вызвать старую процедуру для WM_PASTE. |
|
|
Дата: Ноя 5, 2003 19:02:52 AsmGuru62 Неплохо было бы видеть пример кода я совершенно не врубаюсь, о каком CLIPBOARD'е идёт речь когда мы например просто печатаем символы с клавиатуры, хотя фильтровать мне нужно просто ввод и также ввод через буфер обмена. |
|
|
Дата: Ноя 5, 2003 19:04:43 |
|
|
Дата: Ноя 5, 2003 19:59:29 Спасибо, Four-F! Единственное что ещё осталось, проверять количество символов, хотя Edit их и ограничивает но не очень точно, например в ImpRec есть такой баг, там где вписывается OEP никогда не удастся вставить 8 символов "D" или "C", только 7 :-). |
|
|
Дата: Ноя 8, 2003 17:12:34 · Поправил: Asterix Продолжая тему про Edit Control возник у меня ещё один вопрос, как можно отследить выделен ли текст в Edit мышью, какое сообщение в связи с этим мне нужно отловить??
548726369__Edit.png |
|
|
Дата: Ноя 9, 2003 02:54:54 Asterix, ты пошёл не той дорогой. Глюк, ведь, связан не с выделением текста, а с обработкой WM_CHAR когда в эдите уже 8 символов. Медитируй! |
|
|
Дата: Ноя 9, 2003 04:06:32 Quantum Медитация тут вряд ли поможет ;-) Я думал просто если в Edit'е 8 символов то разрешать ввод только если в Edit'е есть выделенный текст. |
|
|
Дата: Ноя 9, 2003 04:29:05 Asterix Медитация тут вряд ли поможет ;-) А ты попробуй. Мне, вот, всегда помогает :-) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.067 |