elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Ayuda, Drag & Drop
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda, Drag & Drop  (Leído 1,913 veces)
sebah97

Desconectado Desconectado

Mensajes: 77



Ver Perfil
Ayuda, Drag & Drop
« en: 30 Enero 2010, 03:54 am »

Hola, como dice el titulo quisiera que me expliquen como puedo hacer Drag & Drop, pero no cualquiera,quisiera que lo haga de un Picturebox hasta una cuadricula dibujada con lineas (Ver Imagen)



Como ven, quisiera que el picture que tiene cargada una Imagen verde copie esa Imagen al cuadrado que dibujé(Está Señalado con una Flecha, igual es un ejemplo, quisiera hacerlo con todos los cuadrados que quiera  :xD).

Si precisan el codigo de como dibujé los cuadrados se los paso:
Código
  1. Sub Dibujar_cuadricula( _
  2.    Objeto As Object, _
  3.    CountX As Single, _
  4.    CountY As Single, _
  5.    Optional x_Color As Long = vbBlack, _
  6.    Optional y_Color As Long = vbBlack)
  7.  
  8.    Dim i As Integer
  9.    Dim mx As Long
  10.    Dim my As Long
  11.  
  12.    ' limpiar objeto
  13.    Objeto.Cls
  14.  
  15.    mx = CLng(Objeto.ScaleWidth / CountX)
  16.    my = CLng(Objeto.ScaleHeight / CountY)
  17.  
  18.  
  19.    Objeto.ForeColor = x_Color
  20.  
  21.  
  22.    For i = 0 To CountX
  23.        Objeto.Line (i * mx, 0)-(i * mx, Objeto.ScaleHeight)
  24.    Next i
  25.  
  26.    Objeto.ForeColor = y_Color
  27.  
  28.  
  29.    For i = 0 To CountY
  30.        Objeto.Line (0, i * my)-(Objeto.ScaleWidth, i * my)
  31.    Next i
  32.  
  33. End Sub
  34.  
  35.  
  36. Private Sub Form_Load()
  37.  
  38. With Picture1
  39. .BackColor = vbWhite
  40. .ForeColor = vbBlue
  41. .FontSize = 12
  42. .AutoRedraw = True
  43. End With
  44. ' la cuadricula (osea los cuadraditos las dibuja en un picture grande (picture1 xd)
  45. Call Dibujar_cuadricula(Picture1, 15, 15, vbRed, vbRed)
  46.  
  47. End Sub
  48.  


PD: Para mi abria que hacer como algo para que cada cuadrado simule un CONTROL  :xD (igual ni idea yo :S)


En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Ayuda, Drag & Drop
« Respuesta #1 en: 30 Enero 2010, 05:05 am »

.
Espero que no busques códigos por que solo te soltare una idea

Yo en lugar de mover el picturebox dibujaría el contenido de este en las coordenas propuestas con el api BitBlt() teniendo el autoredraw=true para que no se borre el DC del control

Edito:
Tambien usa lo que es getcursosPos y ScreenToClient para que se te facilite el Drag &Drop

y por ultimo

IntersectRect para verificar la coordenada con respecto en las celdas para ver donde dibujar con el api BitBlt.


Nota: usa la estructura RECT si usas mi idea se te facilitara.

temibles Lunas!¡.
.


« Última modificación: 30 Enero 2010, 05:10 am por ░▒▓BlackZeroҖ▓▒░ » En línea

The Dark Shadow is my passion.
EddyW

Desconectado Desconectado

Mensajes: 187



Ver Perfil WWW
Re: Ayuda, Drag & Drop
« Respuesta #2 en: 30 Enero 2010, 06:29 am »

Creo que es mas simple aun..
Existe una forma mas sencilla de mover un control usando la API SendMessage:
Supongamos que quiero mover el Picture2 a mmm, algun lado XD
Código:
Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" ( _
        ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
        lParam As Any) As Long
 
Private Declare Sub ReleaseCapture Lib "User32" ()
 
Const WM_NCLBUTTONDOWN = &HA1
Const HTCAPTION = 2

Private Sub Picture2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ReleaseCapture
    If Button = vbLeftButton Then
        Call SendMessage(Picture2.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
    End If
End Sub
Con eso mueves el Picture2 a cualquier lado.., {al hacerle click y moverlo}
Ahora para que puedas arrastrar el Picture2 y otro control lo acepte debes de establecer su propiedad DragMode a Automático..

Supongamos que queremos arrastrar un Picture2 a un control de Picture1(0) {Picture1 sera una Matriz}
El Picture1 tiene un evento que se llama cada vez que se arrastra un 'algo' encima de este, el evento se llama DragDrop:
Código:
Private Sub Picture1_DragDrop(Index As Integer, Source As Control, X As Single, Y As Single)
MsgBox Index
End Sub

Si juntas todo el code.., al arrastrar el Picture2 a un control PIcture1 {Mas preciso a una Matriz de Picture1} te mostrara el Index del control al que haz arrastrado el picture2

Ahí ya tienes una idea, a partir de ahí es sencillo ;)

SaluDOS!!!
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Ayuda, Drag & Drop
« Respuesta #3 en: 30 Enero 2010, 07:56 am »

.
Espero te sirve este codigo que reaize hace tiempo es similar a lo que deseas solo que es una ilera  xP

se nesesta:
1 picturebox llamado PIC con index = 0
1 Timer

En un formulario pegar:

Código
  1.  
  2. '
  3. ' /////////////////////////////////////////////////////////////
  4. ' // Autor: BlackZeroX ( Ortega Avila Miguel Angel ) //
  5. ' // //
  6. ' // Web: http://InfrAngeluX.Sytes.Net/ //
  7. ' // //
  8. ' // |-> Pueden Distribuir Este Codigo siempre y cuando //
  9. ' // no se eliminen los creditos originales de este codigo //
  10. ' // No importando que sea modificado/editado o engrandesido //
  11. ' // o achicado, si es en base a este codigo es requerido //
  12. ' // el agradacimiento al autor. //
  13. ' /////////////////////////////////////////////////////////////
  14. '
  15.  
  16. Option Explicit
  17.  
  18. Private Declare Function IntersectRect Lib "user32" (lpDestRect As Rect, lpSrc1Rect As Rect, lpSrc2Rect As Rect) As Long
  19. Private Type Rect
  20.    left                As Long
  21.    top                 As Long
  22.    Right               As Long
  23.    Bottom              As Long
  24. End Type
  25. Private Declare Function GetCursorPos Lib "user32.dll" (ByRef lpPoint As POINTAPI) As Long
  26. Private Declare Function ScreenToClient Lib "user32.dll" (ByVal hwnd As Long, ByRef lpPoint As POINTAPI) As Long
  27. Private Type POINTAPI
  28.    X                   As Long
  29.    Y                   As Long
  30. End Type
  31. 'Private Declare Function GetWindowRect Lib "user32"  (ByVal hwnd As Long, lpRect As Rect) As Long
  32. Dim lBtActual           As Integer
  33. Dim By                  As Long
  34. 'Dim Bx                  As Long
  35. Const Anchura           As Long = 80
  36. Const Altura            As Long = 20
  37. Const CantZones         As Integer = 10
  38. Dim PostR()             As Rect
  39.  
  40. Private Sub Form_Load()
  41. Dim i       As Integer
  42.    ReDimPostR (CantZones - 1)
  43.    ScaleMode = 3
  44.  
  45.    For i = 0 To CantZones - 1
  46.        If i > 0 Then
  47.            Load Pic(i)
  48.            Pic(i).Visible = True
  49.        End If
  50.        ' // Estas Son las Regiones
  51.        With PostR(i)
  52.            .left = 25
  53.            If i = 0 Then
  54.                .top = 25
  55.            Else
  56.                .top = PostR(i - 1).Bottom + 25
  57.            End If
  58.            .Right = .left + Anchura
  59.            .Bottom = .top + Altura
  60.        End With
  61.        ' // Posicionamos los Label en las Regiones
  62.        Call PosPic(i)
  63.    Next i
  64.    Timer1.Interval = 20
  65.    Timer1.Enabled = False
  66. End Sub
  67.  
  68. Private Sub pic_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
  69. Dim PT              As POINTAPI
  70.    PosPic Index ' // Actualizamos la region
  71.    GetCursorPos PT
  72.    ScreenToClient hwnd, PT
  73.    By = PT.Y - Pic(Index).top
  74.    'Bx = PT.X - pic(Index).left
  75.    lBtActual = Index
  76.    Timer1.Enabled = True
  77. End Sub
  78.  
  79. Private Sub pic_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
  80.    PosPic Index ' // Actualizamos la region
  81.    Timer1.Enabled = False
  82. End Sub
  83.  
  84. Private Sub Timer1_Timer()
  85. Dim PT                  As POINTAPI
  86. Dim Rect(2)             As Rect
  87. Dim i                   As Integer
  88. Dim AreCambio           As Integer
  89.  
  90.    GetCursorPos PT
  91.    ScreenToClient hwnd, PT
  92.    With Pic(lBtActual)
  93.        .Visible = True
  94.        '.left = PT.X - Bx
  95.        .top = PT.Y - By
  96.        .Visible = True
  97.    End With
  98.    With Rect(2)
  99.        ' // Calculamos el Area de Cambio
  100.        AreCambio = (Altura / 2) - IIf(Altura < 10, 0, 10)
  101.        .top = Pic(lBtActual).top + AreCambio
  102.        .left = Pic(lBtActual).left
  103.        .Right = Pic(lBtActual).left + Pic(lBtActual).Width
  104.        .Bottom = Pic(lBtActual).top + Pic(lBtActual).Height - AreCambio
  105.    End With
  106.    For i = 0 To CantZones - 1
  107.        If lBtActual <> i And _
  108.            IntersectRect(Rect(0), Rect(2), PostR(i)) Then
  109.            Rect(0) = PostR(lBtActual) ' // Hacemos un Respaldo
  110.            PostR(lBtActual) = PostR(i)
  111.            PostR(i) = Rect(0)
  112.            Call PosPic(i)
  113.            Call PosPic(lBtActual)
  114.            Exit For
  115.        End If
  116.    Next i
  117. End Sub
  118.  
  119. Private Sub PosPic(ByVal i As Integer)
  120.    With Pic(i)
  121.        .left = PostR(i).left
  122.        .BackColor = RGB(255 / (i + 1), 255 / (i + 1), 255 / (i + 1))
  123.        If i = 0 Then
  124.            .top = PostR(i).top
  125.        Else
  126.            .top = PostR(i).top
  127.            .top = .top
  128.        End If
  129.        .Width = PostR(i).Right - PostR(i).left
  130.        .Height = PostR(i).Bottom - PostR(i).top
  131.    End With
  132. End Sub
  133.  
  134.  

Temibles Lunas!¡.
.
En línea

The Dark Shadow is my passion.
sebah97

Desconectado Desconectado

Mensajes: 77



Ver Perfil
Re: Ayuda, Drag & Drop
« Respuesta #4 en: 30 Enero 2010, 15:07 pm »

gracias a los 2 por las respuestas :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Utilizando upload de imagen con drag & drop
Desarrollo Web
Feedeex 7 7,013 Último mensaje 14 Julio 2011, 22:12 pm
por madpitbull_99
Obtener Ruta de archivo arrastrado a un Form (Drag & Drop)
.NET (C#, VB.NET, ASP)
adan-2994 2 5,661 Último mensaje 7 Agosto 2011, 19:18 pm
por adan-2994
Cargar archivo con Drag and drop
Desarrollo Web
danielo- 0 2,358 Último mensaje 23 Octubre 2011, 07:02 am
por danielo-
Drag and Drop en GTK#
.NET (C#, VB.NET, ASP)
wennam 0 1,522 Último mensaje 19 Diciembre 2011, 17:56 pm
por wennam
html5 drag and drop ayuda (imagen dentro de div)
Desarrollo Web
Kase 0 1,823 Último mensaje 6 Mayo 2013, 11:13 am
por Kase
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines