· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Сабклассинг Edit control'а.

. 1 . 2 . >>

Посл.отвђт Сообщен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

Пофиксил - лови.


594606978__MaskedEdit.rar


Дата: Ноя 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
Медитация тут вряд ли поможет ;-)
А ты попробуй. Мне, вот, всегда помогает :-)

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.067