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
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
Gracias por la respuesta...funcionó..por curiosidad dentro de un picture no funciona...eso es común no?..
saludos
Seguramente vas a tener que agregarle las coordenadas del picture a las del form.
Saludos