Page 1 sur 1

[OK] Drag Drop sur fenêtre

Publié : ven. 14/oct./2016 11:57
par Ar-S
Salut,
Retour vers le passé mais je galère à gérer le glisser déposer sur une fenêtre. Sur un gadget j'ai pas de soucis mais sur une fenêtre je n'arrive pas à détecter les fichiers (images). La doc ne propose pas de code pour le glisser déposer sur fenêtre. Seulement sur gadget. Il faudrait l'ajouter.

Quelle est la syntaxe ?

Code : Tout sélectionner

; dans ma creation de fenêtre
    EnableWindowDrop(#LDVM, #PB_Drop_Files, #PB_Drag_Copy)
;

; dans ma boucle principale
Select WaitWindowEvent()
    Case #PB_Event_WindowDrop 
      If EventDropType() = #PB_Drop_Image
          
              Debug "plop"

      EndIf
;

Re: Drag Drop sur fenêtre

Publié : ven. 14/oct./2016 12:22
par Marc56
Tu ne dis pas d'où viens l'image ? (autre fenêtre de l'application ?)
On ne peut 'dropper' une image que depuis l'application elle-même, car c'est son ID qui sert de handle.
Depuis Windows, vers une application PB, ce sera un nom de fichier ou un texte.

Code : Tout sélectionner

Enumeration 
     #LDVM
     #Image
EndEnumeration

OpenWindow(#LDVM, 0, 0, 500, 300, "", 
           #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

EnableWindowDrop(#LDVM, #PB_Drop_Files, #PB_Drag_Copy)
EnableWindowDrop(#LDVM, #PB_Drop_Image, #PB_Drag_Copy)
EnableWindowDrop(#LDVM, #PB_Drop_Text,  #PB_Drag_Copy)

Repeat
     Select WaitWindowEvent()
          Case #PB_Event_CloseWindow 
               End
               
          Case #PB_Event_WindowDrop
               Select EventDropType()
                         
                    Case #PB_Drop_Image
                         Debug "Drop image: " + 
                               EventDropImage(#Image) ; <-- Besoin de l'ID image source
                         
                    Case #PB_Drop_Files
                         Debug "Drop file: " + 
                               EventDropFiles()
                         
                    Case #PB_Drop_Text
                         Debug "Texte" + 
                               EventDropText()
                         
               EndSelect
     EndSelect
ForEver

Re: Drag Drop sur fenêtre

Publié : ven. 14/oct./2016 12:47
par Ar-S
Merci marc, mais si pb_drop_file marche, pb_drop_image non et c'est lui qui m'intéresse.

Commente

Code : Tout sélectionner

;                     Case #PB_Drop_Files
;                          Debug "Drop file: " +
;                                EventDropFiles()
en ajoutant en debut de code

Code : Tout sélectionner

UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()
ça ne marche toujours pas.

Re: Drag Drop sur fenêtre

Publié : ven. 14/oct./2016 12:52
par Marc56
D'où vient l'objet image que tu drop ?
- De l'application elle-même ?
- De Windows (bureau, explorer etc) ?

Re: Drag Drop sur fenêtre

Publié : ven. 14/oct./2016 12:58
par Ar-S
Explorer. (je m'absente qques minutes je dois bricoler de l'elec)

Re: Drag Drop sur fenêtre

Publié : ven. 14/oct./2016 13:04
par Marc56
Ar-S a écrit :Explorer.
Donc la fenêtre reçoit alors un objet de type fichier, c'est à dire le nom (complet) du fichier
Peu importe le type de fichier, que ce soit un fichier image ou autre chose, c'est simplement un fichier.

Pour récupérer l'image, il faut donc que tu fasse ensuite un loadimage vers un objet image

Code : Tout sélectionner

EnableExplicit

Enumeration 
     #LDVM
     #Image
EndEnumeration

UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder() 

OpenWindow(#LDVM, 0, 0, 500, 300, "", 
           #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

EnableWindowDrop(#LDVM, #PB_Drop_Files, #PB_Drag_Copy)
EnableWindowDrop(#LDVM, #PB_Drop_Image, #PB_Drag_Copy)
EnableWindowDrop(#LDVM, #PB_Drop_Text,  #PB_Drag_Copy)

Repeat
     Select WaitWindowEvent()
          Case #PB_Event_CloseWindow 
               End
               
          Case #PB_Event_WindowDrop
               Select EventDropType()
                         
                         ; Drop image ne peut fonctionner qu'en interne
                         ; Case #PB_Drop_Image
                         ;    Debug "Drop image: " + 
                         ;    EventDropImage(#Image) ; <-- Besoin de l'ID image source
                         
                         ; Une image reçue depuis l'explorer = un fichier = nom complet du fichier                         
                    Case #PB_Drop_Files
                         Debug "Drop file: " + EventDropFiles()
                         If LoadImage(#Image, EventDropFiles())
                              ImageGadget(#PB_Any, 0, 0, 500, 300, ImageID(#Image))
                         EndIf
                         
                    Case #PB_Drop_Text
                         Debug "Texte" + 
                               EventDropText()
                         
               EndSelect
     EndSelect
ForEver

End
C'est vrai que la doc aurait besoin d'une petite précision type:
EventDropImage() ne peut se faire que sur un drag'n'drop interne

C'est écrit, mais d'une manière indirecte: EventDropImage()
Syntaxe
Resultat = EventDropImage(#Image [, Profondeur])

:wink:

Re: [OK] Drag Drop sur fenêtre

Publié : ven. 14/oct./2016 13:57
par Ar-S
Ok !
Et ben voilà !
Tout venait de là. Merci pour ces précisions.

Mesa si tu pouvais compléter la doc à ce sujet et ajouter un petit exemple pour les drag/drop sur fenêtre ce serait bien.
Merci ;)