![]() |
|
|
![]()
|
|
| cdman |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 1.2.2009 Где: Новосибирск Репутация: нет Всего: нет |
Привет всем, вот опять запарился с очередной проблемой.
В отладчике стоп ставлю на cmp KeyboardChar,dword ptr 0dh jnz WWE и никогда Z флаг не 1 ! Чего может быть ? Enter жму и тишина ... .686P .model flat,stdcall option casemap:none include C:\masm32\INCLUDE\ADVAPI32.INC include C:\masm32\include\windows.inc include C:\masm32\include\user32.inc include C:\masm32\include\kernel32.inc include C:\masm32\include\gdi32.inc include C:\masm32\include\comdlg32.inc include C:\masm32\include\shell32.inc include C:\masm32\include\masm32.inc includelib C:\masm32\lib\user32.lib includelib C:\masm32\lib\kernel32.lib includelib C:\masm32\lib\gdi32.lib includelib C:\masm32\lib\comdlg32.lib includelib C:\masm32\lib\shell32.lib includelib C:\masm32\lib\masm32.lib includelib C:\masm32\lib\advapi32.lib WinMain proto :DWORD,:DWORD,:DWORD,:DWORD RGB macro red,green,blue xor eax,eax mov ah,blue shl eax,8 mov ah,green mov al,red endm .const NULL equ 0 TRUE equ 1 FALSE equ 0 COLOR_BLACK equ 0 .data? KeyboardChar WPARAM ? hWndNumberTrade HWND ? hInstance HINSTANCE ? CommandLine LPSTR ? hBrushBkNumberTrade dd ? hGreyBrushBkNumberTrade dd ? hBlackBrushBkNumberTrade dd ? .data LenNumber dd 0 TextNumberTrade db 0 ClassName db "Base",0 StatClName db "static",0 EditClName db "edit",0 FormCaption db "Form",0 .code start: invoke GetModuleHandle,NULL mov hInstance,eax invoke GetCommandLine mov CommandLine,eax invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT invoke ExitProcess,eax WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD LOCAL wc:WNDCLASSEX LOCAL msg:MSG LOCAL hWnd:HWND xor eax,eax invoke CreateSolidBrush,eax mov wc.hbrBackground,eax mov wc.cbSize,SIZEOF WNDCLASSEX mov wc.style,CS_BYTEALIGNCLIENT mov wc.lpfnWndProc,offset WndProc mov wc.cbClsExtra,NULL mov wc.cbWndExtra,NULL push hInst pop wc.hInstance mov wc.lpszClassName,OFFSET ClassName invoke LoadIcon,NULL,IDI_APPLICATION mov wc.hIcon,eax mov wc.hIconSm,eax invoke LoadCursor,NULL,IDC_ARROW mov wc.hCursor,eax mov wc.lpszMenuName,0 invoke RegisterClassEx,addr wc invoke CreateWindowEx,WS_EX_TOPMOST,ADDR ClassName,ADDR FormCaption,WS_CAPTION or WS_SYSMENU or WS_MINIMIZEBOX,312,308,717,78,0,0,hInst,0 mov hWnd,eax invoke ShowWindow,hWnd,TRUE invoke UpdateWindow,hWnd .WHILE TRUE invoke GetMessage,ADDR msg,0,0,0 .BREAK .IF (!eax) invoke TranslateMessage,ADDR msg invoke DispatchMessage,ADDR msg .ENDW mov eax,msg.wParam ret WinMain endp ;----------------------------------------------------------------------------------------------------------------------------------------------------------------------- WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM .IF uMsg == WM_DESTROY invoke DeleteObject,hGreyBrushBkNumberTrade invoke DeleteObject,hBlackBrushBkNumberTrade invoke PostQuitMessage,NULL .ELSEIF uMsg == WM_CREATE ;Edit NumberTrade mov eax,eax invoke CreateWindowEx,0,ADDR EditClName,ADDR TextNumberTrade,WS_CHILD or WS_VISIBLE or ES_NUMBER or WS_BORDER,0,0,47,23,hWnd,1,hInstance,0 mov hWndNumberTrade,eax ;Устанавливаем максимальное кол-во симолов в байтах invoke SendMessage,hWndNumberTrade,EM_LIMITTEXT,3,0 ;Создаём кисти xor eax,eax invoke CreateSolidBrush,eax mov hBlackBrushBkNumberTrade,eax RGB 100,100,100 invoke CreateSolidBrush,eax mov hGreyBrushBkNumberTrade,eax mov hBrushBkNumberTrade,eax ;Устанавливаем фокус на Edit NumberTrade invoke SetFocus,hWndNumberTrade invoke RedrawWindow,hWndNumberTrade,0,0,RDW_INVALIDATE .ELSEIF uMsg == WM_CHAR ;102h mov eax,lParam cmp eax,hWndNumberTrade jnz WM_CHAR_Exit push wParam mov ecx,wParam mov edx,lParam pop KeyboardChar ; invoke RedrawWindow,hWndNumberTrade,0,0,RDW_INVALIDATE WM_CHAR_Exit: .ELSEIF uMsg == WM_CTLCOLOREDIT cmp KeyboardChar,dword ptr 0dh jnz YY xor eax,eax invoke ExitProcess,eax YY: mov eax,lParam cmp eax,hWndNumberTrade jnz WM_CTLCOLOREDIT_Exit ;Назначаем цвет фона Edit'а invoke SelectObject,wParam,hBrushBkNumberTrade invoke SetTextColor,wParam,0000ff00h ;0033FF67h invoke SetBkColor,wParam,TRANSPARENT ;У шрифта фон не нужен mov eax,hBrushBkNumberTrade ;Кладём в eax хендл кисти, который мы хотим применить к цвету фона WM_CTLCOLOREDIT_Exit: .ELSEIF uMsg == WM_COMMAND cmp KeyboardChar,dword ptr 0dh jnz WWE xor eax,eax invoke ExitProcess,eax WWE: mov eax,lParam cmp eax,hWndNumberTrade jnz WM_COMMAND_Exit cmp KeyboardChar,0dh jnz EM4 xor eax,eax invoke ExitProcess,eax ; invoke GetAsyncKeyState,0Dh ;проверяем не нажата ли клавиша Enter ; shl eax,1 ;cmp eax, -32767d ; jnc EM4 ;PushingEnter ; xor eax,eax ; invoke ExitProcess,eax EM4: ;Проверяем, какая длина введёного номера в Edit NumberTrade ; mov eax,hWndNumberTrade ;? invoke GetWindowTextLength,eax ;hWndNumberTrade mov LenNumber,eax or eax,eax jz EM1 mov eax,hBlackBrushBkNumberTrade cmp eax,hBrushBkNumberTrade jz EM3 jnz EM2 EM1: mov eax,hGreyBrushBkNumberTrade cmp eax,hBrushBkNumberTrade jz EM3 EM2: mov hBrushBkNumberTrade,eax push eax invoke RedrawWindow,hWndNumberTrade,0,0,RDW_INVALIDATE pop eax EM3: WM_COMMAND_Exit: .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax,eax ret WndProc endp end start Кстати, это прога не работает под Семёркой, поле редактирования чёрное ! У меня Семёрки нет, так бы в отладчике я быстро допёр, почему Edit некорректно отображается. Может кто попробует разобраться с этим косячком ? Если можно обойтись без сабклассинга, то было бы круто ! У кого какие мысли ? Кому охота повозиться, вот мой скайп: cdman__x Это сообщение отредактировал(а) cdman - 29.12.2010, 01:46 |
|||
|
||||
![]()
|
| Правила форума "Asm для Windows/DOS" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для Windows/Dos | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |