Problema con una función que hace el efecto aerosol....

Iniciado por juampivicius, 17 Febrero 2006, 07:54 AM

0 Miembros y 1 Visitante están viendo este tema.

juampivicius

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

Ironhorse

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:


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
Pégense una vuelta por Cracton :)

juampivicius

Gracias por la respuesta...funcionó..por curiosidad dentro de un picture  no funciona...eso es común no?..
saludos

Ironhorse

Seguramente vas a tener que agregarle las coordenadas del picture a las del form.

Saludos
Pégense una vuelta por Cracton :)