PureBasic

Forums PureBasic
Nous sommes le Jeu 22/Aoû/2019 10:33

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 1 message ] 
Auteur Message
 Sujet du message: Les bases du Drag and Drop
MessagePosté: Jeu 27/Déc/2018 11:33 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1592
Peu utilisé alors que très facile en PB, voici un mini tuto sur l’utilisation du drag and drop.

Ici, la méthode de base: le drag and drop de fichier depuis Windows vers une application PB (ouverte)
(Note: Pour faire de même mais sur l'icône d'une application, on se sert de ProgramParameter())

Utilisation classique: ouvrir un fichier en trainant son icône depuis le bureau Windows ou l'explorateur de fichier. C'est utile pour les éditeurs de fichier, les éditeurs de SGBD, les visualiseurs d'image, les lecteurs mp3 etc.

Principe: On déclare une fenêtre (ou un objet) comme pouvant recevoir un fichier.
:!: :arrow: Quand on dit "fichier" (#PB_Drop_Files), ce n'est pas le fichier qui est transmis, mais le chemin d'accès (complet)

Exemple 1: Fichiers envoyés un par un
Code:
EnableExplicit

Enumeration
    #Win
    #Lst
EndEnumeration

OpenWindow(#Win, 0, 0, 500, 300, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListViewGadget(#Lst, 5, 5, 490, 290)

; On détermine que la fenêtre entière peut recevoir des fichiers depuis l'explorateur
; (#PB_Drop_Files = la fenêtre ne va pas reçevoir le fichier, mais le NOM complet du fichier)
EnableWindowDrop(#Win, #PB_Drop_Files, #PB_Drag_Copy)


Repeat
    Select WaitWindowEvent()
           
        Case #PB_Event_CloseWindow
            End
           
        Case #PB_Event_WindowDrop
            AddGadgetItem(#Lst, -1, EventDropFiles())
           
    EndSelect
   
ForEver

End


Exemple 2: envoyer plusieurs fichiers en même temps.
Dans ce cas, l'application reçoit tous les fichiers dans la même variable, ils sont séparés par un Chr(10). If suffit donc de séparer les éléments.
Code:
EnableExplicit

Enumeration
    #Win
    #Lst
EndEnumeration

Define Drop_Files$
Define Nb_Files
Define i

OpenWindow(#Win, 0, 0, 500, 300, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListViewGadget(#Lst, 5, 5, 490, 290)

; On détermine que la fenêtre entière peut recevoir des fichiers depuis l'explorateur
; (#PB_Drop_Files = la fenêtre ne va pas reçevoir le fichier, mais le NOM complet du fichier)
EnableWindowDrop(#Win, #PB_Drop_Files, #PB_Drag_Copy)


Repeat
    Select WaitWindowEvent()
           
        Case #PB_Event_CloseWindow
            End
           
        Case #PB_Event_WindowDrop
            ; Stocker le lot de fichiers
            Drop_Files$ = EventDropFiles()
            ; Compter les fichiers en comptant les sauts de ligne
            Nb_Files = CountString(Drop_Files$, Chr(10))
           
            ; S'il y en a au moins 1 alors couper la chaine
            ; puis les ajouter
            If Nb_Files > 0
                For i = 1 To Nb_Files
                    AddGadgetItem(#Lst, -1, StringField(Drop_Files$, i, Chr(10)))
                Next
            Else
                ; Un seul
                AddGadgetItem(#Lst, -1, Drop_Files$)
            EndIf
    EndSelect
   
ForEver

End


Considérations:
- EnableWindowDrop() C'est toute la fenêtre qui permet de recevoir le(s) fichier(s) peut importe les gadgets qui recouvrent.
pour ne recevoir que sur certains éléments c'est EnableGadgetDrop()
- Pour ne prendre que les fichiers intéressants, il suffit de filtrer chaque fichier à l'arrivé avec GetExtensionPart()
Exemple dans mon lecteur multimedia, le drop de dossier ne prend que les fichier de musique lus par la lib movie de PB.
Erreur classique: Penser à la différence majuscule/minuscule (utiliser Ucase() pour tout mettre en majuscules)
Code:
Select UCase(GetExtensionPart(Drop_File$))
                    Case "M4A", "FLAC", "MP3", "OGG", "WAV"


Voilà, c'est aussi simple que cela.
Vous savez maintenant comment ouvrir des fichiers plus rapidement qu'avec OpenFileRequester

:wink:


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 1 message ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye