Page 1 sur 1

drag’n drop entre deux listicongadget().

Publié : ven. 08/févr./2013 17:55
par GallyHC
Bonjour tout le monde,

Je sollicite une fois de plus votre aide car je ne comprends rien au "drag’n drop" interne entre deux listicongadget().

Voila ce que donne pour le moment mon programme http://www.koakdesign.info/nav3/nav3explorer.exe

Si quelqu’un peu m’expliqué comment je peux faire pour pouvoir envoyé une info d’un coté et de l’autre entre deux listicongadget(), je suis vraiment preneur.

Cordialement et merci d'avance,
GallyHC

Re: drag’n drop entre deux listicongadget().

Publié : sam. 09/févr./2013 10:22
par Mesa
Quelque chose comme ça. Une bonne partie vient de l'exemple fourni avec l'aide :wink: :

Code : Tout sélectionner

Global Window_0

Global ListIcon_0, ListIcon_1, ExplorerList_0, ListIcon_3

Procedure InitWindow_0()
  Window_0 = OpenWindow(#PB_Any, 0, 0, 600, 400, "DragNDrop", #PB_Window_SystemMenu)
  ListIcon_0 = ListIconGadget(#PB_Any, 34, 9, 196, 151, "Column 1", 100)
  GadgetToolTip(ListIcon_0, "Insertion à  la fin de la liste")
  ListIcon_1 = ListIconGadget(#PB_Any, 320, 10, 210, 150, "Column 1", 100)
  GadgetToolTip(ListIcon_1, "Insertion à la position de la souris")
  ExplorerList_0 = ExplorerListGadget(#PB_Any, 30, 181, 200, 179, "", #PB_Explorer_MultiSelect)
  GadgetToolTip(ExplorerList_0, "Sélection multiple")
  ListIcon_3 = ListIconGadget(#PB_Any, 320, 180, 210, 180,"Column 1", 100)
  GadgetToolTip(ListIcon_3, "Insertion à la fin de la liste de la sélection multiple")
  
  
  For i=1 To 10
    AddGadgetItem(ListIcon_0, -1, "aaa"+Str(i))
    AddGadgetItem(ListIcon_1, -1, "zzz"+Str(i))
  Next i  
  
  ;Activer le drop pour le gadget voulu
  EnableGadgetDrop(ListIcon_1,     #PB_Drop_Text,    #PB_Drag_Copy)
  EnableGadgetDrop(ListIcon_0,     #PB_Drop_Text,    #PB_Drag_Copy)
  EnableGadgetDrop(ListIcon_3,     #PB_Drop_Files,   #PB_Drag_Copy)
  
  
  
EndProcedure

Procedure Window_0_Events(event)
  Select event
    Case #PB_Event_CloseWindow
      ProcedureReturn #False
      
      
      
    Case #PB_Event_Gadget 
      ;Quand on commence un drag, on a un evenement #PB_EventType_DragStart qui apparait
      If EventType() = #PB_EventType_DragStart
        Select EventGadget()
          Case ListIcon_0
            Texte$ = GetGadgetItemText(ListIcon_0, GetGadgetState(ListIcon_0))
            DragText(Texte$)
          Case ListIcon_1
            Texte$ = GetGadgetItemText(ListIcon_1, GetGadgetState(ListIcon_0))
            DragText(Texte$)
            
          Case ExplorerList_0
            Files$ = ""       
            For i = 0 To CountGadgetItems(ExplorerList_0)-1
              If GetGadgetItemState(ExplorerList_0, i) & #PB_Explorer_Selected
                Files$ + GetGadgetText(ExplorerList_0) + GetGadgetItemText(ExplorerList_0, i) + Chr(10)
              EndIf
            Next i 
            If Files$ <> ""
              DragFiles(Files$)
              ;Debug Files$
            EndIf
            
        EndSelect
      EndIf
      
      ;Quand on drop, on a un evenement #PB_Event_GadgetDrop qui apparait
    Case #PB_Event_GadgetDrop 
      Select EventGadget()
          
        Case ListIcon_1
          ;Insertion à la position de la souris
          AddGadgetItem(ListIcon_1, GetGadgetState(ListIcon_1), EventDropText())
          
        Case ListIcon_0
          ;Insertion à  la fin de la liste
          AddGadgetItem(ListIcon_0, -1, EventDropText())
          
          
        Case ListIcon_3
          ;Insertion à  la fin de la liste
          Files$ = EventDropFiles()
          Count  = CountString(Files$, Chr(10)) + 1
          For i = 1 To Count
            AddGadgetItem(ListIcon_3, -1, StringField(Files$, i, Chr(10)))
          Next i
          
      EndSelect   
  EndSelect
  ProcedureReturn #True
EndProcedure

InitWindow_0()


Repeat
  event = WaitWindowEvent()
Until Window_0_Events(event) = #False
Mesa

Re: drag’n drop entre deux listicongadget().

Publié : sam. 09/févr./2013 12:46
par Ar-S
Et j'ajouterai que la procédure est casi similaire pour gérer le DnD sur une fenêtre ET sur un gadget en particulier.
DnD sur fenêtre = action A
DnD sur 1 gadget particulier de la fenêtre = Action B

Tout est (toujours) question d'Event :)

Re: drag’n drop entre deux listicongadget().

Publié : sam. 09/févr./2013 13:11
par GallyHC
Bonjour,

Mesa> Merci pour ton exemple, je viens de comprendre en analysant ton code. En gros c'est a nous a généré le "Drag", ce qui parait normal en fait :).

Ar-s> Je prend note.

Cordialement,
GallyHC