Título: Problema con una función que hace el efecto aerosol.... Publicado por: juampivicius en 17 Febrero 2006, 07:54 am Hola a todos...tengo una duda con un código..
/*code Option Explicit Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Const VK_LBUTTON = &H1 Private Type POINTAPI x As Long y As Long End Type Private Const EXPOSURE As Integer = 25 'puntos aprox. por click Private Const RADIUS As Integer = 10 'radio Private Const SPEED As Integer = 40 'pausa por impresion en ms Private Const COLOR As Long = 0 '&H3156C6 Private draw As Boolean, bStop As Boolean Private Sub main() Dim cursor As POINTAPI, i&, dc&, tmpX&, tmpY& Do DoEvents Call Sleep(SPEED) If draw Then If GetKeyState(VK_LBUTTON) < 0 Then Call GetCursorPos(cursor) For i = 1 To Sqr(EXPOSURE * RADIUS) 'Aerografo '-cuadrado imaginario tmpX = Fix(Rnd * RADIUS * 2) tmpY = Fix(Rnd * RADIUS * 2) '-circunsferencia imaginaria If Sqr((RADIUS - tmpX) ^ 2 + (RADIUS - tmpY) ^ 2) <= RADIUS Then PSet (cursor.x - tmpX + RADIUS, cursor.y - tmpY + RADIUS), COLOR End If Next End If End If Loop Until bStop End Sub Private Sub Check1_Click() If Check1.Value Then draw = True Else draw = False End If End Sub Private Sub Form_Load() Randomize Show DoEvents Call main End Sub Private Sub Form_Unload(Cancel As Integer) bStop = True End Sub */ Bueno el problema es que el efecto del aerosol se consigue y anda bien..pero el problema me lo da el VB con el cursor....porque tengo lo mismo hecho con la api SetpixelVI y en el form me dibuja bien sobre el cursor..pero acá o sobre otro obejto me dibuja más abajo del cursor..y la verdad no se cual es la causa....capaz es un bug..pero no se...si alguien lo puede ejecutar y ver le agraedceria capaz es mi Vb sólo..... saludos ..gracias Título: Re: Problema con una función que hace el efecto aerosol.... Publicado por: Ironhorse en 17 Febrero 2006, 22:50 pm El problema es que tenes las coordenadas del cursor absolutas (sobre la pantalla) y cuando dibujas un punto lo haces en una posicion relativa (sobre el formulario), cambiá esta linea:
Código: PSet (cursor.x - tmpX + RADIUS - Me.Left / Screen.TwipsPerPixelX, cursor.y - tmpY + RADIUS - Me.Top / Screen.TwipsPerPixelY - 20), COLOR La constante 20 es el alto de la barra de titulo de la ventana (mas o menos), ya la la propiedad Top no la tiene en cuenta. Saludos Título: Re: Problema con una función que hace el efecto aerosol.... Publicado por: juampivicius en 20 Febrero 2006, 07:45 am Gracias por la respuesta...funcionó..por curiosidad dentro de un picture no funciona...eso es común no?..
saludos Título: Re: Problema con una función que hace el efecto aerosol.... Publicado por: Ironhorse en 20 Febrero 2006, 19:41 pm Seguramente vas a tener que agregarle las coordenadas del picture a las del form.
Saludos |