Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2009, 22:58   #1
-=Hellsing-=
 
Регистрация: 31.01.2009
Сообщений: 5
Сообщение Часики на Ассемблере

Подскажите, как сделать убегающие часики на Ассемблере, к примеру, когда на них наводить мышкой, то они должны убегать от мышки. И еще у меня вопрос как сделать так, чтобы они отображались в окне программы, какая API нужна? Использования API wsprintf не помогает. Подскажите, что я делаю не правильно?
Цитата:
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
include shell32.inc
include comctl32.inc
include comdlg32.inc
includelib user32.lib
includelib kernel32.lib
includelib shell32.lib
includelib comctl32.lib
includelib comdlg32.lib

WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD

IDD_DIALOG equ 1000
.const

ClassName db 'DLGCLASS',0
AppName db 'Часики',0
szFormat db '"%04d-%02d-%02d %02d:%02d:%02d"',0
.data?

hInstance dd ?
CommandLine dd ?
hWnd dd ?

.code

start:

invoke GetModuleHandle,NULL
mov hInstance,eax
invoke GetCommandLine
invoke InitCommonControls
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

mov wc.cbSize,sizeof WNDCLASSEX
mov wc.style,CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc,offset WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,DLGWINDOWEXTRA
push hInst
pop wc.hInstance
mov wc.hbrBackground,COLOR_BTNFACE+1
mov wc.lpszMenuName,NULL
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
invoke RegisterClassEx,addr wc
invoke CreateDialogParam,hInstance,IDD_DIA LOG,NULL,addr WndProc,NULL
invoke ShowWindow,hWnd,SW_SHOWNORMAL
invoke UpdateWindow,hWnd
.while TRUE
invoke GetMessage,addr msg,NULL,0,0
.BREAK .if !eax
invoke TranslateMessage,addr msg
invoke DispatchMessage,addr msg
.endw
mov eax,msg.wParam
ret

WinMain endp

WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,l Param:LPARAM
LOCAL systime:SYSTEMTIME
LOCAL time [2048]: BYTE

mov eax,uMsg
.if eax==WM_INITDIALOG
push hWin
pop hWnd
.elseif eax==WM_COMMAND
invoke GetLocalTime, addr systime
movzx eax, systime.wSecond
push eax
movzx eax, systime.wMinute
push eax
movzx eax, systime.wHour
push eax
movzx eax, systime.wDay
push eax
movzx eax, systime.wMonth
push eax
movzx eax, systime.wYear
push eax

push offset szFormat
lea eax,time
push eax
call wsprintf


; .elseif eax==WM_SIZE
.elseif eax==WM_CLOSE
invoke DestroyWindow,hWin
.elseif uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.else
invoke DefWindowProc,hWin,uMsg,wParam,lPar am
ret
.endif
xor eax,eax
ret

WndProc endp
end start
-=Hellsing-= вне форума Ответить с цитированием
Старый 31.01.2009, 23:20   #2
r9m
₪₪₪₪₪₪₪₪
Форумчанин
 
Аватар для r9m
 
Регистрация: 16.04.2007
Сообщений: 471
По умолчанию

Нужно чтобы форма уходила из под курсора мыши? Если да то делай примерно вот так:

• В цикле получай дескриптор окна под курсором (API:WindowFromPoint)
• Сравнивай заголовок окна с эталонным (своим)
• Если окно имеет эталонный заголовок значит это твоё окно
• Передвигай его функцией MoveWindow
• Если заголовок с твоим не совпадает то
• Пропускаем такое окно

Последний раз редактировалось r9m; 31.01.2009 в 23:40.
r9m вне форума Ответить с цитированием
Старый 01.02.2009, 01:06   #3
-=Hellsing-=
 
Регистрация: 31.01.2009
Сообщений: 5
По умолчанию

r9m
Спасибо за помощь, буду пробовать.
Но все-таки, что не хватает в моей пороге, чтобы она отображала часики в окне? Что не так....
-=Hellsing-= вне форума Ответить с цитированием
Старый 01.02.2009, 07:24   #4
r9m
₪₪₪₪₪₪₪₪
Форумчанин
 
Аватар для r9m
 
Регистрация: 16.04.2007
Сообщений: 471
По умолчанию

вот часики:

файл clock.asm
Код:
.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive

include clock.inc

.code

start:

	invoke GetModuleHandle,NULL
	mov		hInstance,eax

    invoke InitCommonControls
	invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL
	invoke ExitProcess,0

TimerFunc proc	handle:HWND, uMSG:UINT, idEvent:UINT, dwTime:DWORD
	

	invoke GetLocalTime,addr TIME
	
	invoke wsprintf,addr h_buffer,addr format,TIME.wHour
	invoke wsprintf,addr m_buffer,addr format,TIME.wMinute
	invoke wsprintf,addr s_buffer,addr format,TIME.wSecond
	
	
	invoke SetDlgItemText,handle,1001,addr h_buffer
	invoke SetDlgItemText,handle,1002,addr m_buffer
	invoke SetDlgItemText,handle,1003,addr s_buffer
	
	ret

TimerFunc endp
DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

	mov		eax,uMsg
	.if eax==WM_INITDIALOG
	invoke SetTimer,hWin,6677,1000,addr TimerFunc

	.elseif eax==WM_COMMAND

	.elseif eax==WM_CLOSE
		invoke EndDialog,hWin,0
	.else
		mov		eax,FALSE
		ret
	.endif
	mov		eax,TRUE
	ret

DlgProc endp

end start
файл clock.inc
Код:

include windows.inc
include kernel32.inc
include user32.inc
include Comctl32.inc
include shell32.inc

includelib kernel32.lib
includelib user32.lib
includelib Comctl32.lib
includelib shell32.lib

DlgProc			PROTO	:HWND,:UINT,:WPARAM,:LPARAM

.const

IDD_DIALOG1			equ 101

.data
format db " %d ",00h

.data?
TIME	SYSTEMTIME <>
hInstance			dd ?
h_buffer db 20 dup (?)
m_buffer db 20 dup (?)
s_buffer db 20 dup (?)
result_buffer db 20 dup (?)

проект для RadAsm в атаче.
Вложения
Тип файла: rar clock.rar (3.5 Кб, 51 просмотров)
r9m вне форума Ответить с цитированием
Старый 01.02.2009, 11:56   #5
-=Hellsing-=
 
Регистрация: 31.01.2009
Сообщений: 5
По умолчанию

Спасибо r9m , разобрался!!! Я понял, в чем была моя ошибка.
Надо было указать для API wsprintf указатель на buffer, и с помощью API
SetDlgItemText указать, в каком окне отображать минуты и секунды.
-=Hellsing-= вне форума Ответить с цитированием
Старый 06.02.2009, 23:50   #6
-=Hellsing-=
 
Регистрация: 31.01.2009
Сообщений: 5
По умолчанию

Не хочу, создавать новую тему спрашиваю в этой. Как правильно скомпилировать программу с ключом Zi для получения файла .PDB чтобы потом в OLLYDBG на вкладке S можно было увидеть исходник программы?
Изменение 3,O,$B\ML.EXE /c /coff /Cp /nologo /I"$I",2 на 3,O,$B\ML.EXE /c / Zi /Cp /nologo /I"$I",2 не приносит результатов, программа не компилируется.

Последний раз редактировалось -=Hellsing-=; 07.02.2009 в 10:40.
-=Hellsing-= вне форума Ответить с цитированием
Старый 07.02.2009, 02:42   #7
r9m
₪₪₪₪₪₪₪₪
Форумчанин
 
Аватар для r9m
 
Регистрация: 16.04.2007
Сообщений: 471
По умолчанию

RadASM ?
Там пробел не нужно ставить. Вот так:

Код:
3,O,$B\ML.EXE /c /coff /Cp /nologo /I"$I",2 на 3,O,$B\ML.EXE /c /Zi /Cp /nologo /I"$I",2
А желательно даже вот так:

3,O,$B\ML.EXE /c /coff /Cp /Zi /Zf /Zd /nologo /I"$I",2
5,O,$B\LINK.EXE /SUBSYSTEM:WINDOWS /DEBUG /VERSION:4.0 /LIBPATH:"$L" /OUT:"$5",3,4

потом в оле View | Source Files

Последний раз редактировалось r9m; 07.02.2009 в 03:00.
r9m вне форума Ответить с цитированием
Старый 07.02.2009, 11:14   #8
-=Hellsing-=
 
Регистрация: 31.01.2009
Сообщений: 5
По умолчанию

Респект, r9m спасибо за помощь!!!!!!!
-=Hellsing-= вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зацените Часики. Vemer Софт 2 01.02.2009 11:08
Иконка в системном трее (там, где часики) Македонский Win Api 6 22.12.2008 18:03
Задачка про часики. RealSHELS Паскаль, Turbo Pascal, PascalABC.NET 2 13.09.2008 18:17