Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.142.197.212] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте. Помогите, пожалуйста, реализовать этот код в своей программе:
.const OUT_WIDTH equ 40 OUT_HEIGHT equ 14 OUT_X equ 20 OUT_Y equ 20 ABOUT_TXT equ 0000000h SCROll_TXT equ 0000000h WS_EX_LAYERED equ 80000h LMA_ALPHA equ 2 GRADIENT equ 2d .data font db "ms sans serif",0 dbCaption db " BLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA " dbCaption1 db "BLAAAAAAAAA",0 dbSLWA db "SetLayeredWindowAttributes",0 dbUser32 db "user32.dll",0 rCaptRct RECT <OUT_X,OUT_Y,OUT_X+OUT_WIDTH,OUT_Y+OUT_HEIGHT> .data? hfont dd ? memdc dd ? rectW dd ? ttread dd ? .code TextOutput proc hWn:DWORD LOCAL x:DWORD, y:DWORD, col:DWORD xor eax,eax mov ebx,SCROll_TXT ;sub ebx,ABOUT_FRAME mov ecx,GRADIENT mov esi,3 @@: mov al,bl shr ebx,8 cdq idiv ecx mov byte ptr col,al ror col,8 dec esi jnz @B shr col,8 mov edi,SCROll_TXT mov eax,col imul eax,GRADIENT sub edi,eax mov esi,rectW dec esi paint: invoke BitBlt,memdc,esi,0,1,OUT_HEIGHT,memdc,0,0,SRCCOPY invoke BitBlt,memdc,0,0,esi,OUT_HEIGHT,memdc,1,0,SRCCOPY ; fade out mov x,0 @11: mov y,0 @21: invoke GetPixel,memdc,x,y .if eax!=0 sub eax,col invoke SetPixel,memdc,x,y,eax .endif inc y cmp y,OUT_HEIGHT jl @21 inc x cmp x,GRADIENT jl @11 ;fade in init mov y,0 @@: invoke GetPixel,memdc,OUT_WIDTH,y .if eax!=0 invoke SetPixel,memdc,OUT_WIDTH,y,edi .endif inc y cmp y,OUT_HEIGHT jl @B ; fade in mov eax,OUT_WIDTH sub eax,GRADIENT mov x,eax @12: mov y,0 @22: invoke GetPixel,memdc,x,y .if eax!=0 add eax,col invoke SetPixel,memdc,x,y,eax .endif inc y cmp y,OUT_HEIGHT jl @22 inc x cmp x,OUT_WIDTH jl @12 invoke InvalidateRect,hWn,addr rCaptRct,0 invoke Sleep,30d jmp paint ret TextOutput endp ShowThread proc hWin:DWORD LOCAL hSLWA:DWORD invoke LoadLibrary,addr dbUser32 ; for Win98 support (not to keep this func in import) mov esi,eax invoke GetProcAddress,esi,addr dbSLWA mov hSLWA,eax invoke FreeLibrary,esi mov ecx,10 showloop: push ecx push LMA_ALPHA push ecx push 0 push hWin call hSLWA invoke Sleep,1 pop ecx inc cl jnz showloop invoke GetWindowLong,hWin,GWL_EXSTYLE mov ebx,WS_EX_LAYERED not ebx and eax,ebx invoke SetWindowLong,hWin,GWL_EXSTYLE,eax ret ShowThread endp Show proc hWin:DWORD invoke GetVersion ; is XP or 2000 .if al==5 invoke GetWindowLong,hWin,GWL_EXSTYLE or eax,WS_EX_LAYERED invoke SetWindowLong,hWin,GWL_EXSTYLE,eax invoke CreateThread,NULL,NULL,addr ShowThread,hWin,NULL,NULL .endif ret Show endp |
Сообщ.
#2
,
|
|
|
Ну, если код рабочий то только файл ресурса создать и прописать сборку или вы хотите, что бы за вас лабараторку сделали?
P.S. Используйьте, RadAsm, WinAsm studio |
Сообщ.
#3
,
|
|
|
Просто как мне вызвать эту бегущую строку??
|
Сообщ.
#4
,
|
|
|
P.P.S. Если нужен рабочий код, то вот здесь есть с объяснениями http://www.manhunter.ru/assembler/214_effe...assemblere.html
А ваш код я бырому собрал и он не работает, пока не разобрался почему?! На Win 8.1 моей он по просту не срабатывает, т.к. не проходит проверку ОС. А на WinXP просто прозрачное окно. |
Сообщ.
#6
,
|
|
|
Show proc hWin:DWORD invoke GetWindowLong,hWin,GWL_EXSTYLE or eax,WS_EX_LAYERED invoke SetWindowLong,hWin,GWL_EXSTYLE,eax invoke CreateThread,NULL,NULL,addr ShowThread,hWin,NULL,NULL ret Show endp Убираем проверку.. Но строки то нет? |
Сообщ.
#7
,
|
|
|
ticker.asm
;---------------------------------------------------------------------- ; ticker.asm ;---------------------------------------------------------------------- .386 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc include \masm32\include\gdi32.inc include \masm32\include\shell32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\shell32.lib ;---------------------------------------------------------------------- ; ;---------------------------------------------------------------------- TickerProc PROTO :HWND, :UINT, :WPARAM, :LPARAM Show PROTO :DWORD .const OUT_WIDTH equ 40 OUT_HEIGHT equ 14 OUT_X equ 20 OUT_Y equ 20 ABOUT_TXT equ 0000000h SCROll_TXT equ 0000000h WS_EX_LAYERED equ 80000h LMA_ALPHA equ 2 GRADIENT equ 2d ; DIALOG TICKER equ 1 .data font db "ms sans serif",0 dbCaption db " BLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA " dbCaption1 db "BLAAAAAAAAA",0 dbSLWA db "SetLayeredWindowAttributes",0 dbUser32 db "user32.dll",0 rCaptRct RECT <OUT_X,OUT_Y,OUT_X+OUT_WIDTH,OUT_Y+OUT_HEIGHT> .data? hfont dd ? memdc dd ? rectW dd ? ttread dd ? hInstance dd ? hWnd dd ? .code start: invoke GetModuleHandle, NULL mov hInstance, eax invoke DialogBoxParam, eax, TICKER, hWnd, addr TickerProc, NULL invoke ExitProcess, NULL ;---------------------------------------------------------------------- ; ;---------------------------------------------------------------------- TickerProc PROC hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM .if uMsg==WM_CLOSE invoke EndDialog, hWnd, NULL .elseif uMsg==WM_INITDIALOG invoke Show, hWnd ret .elseif uMsg==WM_COMMAND ret .else mov eax, FALSE ret .endif mov eax, TRUE ret TickerProc ENDP ; ; Ниже код бегущей строки ; ; TextOutput proc hWn:DWORD LOCAL x:DWORD, y:DWORD, col:DWORD xor eax,eax mov ebx,SCROll_TXT ;sub ebx,ABOUT_FRAME mov ecx,GRADIENT mov esi,3 @@: mov al,bl shr ebx,8 cdq idiv ecx mov byte ptr col,al ror col,8 dec esi jnz @B shr col,8 mov edi,SCROll_TXT mov eax,col imul eax,GRADIENT sub edi,eax mov esi,rectW dec esi paint: invoke BitBlt,memdc,esi,0,1,OUT_HEIGHT,memdc,0,0,SRCCOPY invoke BitBlt,memdc,0,0,esi,OUT_HEIGHT,memdc,1,0,SRCCOPY ; fade out mov x,0 @11: mov y,0 @21: invoke GetPixel,memdc,x,y .if eax!=0 sub eax,col invoke SetPixel,memdc,x,y,eax .endif inc y cmp y,OUT_HEIGHT jl @21 inc x cmp x,GRADIENT jl @11 ;fade in init mov y,0 @@: invoke GetPixel,memdc,OUT_WIDTH,y .if eax!=0 invoke SetPixel,memdc,OUT_WIDTH,y,edi .endif inc y cmp y,OUT_HEIGHT jl @B ; fade in mov eax,OUT_WIDTH sub eax,GRADIENT mov x,eax @12: mov y,0 @22: invoke GetPixel,memdc,x,y .if eax!=0 add eax,col invoke SetPixel,memdc,x,y,eax .endif inc y cmp y,OUT_HEIGHT jl @22 inc x cmp x,OUT_WIDTH jl @12 invoke InvalidateRect,hWn,addr rCaptRct,0 invoke Sleep,30d jmp paint ret TextOutput endp ShowThread proc hWin:DWORD LOCAL hSLWA:DWORD invoke LoadLibrary,addr dbUser32 ; for Win98 support (not to keep this func in import) mov esi,eax invoke GetProcAddress,esi,addr dbSLWA mov hSLWA,eax invoke FreeLibrary,esi mov ecx,10 showloop: push ecx push LMA_ALPHA push ecx push 0 push hWin call hSLWA invoke Sleep,1 pop ecx inc cl jnz showloop invoke GetWindowLong,hWin,GWL_EXSTYLE mov ebx,WS_EX_LAYERED not ebx and eax,ebx invoke SetWindowLong,hWin,GWL_EXSTYLE,eax ret ShowThread endp Show proc hWin:DWORD invoke GetVersion ; is XP or 2000 .if al==5 invoke GetWindowLong,hWin,GWL_EXSTYLE or eax,WS_EX_LAYERED invoke SetWindowLong,hWin,GWL_EXSTYLE,eax invoke CreateThread,NULL,NULL,addr ShowThread,hWin,NULL,NULL .endif ret Show endp end start Файл ресурса #define DS_CENTER 0x0800L #define WS_POPUPWINDOW (WS_POPUP | \ WS_BORDER | \ WS_SYSMENU) #define TICKER 1 #define WS_VISIBLE 0x10000000L #define WS_EX_TOOLWINDOW 0x00000080L #define WS_EX_TOPMOST 0x00000008L #define WS_POPUP 0x80000000L #define WS_BORDER 0x00800000L #define WS_SYSMENU 0x00080000L TICKER DIALOG 0, 0, 400, 500 STYLE 0x0004 | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE EXSTYLE WS_EX_TOOLWINDOW | WS_EX_TOPMOST CAPTION "Ticker" FONT 9, "Arial" BEGIN END Бат файл сборки @echo off \masm32\bin\rc /v rsrc.rc \masm32\bin\cvtres /machine:ix86 rsrc.res \masm32\bin\ml /c /coff ticker.asm \masm32\bin\Link /SUBSYSTEM:WINDOWS ticker.obj rsrc.res echo. echo SUCCESSFULLY... pause Использую MASM32, возможно где-то ошибся, т.к. не пишу уже давно на Ассемблере и мой пример собран из разных других плюс немного моего кода |
Сообщ.
#8
,
|
|
|
Спасибо, сейчас гляну!!!
Блин, бегощей строки нет! |
Сообщ.
#9
,
|
|
|
#5 не подходит?
|
Сообщ.
#10
,
|
|
|
Цитата Filka @ #5 не подходит? Не могу скачать, провайдер блокирует сайт!!! |
Сообщ.
#11
,
|
|
|
Прикреплённый файлtextscroller.rar (70,65 Кбайт, скачиваний: 130)
|