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