Exemple d'utilisation du drag'n'drop pour remplir un login

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Marc56
Messages : 2148
Inscription : sam. 08/févr./2014 15:19

Exemple d'utilisation du drag'n'drop pour remplir un login

Message par Marc56 »

Petit exemple inverse: Prendre une donnée dans un programme PB pour la lâcher dans une application externe.

Application type: les gestionnaires de mots de passe.

Solution simple: Comme le d&d du texte d'un champs peut ne pas être complet ou préempté par des fonctions du système, je créé une image à côté de chaque champs. C'est cette image qu'on va utiliser pour le d&d.
Au « lâché » au dessus du champs de destination, on récupère la donnée texte source et non pas l'image.

Code : Tout sélectionner

; Exemple d'utilisation du drag'n'drop 
; d'une application PB vers une application externe (exemple: page web)
; (c)Marc56 02/09/16

EnableExplicit

Enumeration 
    #Win
    #Editor_Login
    #Editor_Password
    #Img_Login
    #Login
    #Img_Password
    #Password
EndEnumeration


OpenWindow(#Win, 0, 0, 600, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

TextGadget(#PB_Any, 10, 80, 580, 30, 
           "Tirez et lâchez le carré de couleur au dessus des champs de Login et Password de la page web")

; Quelques données
EditorGadget(#Editor_Login,    10, 10, 100, 25) : SetGadgetText(#Editor_Login,    "My Login")
EditorGadget(#Editor_Password, 10, 40, 100, 25) : SetGadgetText(#Editor_Password, "My Password")

; Une image sert d'objet pour le drag'n'drop
CreateImage(#Img_Login,    25, 25, 32, #Blue)   : ImageGadget(#Login,    120, 10, 25, 25, ImageID(#Img_Login))  
CreateImage(#Img_Password, 25, 25, 32, #Yellow) : ImageGadget(#Password, 120, 40, 25, 25, ImageID(#Img_Password))  


Repeat
    Select WaitWindowEvent()
            
        Case #PB_Event_CloseWindow
            Break
            
        Case #PB_Event_Gadget
            If EventType() = #PB_EventType_DragStart     
                Select EventGadget()      
                    Case #Login
                        DragText(GetGadgetText(#Editor_Login),    #PB_Drag_Copy)                
                    Case #Password
                        DragText(GetGadgetText(#Editor_Password), #PB_Drag_Copy)
                EndSelect            
            EndIf 
    EndSelect
    
ForEver

End
Avantages:
  • Peu de transformations à faire sur un programme existant.
  • On peut faire un Trim pour éviter les espaces et tab parfois parasites.
  • On peut faire un drag d'un champs masqué.
  • Fonction non toxique qui peut cohabiter avec le reste du programme.
  • Le mot de passe ne passe pas par le presse-papier. (pas besoin de penser à le vider)
Ici j'ai créé des carrés de couleur dynamiquement, mais c'est plus joli de charger des icônes.

:?: Assez curieusement, on peut aussi tester vers n'importe quelle application texte, mais pas vers NotePad ?

:wink: