https://foro.gambas-es.org/viewtopic.php?f=1&t=3422
-----------------------------------
shordi
Sabado, 12 Octobre 2013, 15:47

Dos Cositas Sobre Drag & Drop
-----------------------------------
Tengo un problema (bueno, dos como ahora veréis)

Si tienes un Fileview, por ejemplo, aunque vale cualquier control que tenga la propiedad de selección múltiple (listbox, gridview, etc.) y seleccionas varios items (con la propiedad multi a true), cuando quieres hacer un drag and drop con lo seleccionado haciendo click sobre uno de ellos, el evento click se dispara y de-selecciona todo salvo aquél sobre el que has hecho click, con lo que al arrastras sólo arrastras uno. 
Para arrastrar todos los seleccionados tienes que iniciar la operación de arrastre justo después de seleccionar el último sin levantar el ratón. 
Así surge la primera cuestión:

¿Hay alguna manera de detener ese evento click para dar tiempo a que se dispare el drag?

Para ilustraros esto he hecho un pequeño proyecto con un fileview y un textarea, donde seleccionamos varios ficheros en el fileview y arrastrando al textarea sus nombres son copiados. Pero, ¡oh sorpresa!, no consigo que el textarea me acepte el drop. 
He dado vueltas como un idiota un rato y, convencido de que es una tontería, os traslado la segunda cuestión:

¿Qué le pasa a ese textbox para que no funcione el drag & drop? (y mira que creía que tenía dominado el asunto este....) 

Adjunto el miniproyecto.


-----------------------------------
Shell
Domingo, 13 Octobre 2013, 09:05

Re: Dos Cositas Sobre Drag & Drop
-----------------------------------
Hola!.

A ver que ayer baje tu ejemplo y voy a tratar un poco el tema. :-)

Tu tienes:

[code linenumbers=false syntax=gambas]
Public Sub FileView1_MouseDrag()
    
    Dim cad As String
    
     If fileview1.Selection.Count > 0 Then
         cad = fileview1.Selection.Join("\n")
         fileview1.Drag(cad, "text/html")
         Drag.Icon = Stock["copy"]            
     Endif
    
End
[/code]

Lo cambie a:

[code linenumbers=false syntax=gambas]
   If FileView1.selection.count > 0 Then
        cad = fileview1.Selection.Join("\n")     
        Last.Drag(cad)
        Drag.Icon = Stock["copy"]      
    Endif
[/code]    

Tu sabes que esta arrastrando una cadena, no otra cosa. Entonces prueba a decirle que te arrastre la cadena.
Luego en el evento drop del TextArea, esperara que lo que va a dejarse caer es un array, no una cadena.
Entonces, he usado esto:

[code linenumbers=false syntax=gambas]
Public Sub TextArea1_Drop()
    
    Dim ar As String[]
    
    ar = Split(Drag.Data, "\n")
    
    TextArea1.text = ar.Join("\n")
    Wait 0.1
       
End
[/code]

Ah, quería comentarte que uses Debug. :-)
Aunque a veces hace respuestas extrañas.
Por ejemplo para saber que tipo de arrastre hace.

[code linenumbers=false syntax=gambas]
Debug Drag.Type
[/code]

Tengo que continuar mirando lo del evento. :-)
Naturalmente seguro que el código se puede cambiar algo mas.

Saludos


-----------------------------------
Shell
Domingo, 13 Octobre 2013, 09:41

Re: Dos Cositas Sobre Drag & Drop
-----------------------------------
También puedes poner directamente en el evento Drop del TextArea:

[code linenumbers=false syntax=gambas]
Public Sub TextArea1_Drop()
   Last.text = Drag.Data
End
[/code]

Menos código.

Cuando vi las propiedades de lo que arrastraba, antes de mostrarlo en la caja de texto, observo esto:

 [img]http://foro.gambas-es.org/files/images/768/drag.png[/img] 

La propiedad Formats es una array

Saludos


-----------------------------------
shordi
Domingo, 13 Octobre 2013, 09:58

Re: Dos Cositas Sobre Drag & Drop
-----------------------------------
Ok. Hay veces que uno se empecina en tontás.

De todas formas la primera cuestión que planteo es la que de verdad me interesa: ¿Cómo evitar el click sobre los seleccionados cuando vas a hacer un drag?
Es que en todas partes funciona así, primero selecciono, y lugo hago click sobre uno de los seleccionados y arrastro y los arrastra todos y mis usuarios van como loquicos.


-----------------------------------
Shell
Domingo, 13 Octobre 2013, 10:41

Re: Dos Cositas Sobre Drag & Drop
-----------------------------------
Prueba esto:

Selecciona dos archivos por ejemplo, no uses el izquierdo, usa el derecho.  :D 

Saludos


-----------------------------------
shordi
Domingo, 13 Octobre 2013, 10:43

Re: Dos Cositas Sobre Drag & Drop
-----------------------------------
Solucionada la primera cuestión (el error de poner "text/html" como segundo parámetro en lugar de "text/plain", que era lo correcto, me viene de las ayudas de gambas, que puse el parámetro tomado de esta página sin leer atentamente lo que dice. [url=http://www.gambasdoc.org/help/comp/gb.qt4/control/drag?es&v3]http://www.gambasdoc.org/help/comp/gb.qt4/control/drag?es&v3)

He actualizado el comprimido para que ahora sí funcione, a ver si alguien sabe algo de lo que pido en la cuestión primera, que es la que me interesa de verdad.

Se me animen.

Saludos


-----------------------------------
shordi
Domingo, 13 Octobre 2013, 10:47

Re: Dos Cositas Sobre Drag & Drop
-----------------------------------
[quote]Selecciona dos archivos por ejemplo, no uses el izquierdo, usa el derecho[/quote]

Sí, así funciona, pero ¿no es posible con el izquierdo?, es que es la práctica habitual.


-----------------------------------
Shell
Domingo, 13 Octobre 2013, 10:59

Re: Dos Cositas Sobre Drag & Drop
-----------------------------------
:idea: 

Usa en el evento Click de FIleVIew :

Stop Event

Saludos


-----------------------------------
shordi
Domingo, 13 Octobre 2013, 11:39

Re: Dos Cositas Sobre Drag & Drop
-----------------------------------
No lo veo claro. Si no se me ocurre nada, le daré un toque más serio a los usuarios para que usen el derecho... aunque no me gusta mucho eso de no saber cómo se hace algo. :x  :x 

Saludos


