• Domingo 22 de Diciembre de 2024, 07:44

Autor Tema:  Texto Con Movimiento  (Leído 2120 veces)

Mr_Kracker

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Texto Con Movimiento
« en: Martes 14 de Septiembre de 2004, 03:12 »
0
Hola a todos, tengo un problema con la ventana about de un programa que estoy haciendo , lo que intento hacer es darle movimiento al texto que sale en la ventana (DE ABAJO HACIA ARRIBA), similar a como sale en el about del reproductor de MP3 "winamp" en la pestaña "creditos" para ser mas preciso, he podido traducir un codigo que baje en VB a asm que hace lo mismo, pero en el problema es que pasado unos 20 segundos empieza a fallar mi pc , las imagenes se distorcionan y en mi ventana about se agrandan las letras ¿? y no se por que? lo he examinado una y otra vez y no encuentro la falla. espero alguien pueda ayudarme. aqui les pego el codigo que he traducido

ESTA LA FUNCION QUE SE ENCARGA DE MI ABOUT
;========================================================
DlgFunc2 proc uses esi edi \
    hdlg:DWORD, msg:DWORD, wParam:DWORD, lParam:DWORD
LOCAL hBrush:DWORD
LOCAL hDC    :DWORD
LOCAL Ps     :PAINTSTRUCT

   mov eax, msg
      .if eax==WM_INITDIALOG
;LE DOY FORMA DE ELIPTICA A MI ABOUT
;=================================================
            invoke CreateEllipticRgn,0, 0, 290, 225
            invoke SetWindowRgn,hdlg,eax,TRUE
;=================================================
CALCULO EL HANDLE DEL CONTROL QUE CONTENDRA EL TEXTO EN MOVIMIENTO
            invoke GetDlgItem,hdlg,2012
            mov hSText,eax

;ACA CREO EL TIMER
;=================================================
            invoke SetTimer,hdlg,ID_TIMER,50,0
;=================================================

         .elseif eax == WM_TIMER
;ACA LLAMO A FUNCION QUE PINTA EL TEXTO Y CREO EL HDC
;=================================================
            invoke GetDC,hSText
            mov hDC,eax
            invoke SendMessage,hdlg,WM_ERASEBKGND,hDC,0 ; LIMPIO EL CONTROL
            invoke DibujarText,hSText,hDC
;=================================================
     .elseif eax==WM_CLOSE
;CHAU TIMER
            invoke KillTimer,hdlg,ID_TIMER
            invoke EndDialog, hdlg, 0
     .elseif eax==WM_COMMAND
            mov eax,wParam
            mov edx,eax
            shr edx,16
                .if dx==BN_CLICKED
                    .if ax==IDC_ICON1
                        invoke SendMessage,hdlg,WM_CLOSE,0,0
                    .endif
                .endif
          .else
            return 0
       .endif
   mov eax, 1
   ret
DlgFunc2 endp

ESTE ES EL PROCEDIMIENTO QUE LLAMA EL TIMER Y PINTA EL TEXTO DEL ABOUT
DibujarText proc hSTexa:DWORD, hDC:DWORD
    LOCAL Rct      :RECT
    LOCAL Ps       :PAINTSTRUCT
    LOCAL Font     :DWORD
   
    invoke GetClientRect,hSTexa,ADDR Rct
    dec mtop
    push mtop
    pop eax
    dec mbot
    push mbot
    pop edx
    mov Rct.top, eax
    mov Rct.bottom, edx
    invoke CreateFont,9,7,NULL,NULL,200,FALSE,NULL,NULL,DEFAULT_CHARSET,OUT_TT_PRECIS,CLIP_DEFAULT_PRECIS,
                      PROOF_QUALITY,DEFAULT_PITCH or FF_DONTCARE,addr FontName
    mov Font, eax

    invoke SelectObject,hDC,Font
    RGB 155,180,10   ;0,255,0
    invoke SetTextColor,hDC,EAX   ; shadow
    INVOKE SetBkMode,hDC,TRANSPARENT
;ScrollText CONTIENE EL TEXTO QUE SE DESPLIEGA EN EL ABOUT
    invoke DrawText, hDC, addr ScrollText, -1, addr Rct, DT_CENTER Or DT_WORDBREAK
    invoke DeleteObject,Font
    mov eax, mbot
    .if eax < 2
        push 250
        pop mtop
        push 350
        pop mbot
    .endif
    ret
DibujarText endp

BUENO ES TODO SI ALGUIEN NECESITA MAS INFO SOLO PIDALO PERO CREO ESTA CLARO, HE PENSADO QUE TAL VEZ LLAMAR EL PROCEDIMIENTO QUE PINTA EL TEXTO CON UN TIMER, NO SEA BUENA OPCION Y TALVEZ SE PUEDA HACER CREANDO UN HILO Y ESTE SEA EL ENCARGADO SE PINTAR EL TEXTO. EN FIN NECESITO AYUDA.............

SALUDOS Y GRACIAS DE ANTE MANO
 :comp:

psicobite

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Texto Con Movimiento
« Respuesta #1 en: Miércoles 27 de Octubre de 2004, 02:21 »
0
Bueno con un hilo se puede, pero solo voy a arreglar tu código ya traducido, he decidido quitar algunas cosas que no son importantes concentrándome en la parte que pinta el texto en la caja de dialogo y agregar las cosas que omitiste, como el valor de mtop, mbot, en que control pinta el texto, etc.; bueno en fin he escrito un pequeño programa para que sea mas fácil de comprender.-
   Aunque puede que tu código funcione si cambia lo que esta al final de DlgFunc2 que es:

mov eax, 1
ret

Por esto:

xor eax, eax
ret

que generalmente da error en los SO W2K, XP

                  chau…
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.