Ver Mensaje Individual
  #4 (permalink)  
Antiguo 25/05/2006, 11:21
Avatar de piojoman
piojoman
 
Fecha de Ingreso: enero-2005
Ubicación: Argentina
Mensajes: 224
Antigüedad: 20 años, 3 meses
Puntos: 3
Bueno ya esta, creo que te entendi un 100% veamos...
Puse un dibujo de como me queda a mi, fijate si eso es!!!.

Te comento que se me quemaron las papas varias veces pero porque no acordaba cosas de matematicas, pero eso es drama mio nomas .
Bueno, lo primero es saber que ahora no trabajo mas con un boton, sino con un PictureBox llamado Boton, Esto es porque cuando queremos mover el boton el Picture movera automaticamente el resto de los objeto que contiene y nos ahorra mucho trabajo ... Despues estableci un Circulo(Shape1) que hara de limite del boton, para el programa es necesario saber si el cursor se encuentra dentro del circulo o fuera, eso se puede averiguar sacando la distancia entre dos puntos o pitagoras (Hasta que me di cuenta, habia descubierto que tambien se podia hacer con la raiz cuadrada de (1 - X^2) y tomando el dominio e imagen de la funcion entre -1 y 1 y luego la funcion negativa para el resto del circulo pero es ultra complejo) de esta forma queda saber si se anda por una region delimitada como en el ejemplo anterior del boton...


Imagen de como me quedo a mi

Aca va el ejemplo completo...
'<....... .......>
Dim Habilitado As Boolean, Ind As Byte
Dim PosX As Single, PosY As Single, CEX As Single, CEY As Single, CANT As Single
Private Sub Boton_Click(Index As Integer)
If (Habilitado = True) Then
If PosY <= CEY Then
Shape2(Index).Left = LArriba(Index).Left - 120 'Que tome la pos Left del label
Shape2(Index).Top = LArriba(Index).Top
Else
If PosX >= CEX Then
Shape2(Index).Left = LDcha(Index).Left - 120 'Que tome la pos Left del label
Shape2(Index).Top = LDcha(Index).Top
Else
Shape2(Index).Left = LIzq(Index).Left - 120 'Que tome la pos Left del label
Shape2(Index).Top = LIzq(Index).Top
End If
End If
End If
End Sub
Private Sub Boton_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
PosX = X 'Coordenadas del cursor en el Picture
PosY = Y
CEX = Shape1((Index)).Height / 2 'El X del CEntro del Circulo; Ademas establece la medida del Radio del Circulo
CEY = Shape1((Index)).Width / 2 'El Y del Centro del Circulo

If CEX >= Sqr((CEX - X) ^ 2 + (CEY - Y) ^ 2) Then 'Use solo fórmula de distancia a dos puntos o pitagoras
Habilitado = True 'Dice si estas dentro del circulo
Else
Habilitado = False
End If

End Sub
'<..... ..........>
Falta decir que esto es para un control, vos esto lo queres varias veces no?, ok, lo que tenes que hacer es crear el Control Picture, llamado Boton como una matriz de controles, o sea crea un copia del Picture y llamalo de la misma forma en ese instante vb te pedira si queres convertir a matriz de controles y le pones que si, esto te permite crear muchos controles...

para crear controles de forma dinamica agrega lo siguiente
Private Sub Btn_Generar_Click()
Load Boton(Ind + 1)
Ind = Ind + 1

With Boton(Ind)
.Visible = True
.Left = 500
.Top = 1200
End With
End Sub

Private Sub Form_Load()
Ind = 0
End Sub