На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Бегущая строка , Как использовать этот код
    Здравствуйте. Помогите, пожалуйста, реализовать этот код в своей программе:

    ExpandedWrap disabled
      .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
      Ну, если код рабочий то только файл ресурса создать и прописать сборку или вы хотите, что бы за вас лабараторку сделали?
      P.S. Используйьте, RadAsm, WinAsm studio
      Сообщение отредактировано: sourceman -
        Просто как мне вызвать эту бегущую строку??
          P.P.S. Если нужен рабочий код, то вот здесь есть с объяснениями http://www.manhunter.ru/assembler/214_effe...assemblere.html
          А ваш код я бырому собрал и он не работает, пока не разобрался почему?! На Win 8.1 моей он по просту не срабатывает, т.к. не проходит проверку ОС.
          А на WinXP просто прозрачное окно.
              ExpandedWrap disabled
                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


              Убираем проверку.. Но строки то нет? :(
              Сообщение отредактировано: Andrello88 -
                ticker.asm
                ExpandedWrap disabled
                  ;----------------------------------------------------------------------
                  ; 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


                Файл ресурса

                ExpandedWrap disabled
                  #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


                Бат файл сборки

                ExpandedWrap disabled
                  @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, возможно где-то ошибся, т.к. не пишу уже давно на Ассемблере и мой пример собран из разных других плюс немного моего кода
                Сообщение отредактировано: sourceman -
                  Спасибо, сейчас гляну!!!
                  Блин, бегощей строки нет! :(
                  Сообщение отредактировано: Andrello88 -
                    #5 не подходит?
                      Цитата Filka @
                      #5 не подходит?

                      Не могу скачать, провайдер блокирует сайт!!!
                        Прикреплённый файлПрикреплённый файлtextscroller.rar (70,65 Кбайт, скачиваний: 130)
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0377 ]   [ 17 queries used ]   [ Generated: 3.05.24, 19:31 GMT ]