![]() |
|
|
#1 |
|
Veterano
![]() Fecha de Ingreso: mayo-2006
Amigos 0
Mensajes: 751
Gracias: 0
Agradecido 4 veces en 3 mensajes.
|
Lo que haremos sera poder mover controles dentro de algun otro control (como puede ser un Frame) o del formulario mismo. Es decir, cuando el usuario haga clic en un control (en mi ejemplo use un List) y arrastre, sin soltal el clic, el objeto se movera junto con el cursor...
Para mover objetos dentro de otro objeto podemos usar Drag&Drop; es un metodo muy sencillo... Primero que nada vamos a habilitar el control donde se van a mover los objetos, para, justamente, moverlos. Esto lo vamos a hacer facil: Seleccionamos el objeto donde vamos a mover los controles, por ejemplo el formulario... Asique en la lista de objetos, seleccionamos el Form; y en procedimientos seleccionamos DragDrop, como muestra l aimagen: Dentro de este procedimiento vamos a indicar la funcion que movera el objeto, dicha funcion toma los valores X e Y para mover el objeto... Aqui ocurre un problema, y es que si pasamos el X e Y que toma VB, nos movera mal el objeto con respecto al cursor... La solucion es simple, debemos restarle a este X e Y, los valores X e Y que tenia el objeto antes de moverlos: Código:
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single) Source.Move X - X_Inicial, Y - Y_Inicial End Sub Código:
Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 'Los valores X e Y del control al inicio X_Inicial = X Y_Inicial = Y End Sub es decirl, las vamos a hacer de forma global para todo el codigo del form1. Para esto nos situamos en la parte superior del codigo, fuera de cualquier Sub o funcion existente en nuestro codigo, y las declaramos... Supongo que ya sabes como hacer, pero por si te surgen dudas te las pongo:Código:
Dim X_Inicial As Long Dim Y_Inicial As Long ![]() Ahora debemos indicarle a VB que inciaremos un Drag, es decir, activamos el Drag en el List; esto lo hacemos cuando se haga clic en el control (List), entonces debe ser nuevamente en MouseDown: Código:
Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 'Los valores X e Y del control al inicio X_Inicial = X Y_Inicial = Y 'Empezar el Drag List1.Drag End Sub Solo por seguridad podriamos indicar que se termine el drag cuando se suelte el boton del mouse, es decir en el evento MouseUp del control (List): Código:
Private Sub List1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) 'Terminar Drag List1.Drag vbEndDrag End Sub En este caso hemos dado la propiedad a un control List llamado List1 de moverse en el Formulario (Form1)... Si pusieramos el List en Frame deveriamos indicar la funcion para mover el objeto en el evento DragDrop del Frame: Código:
Private Sub Frame1_DragDrop(Source As Control, X As Single, Y As Single) Source.Move X - X_Inicial, Y - Y_Inicial End Sub Otra cosa es que si no le indicamos a un control que mueva dentro, en realidad es sobre él, no podremos hacerlo... Aver si me puedo explicar mejor, Si yo pusiera otro List en mi ejemplo anterior, cuando arrastro el List1 sobre el List2, y suelto el clic, el List1 vuelve a su posicion original, porque no l eindique al List2 que mueva el objeto sobre él... Entonces hagamos esto, añade otro List al ejemplo anterior y asi nomas prueba de soltar el List1 sobre le List2, veraz lo que pasa.. ¿Que pasa? Lo que ya dije ¬¬ Ahora agregemos esto al codigo: Código:
Private Sub List2_DragDrop(Source As Control, X As Single, Y As Single) Source.Move X - X_Inicial, Y - Y_Inicial End Sub Cualquier duda ya saben, posteenla aqui ¬¬ Pues bien, eso es todo... Salu2! |
|
|
|
![]() |
| Herramientas | |
| Desplegado | |
|
|

Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| ayuda con "tiempo de ejecucion comprimido"! | ManuelM2009 | Seguridad | 3 | 11-jul-2009 14:53 |
| TIME RESET, RESETEA EL TIEMPO Y RENUEVA IP PARA TIEMPO INFINITO EN RAPIDSHARE | cervatano | Software | 10 | 17-mar-2009 02:33 |
| Cuanto tiempo le dedican al foro? En cual subforo pasan mas tiempo? | SKINHEADHACK | Off-Topic | 9 | 26-feb-2009 13:28 |
| Icono en tiempo de ejecucion | Z-MAX | Visual Basic y Net | 2 | 11-jun-2007 12:22 |
| Error en tiempo de ejecución? problemas con un campo NULL... :( | Satine83 | Visual Basic y Net | 1 | 26-mar-2006 14:26 |