Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Boton tres posiciones

Estas en el tema de Boton tres posiciones en el foro de Visual Basic clásico en Foros del Web. Enviado - 24/5/2006 Necesito crear un botón de tres posiciones. posicion uno(izquierda posicion dos (arriba) posicion tres (derecha) para cuando click con el raton, leer ...
  #1 (permalink)  
Antiguo 24/05/2006, 08:48
 
Fecha de Ingreso: mayo-2006
Mensajes: 29
Antigüedad: 18 años
Puntos: 0
Boton tres posiciones

Enviado - 24/5/2006

Necesito crear un botón de tres posiciones.
posicion uno(izquierda
posicion dos (arriba)
posicion tres (derecha)
para cuando click con el raton, leer la posicion por el programa y ejecutar un case.
Alguien puede ayudar...?
Thank's
  #2 (permalink)  
Antiguo 24/05/2006, 16:47
Avatar de piojoman  
Fecha de Ingreso: enero-2005
Ubicación: Argentina
Mensajes: 224
Antigüedad: 19 años, 3 meses
Puntos: 3
A decir verdad no entendi bien lo que pedis.... pero interprete que queres "definir" regiones a un botón para que cuando presiones en la parte superior haga algo, en la inferior otra y sucesivamente??.....

si es eso aca dejo un ejemplo

Dim ValX As Single, ValY As Single
Private Sub Command1_Click()
Dim Boton As Byte

If (ValY >= 0) And (ValY <= (Command1.Height / 2)) Then 'Los If determinan las regiones
Boton = 1 'Referencia para boton arriba
Else
If (ValY > (Command1.Height / 2)) And (ValX >= 0) And (ValX < (Command1.Width / 2)) Then
Boton = 2 'Referencia para el boton de la Izquierda
Else
Boton = 3 'Referencia para el boton de la derecha
End If
End If

Select Case Boton
Case 1
MsgBox "Arriba" '<Aca va el codigo para cuando se presiona en la parte superior>...
Case 2
MsgBox "Abajo izq" '<Aca va el codigo para cuando se presiona en la parte inferior - izquierda>...
Case Else
MsgBox "Abajo dcha" '<Aca va el codigo para cuando se presiona en la parte inferior - derecha>...
End Select

' Podria haber declarado a Boton como una variable del tipo String y asignarle
' palabras en vez de numeros, 1 para la parte sup. 2 para la inf-izq y 3 para inf-dcha.,
' seria más fácil entenderlo pero derrochamos recursos, porque sabemos que los tipos
' String son en realidad un arreglo de Caracteres, lo que hace que estemos malgastando
' infinita veces una variable.
End Sub

Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
ValX = X
ValY = Y
End Sub


Si redimensionamos el boton, automaticamente tomara los valores de la region
aunque podemos definirlos manualmente si queremos...

*Para ver lo que hace este ejemplo solo es necesario Colocar un boton llamado Command1 y ejecutar con F5

Bye!!!
  #3 (permalink)  
Antiguo 25/05/2006, 08:02
 
Fecha de Ingreso: mayo-2006
Mensajes: 29
Antigüedad: 18 años
Puntos: 0
Piojoman, tu ejemplo es maginifico, aunque para utilizarlo tendría que adaptarlo. Yo quería hacer un botón tipo rotatorio.
Podría ser un circulo grande con tres botones incrustados (derecha, arriba,izquierda) y un rectangulo a modo de verificador visual tambien dentro del circulo y en posición inicial vertical. Al pulsar por ejmplo el boton izquierda, el rectangulo tendría que cambiar a la posición horizontal izqda, al pulsar boton drcha, el rectángulo cambiaría a la posicion horizontal dercha y al pulsar el boton arriba, el rectangulo volvería a su posición inicial. Esto lo se hacer; pero este tipo de boton tengo que introducirlo en un formulario y es aquí donde me pierdo pues no se como acceder a sus propiedades para recoger sus posiciones por el programa. Lo pretendo utilizar como un OCX pues debo poner mas de 20 replicas de este tipo de boton dentro del formulario del programa. Si introduzco este control en el formulario y le llamo boton1 cuando pique en el (por ejemplo derecha) el programa preguntará ¿que posicion tiene el boton1? A partir de ahi el programa ejecutara el código correspondiente. Si introduzco varios controles (boton1, boton2; etc..) y picando en ellos les doy distintas posiciones, el programa preguntará que posicion tiene el boton1?, y el boton2, etc...
No se si me he explicado bien, pero bueno si me puedes seguir ayudando....
Saludos
  #4 (permalink)  
Antiguo 25/05/2006, 11:21
Avatar de piojoman  
Fecha de Ingreso: enero-2005
Ubicación: Argentina
Mensajes: 224
Antigüedad: 19 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
  #5 (permalink)  
Antiguo 29/05/2006, 08:44
 
Fecha de Ingreso: mayo-2006
Mensajes: 29
Antigüedad: 18 años
Puntos: 0
Sigue la info

Hola Piojoman
Imaginate un circuito de agua y una llave de paso.
Pues bien, yo creo un Proyecto en VB, llamémosle Proyecto1.
Agrego un formulario, llamémosle Form1.
Agrego un Control de usuario, llamémosle UserControl1. Este control
es el que luego pretendo usar despues en el formulario.
Este control se compone de un Shape circulo. Dentro del circulo estan tres botones,
BtnIzquierda, BtnDerecha, BtnCerrado y tres Shapes mas en forma de rectángulo para
indicar la dirección que tomaría el agua si pulso algun boton (a los cuales les podemos
llamar VerfCerrado, VerfIzqda, VerfDcha). Al inicializarse el UserControl el VerfCerrado.Visible
estará en True y los demas en False.
Si pulso en el BtnDerecha el Shape VerfDcha.Visible = true y los demas en False.
Si pulso en el BtnIzquierda, VerfIzqda.Visible en true y los demas en False, etc...

Private Sub BtnCerrado_Click()
VerfCerrado.Visible = True
VerfDcha.Visible = False
VerfIzqda.Visible = False
End Sub

Private Sub BtnDerecha_Click()
VerfCerrado.Visible = False
VerfDcha.Visible = True
VerfIzqda.Visible = False
End Sub

Private Sub BtnIzquierda_Click()
VerfCerrado.Visible = False
VerfDcha.Visible = False
VerfIzqda.Visible = True
End Sub

Private Sub UserControl_Initialize()
VerfCerrado.Visible = True
VerfDcha.Visible = False
VerfIzqda.Visible = False
End Sub

Despues introduzco este UserControl1 en Form1 y le llamo Llave1. Dibujo a su lado
derecho una Line que puedo llamar Line1 y a su lado izquierda otra Line que puedo llamar Line2.
Yo pretendo que al pulsar el BtnDerecha de Llave1 me coloree la Line1 de rojo por ejemplo.
Si pulso el BtnIzquierda de Llave1 me coloree Line2 de rojo y si pulso BtnCerrado se cierra el
circuito y se colorearían las dos Lines de negro otra vez.

Lo que no consigo hacer es recoger en Form1 los eventos generados al pulsar en los botones de Llave1
para que me coloree Line1 ó Line2

Agradezco tu gran paciencia conmigo pues soy novato en VB.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:18.