drag’n drop entre deux listicongadget().

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

drag’n drop entre deux listicongadget().

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

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

Message 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
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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 :)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

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

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Répondre