Hola, para mover un picturebox (o cualquier otra cosa) con el ratón, utilicé el evento picturebox_mouseDrag() y simplemente asigné mouse.X y mouse.Y a mi picturebox.X y picturebox.Y respectivamente.
Pero eso hace que el picturebox tiemble de un lado para otro rápidamente ¿Cómo es la manera correcta de hacer esto?
Gracias.
Mover Un Picturebox Con El Ratón
Objetivo: Re: Mover Un Picturebox Con El Ratón
última edición por vuott el Miercoles, 22 Julio 2015, 20:07; editado 3 veces
Te señalo esta pagina (mover sin Drag&Drop) con ejemplos que escribi en el WIKI del foro italiano de los programadores Gambas:
http://www.gambas-it.org/wiki/index...a_Drag_%26_Drop
En partiicular alli lee el paragrafo: " Spostamento con riferimento alla posizione del cursore del mouse rispetto al contenitore "
http://www.gambas-it.org/wiki/index...a_Drag_%26_Drop
En partiicular alli lee el paragrafo: " Spostamento con riferimento alla posizione del cursore del mouse rispetto al contenitore "
última edición por vuott el Miercoles, 22 Julio 2015, 20:07; editado 3 veces
Objetivo: Re: Mover Un Picturebox Con El Ratón
Gracias, funciona perfectamente, ahora sólo me falta entender por qué
Objetivo: Re: Mover Un Picturebox Con El Ratón
última edición por v3ctor el Jueves, 23 Julio 2015, 00:50; editado 2 veces
buenas,
che vuott vi el codigo asi de apuro, al toque, y lo que me llamo la atencion en la propiedad tag es que es un array
la propiedad tag se puede usar un array de palabras o números?
la propiedad tag es de tipo variant?
Property Tag As Variant
Devuelve o establece una etiqueta para el control .
Esta propiedad se destina para el programador y nunca es utilizado por el componente.
Puede contener cualquier Valor tipo Variant.
jajajaj tanto tiempo y recién hoy me doy cuenta que en la propiedad tag se pueden guardar decenas de datos con array lo cual es sustancial pues se puede manipular infinidad de situaciones.
hoy aprendí algo nuevo jajajj, gracias vuott.
Public Sub Form_Open()
Button1.Tag = [0, 0]
End
Public Sub Button1_MouseDown()
With Button1
.Tag[0] = Mouse.X
.Tag[1] = Mouse.Y
End With
End
Public Sub Button1_MouseMove()
' Il "Button" sarà posizionata in questo caso, rispetto al cursore del Mouse, alle coordinate come appresso determinate:
With Button1
.X = Mouse.ScreenX - Me.ScreenX - .Tag[0]
.Y = Mouse.ScreenY - Me.ScreenY - .Tag[1]
End With
End
che vuott vi el codigo asi de apuro, al toque, y lo que me llamo la atencion en la propiedad tag es que es un array
la propiedad tag se puede usar un array de palabras o números?
la propiedad tag es de tipo variant?
Property Tag As Variant
Devuelve o establece una etiqueta para el control .
Esta propiedad se destina para el programador y nunca es utilizado por el componente.
Puede contener cualquier Valor tipo Variant.
jajajaj tanto tiempo y recién hoy me doy cuenta que en la propiedad tag se pueden guardar decenas de datos con array lo cual es sustancial pues se puede manipular infinidad de situaciones.
hoy aprendí algo nuevo jajajj, gracias vuott.
Public Sub Form_Open()
Button1.Tag = [0, 0]
End
Public Sub Button1_MouseDown()
With Button1
.Tag[0] = Mouse.X
.Tag[1] = Mouse.Y
End With
End
Public Sub Button1_MouseMove()
' Il "Button" sarà posizionata in questo caso, rispetto al cursore del Mouse, alle coordinate come appresso determinate:
With Button1
.X = Mouse.ScreenX - Me.ScreenX - .Tag[0]
.Y = Mouse.ScreenY - Me.ScreenY - .Tag[1]
End With
End
última edición por v3ctor el Jueves, 23 Julio 2015, 00:50; editado 2 veces
Objetivo: Re: Mover Un Picturebox Con El Ratón
Cuesta entender el uso de la propiedad tag para otras cosas que no sean las habituales, por ejemplo índices.
Viene de costumbres de Visual Basic
Todo es cuestión de comenzar a probar cosas con la propiedad tag y ver usos distintos.
Lo que no podemos cambiar es nuestra mente, sobre todo si no está acostumbrada.
En ese caso hay que hacer un poco de yoga y ver mas allá de lo de siempre..no creo que
pueda, cuando no es el ruido de una obra, es el ruido de una moto, el ruido de una carpintería..
alguien que da un grito..auunnn, auuun, la madre que los parió!.
Una canción decía.."Quiero una motocicleta.."...pues yo digo..."Quiero una metralletaaaa..."
Saludos
Viene de costumbres de Visual Basic
Todo es cuestión de comenzar a probar cosas con la propiedad tag y ver usos distintos.
Lo que no podemos cambiar es nuestra mente, sobre todo si no está acostumbrada.
En ese caso hay que hacer un poco de yoga y ver mas allá de lo de siempre..no creo que
pueda, cuando no es el ruido de una obra, es el ruido de una moto, el ruido de una carpintería..
alguien que da un grito..auunnn, auuun, la madre que los parió!.
Una canción decía.."Quiero una motocicleta.."...pues yo digo..."Quiero una metralletaaaa..."
Saludos
Objetivo: Re: Mover Un Picturebox Con El Ratón
Lo puse como me dijiste en el wiki (solo que lo cambié al estilo novato porque estoy más acostumbrado), como decía, funciona perfectamente, pero lo que no entiendo es por qué no se dispara el evento mousemove si el ratón se mueve dentro del control, sino que se dispara cuando haces clic+mueves el ratón. Para mí eso es un dragmouse clicar y arrastrar ¿no?
Objetivo: Re: Mover Un Picturebox Con El Ratón
No exageres con los Variant !
El tipo Variant ocupa 16 byte en un sistema de 64bit.
El evento MouseMove() se dispara cuando el ratón se mueve dentro del control mientras un botón del ratón es presionado.
v3ctor escribió: [Ver mensaje]
No exageres con los Variant !
El tipo Variant ocupa 16 byte en un sistema de 64bit.
guadafan escribió: [Ver mensaje]
El evento MouseMove() se dispara cuando el ratón se mueve dentro del control mientras un botón del ratón es presionado.
Objetivo: Re: Mover Un Picturebox Con El Ratón
Vuott:
El ultimo código de los tres ejemplos no parece "completo", o funcional del todo.
Prueba a desplazar el objeto sobre el contenedor padre original y ahora quita el dedo del botón del ratón.
El componente se pierde en el segundo contenedor...no se ve!.
( Se ve que cambia en la consola a otro contenedor padre)
¿ No necesitas usar el eje "Y" cuando le dices que ahora tiene un "nuevo padre"..contenedor padre.?..
En cambio si lo llevas hasta el panel y quitas el dedo del botón del ratón el objeto cambia de contenedor padre.
Saludos
El ultimo código de los tres ejemplos no parece "completo", o funcional del todo.
Prueba a desplazar el objeto sobre el contenedor padre original y ahora quita el dedo del botón del ratón.
El componente se pierde en el segundo contenedor...no se ve!.
( Se ve que cambia en la consola a otro contenedor padre)
¿ No necesitas usar el eje "Y" cuando le dices que ahora tiene un "nuevo padre"..contenedor padre.?..
En cambio si lo llevas hasta el panel y quitas el dedo del botón del ratón el objeto cambia de contenedor padre.
Saludos
Objetivo: Re: Mover Un Picturebox Con El Ratón
Sì, Shell, era solo un simple ejemplo por el .Reparent, pero era demasiado parcial.
Ahora lo he completado.......espero.
http://www.gambas-it.org/wiki/index...et.C3.A0_Parent
Gracias y saludos.
última edición por vuott el Sabado, 25 Julio 2015, 16:45; editado 2 veces
Shell escribió: [Ver mensaje]
Sì, Shell, era solo un simple ejemplo por el .Reparent, pero era demasiado parcial.
Ahora lo he completado.......espero.
http://www.gambas-it.org/wiki/index...et.C3.A0_Parent
Gracias y saludos.
última edición por vuott el Sabado, 25 Julio 2015, 16:45; editado 2 veces
Objetivo: Re: Mover Un Picturebox Con El Ratón
Ahora ya funciona!.
Ah, podíamos también haber usado: ( Y así no usamos el nombre del formulario actual, que puede ser cualquiera ).
Es que en mi ejemplo Panel1 estaba vació.
Y a todo esto, ¿ cómo es que no usasteis Drag Drop ?.
Saludos
última edición por Shell el Sabado, 25 Julio 2015, 19:40; editado 2 veces
vuott escribió: [Ver mensaje]
Ahora ya funciona!.
Ah, podíamos también haber usado: ( Y así no usamos el nombre del formulario actual, que puede ser cualquiera ).
Public Sub PictureBox1_MouseUp()
If Panel1.Children.Count = 0 And Mouse.Inside(Panel1) Then
'If PictureBox1.Parent.Name = "FMain3" And Mouse.Inside(Panel1) Then
With PictureBox1
'Se realiza la modificación del contenedor padre del objeto
'el contenedor "Panel1" pasa a ser el nuevo "Padre" del objeto
.Reparent(Panel1, .X - Panel1.X, .y - Panel1.y)
Print "Nuevo contenedor padre: " & .Parent.Name
End With
End If
End
If Panel1.Children.Count = 0 And Mouse.Inside(Panel1) Then
'If PictureBox1.Parent.Name = "FMain3" And Mouse.Inside(Panel1) Then
With PictureBox1
'Se realiza la modificación del contenedor padre del objeto
'el contenedor "Panel1" pasa a ser el nuevo "Padre" del objeto
.Reparent(Panel1, .X - Panel1.X, .y - Panel1.y)
Print "Nuevo contenedor padre: " & .Parent.Name
End With
End If
End
Es que en mi ejemplo Panel1 estaba vació.
Y a todo esto, ¿ cómo es que no usasteis Drag Drop ?.
Saludos
última edición por Shell el Sabado, 25 Julio 2015, 19:40; editado 2 veces
Página 1 de 2
No puede crear mensajesNo puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario
Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.
Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo
Página generada en:: 0.1157s (PHP: -23% SQL: 123%)
Consultas SQL: 27 - Debug off - GZIP Activado