[Résolu] problème avec drag & drop

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

[Résolu] problème avec drag & drop

Message par Micoute »

Bonjour à tous,

dans ma collection de programmes éducatifs pour mes petits enfants, j'ai essayé d'introduire le glisser-déposer, mais je bloque, car ça ne fonctionne pas comme je le souhaiterais, sans doute, n'ai-je pas mis la bonne instruction ou la bonne constante.

Je vous serais très reconnaissant si vous aviez le remède à mon problème et je vous en remercie par avance.

Code : Tout sélectionner

;Drag & Drop

EnableExplicit

Enumeration Fenetre
  #Fenetre_principale
EndEnumeration

Enumeration Gadgets
  #Txt_Definitions
  #Txt_Enonce
  #Str_1
  #Str_2
  #Str_3
  #Str_4
  #Str_5
  #Str_6
  #Str_Cible_1
  #Str_Cible_2
  #Str_Cible_3
  #Str_Cible_4
  #Str_Cible_5
  #Str_Cible_6
  #Str_Source_1
  #Str_Source_2
  #Str_Source_3
  #Str_Source_4
  #Str_Source_5
  #Str_Source_6
  #Btn_Valider
EndEnumeration

Enumeration Fontes
  #Font_Txt_Definitions
  #Font_Txt_Enonce
  #Font_Str_1
  #Font_Str_2
  #Font_Str_3
  #Font_Str_4
  #Font_Str_5
  #Font_Str_6
  #Font_Cible_1
  #Font_Cible_2
  #Font_Cible_3
  #Font_Cible_4
  #Font_Cible_5
  #Font_Cible_6
  #Font_Source_1
  #Font_Source_2
  #Font_Source_3
  #Font_Source_4
  #Font_Source_5
  #Font_Source_6
  #Font_Btn_Valider
EndEnumeration
;}
;- déclarations des variables et des tableaux
Global Event, x, Texte$
Global Dim Question.s(5), Dim Reponse.s(5), Dim RepRnd.s(5)
;}
Procedure Lire_les_donnees()  
  For X = 0 To 5 
    Read.s Question(X)
    Read.s Reponse(X)
    RepRnd(X) = Reponse(X)
  Next
  RandomizeArray(RepRnd())
EndProcedure

Procedure Valider()
EndProcedure

Procedure Quitter()
  CloseWindow(#Fenetre_principale)
  End
EndProcedure

Procedure OpenWindow_Fenetre_principale()
  If OpenWindow(#Fenetre_principale, 462, 41, 565, 650, "Drag & Drop © Micoute - 13/09/2014", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    BindEvent(#PB_Event_CloseWindow, @Quitter(), #Fenetre_principale)
      TextGadget(#Txt_Definitions, 20, 20, 145, 30, "Définitions")
      TextGadget(#Txt_Enonce, 47, 65, 470, 20, "Place chaque mot en face de sa définition et clique sur valider", #PB_Text_Center)
      StringGadget(#Str_1, 15, 120, 350, 55, Question(0), #ES_CENTER|#ES_MULTILINE|#WS_BORDER)
      StringGadget(#Str_2, 15, 180, 350, 55, Question(1), #ES_CENTER|#ES_MULTILINE|#WS_BORDER)
      StringGadget(#Str_3, 15, 240, 350, 55, Question(2), #ES_CENTER|#ES_MULTILINE|#WS_BORDER)
      StringGadget(#Str_4, 15, 300, 350, 55, Question(3), #ES_CENTER|#ES_MULTILINE|#WS_BORDER)
      StringGadget(#Str_5, 15, 360, 350, 55, Question(4), #ES_CENTER|#ES_MULTILINE|#WS_BORDER)
      StringGadget(#Str_6, 15, 420, 350, 55, Question(5), #ES_CENTER|#ES_MULTILINE|#WS_BORDER)
      StringGadget(#Str_Cible_1, 375, 120, 170, 55, "", #ES_CENTER|#ES_MULTILINE|#WS_BORDER)
      StringGadget(#Str_Cible_2, 375, 180, 170, 55, "", #ES_CENTER|#ES_MULTILINE|#WS_BORDER)
      StringGadget(#Str_Cible_3, 375, 240, 170, 55, "", #ES_CENTER|#ES_MULTILINE|#WS_BORDER)
      StringGadget(#Str_Cible_4, 375, 300, 170, 55, "", #ES_CENTER|#ES_MULTILINE|#WS_BORDER)
      StringGadget(#Str_Cible_5, 375, 360, 170, 55, "", #ES_CENTER|#ES_MULTILINE|#WS_BORDER)
      StringGadget(#Str_Cible_6, 375, 420, 170, 55, "", #ES_CENTER|#ES_MULTILINE|#WS_BORDER)
      StringGadget(#Str_Source_1, 15, 480, 170, 55, RepRnd(0), #ES_CENTER|#ES_MULTILINE|#WS_BORDER)
      StringGadget(#Str_Source_2, 195, 480, 170, 55, RepRnd(1), #ES_CENTER|#ES_MULTILINE|#WS_BORDER)
      StringGadget(#Str_Source_3, 375, 480, 170, 55, RepRnd(2), #ES_CENTER|#ES_MULTILINE|#WS_BORDER)
      StringGadget(#Str_Source_4, 15, 540, 170, 55, RepRnd(3), #ES_CENTER|#ES_MULTILINE|#WS_BORDER)
      StringGadget(#Str_Source_5, 195, 540, 170, 55, RepRnd(4), #ES_CENTER|#ES_MULTILINE|#WS_BORDER)
      StringGadget(#Str_Source_6, 375, 540, 170, 55, RepRnd(5), #ES_CENTER|#ES_MULTILINE|#WS_BORDER)
      ButtonGadget(#Btn_Valider, 200, 610, 170, 20, "Valider")
      
      BindGadgetEvent(#Btn_Valider,@Valider())
      
      EnableGadgetDrop(#Str_Cible_1, #PB_Drop_Text, #PB_Drag_Copy)
      EnableGadgetDrop(#Str_Cible_2, #PB_Drop_Text, #PB_Drag_Copy)
      EnableGadgetDrop(#Str_Cible_3, #PB_Drop_Text, #PB_Drag_Copy)
      EnableGadgetDrop(#Str_Cible_4, #PB_Drop_Text, #PB_Drag_Copy)
      EnableGadgetDrop(#Str_Cible_5, #PB_Drop_Text, #PB_Drag_Copy)
      EnableGadgetDrop(#Str_Cible_6, #PB_Drop_Text, #PB_Drag_Copy)
      
      ; Fontes
      SetGadgetFont(#Txt_Definitions, LoadFont(#Font_Txt_Definitions, "Arial", 20, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Txt_Enonce, LoadFont(#Font_Txt_Enonce, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Str_1, LoadFont(#Font_Str_1, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Str_2, LoadFont(#Font_Str_2, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Str_3, LoadFont(#Font_Str_3, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Str_4, LoadFont(#Font_Str_4, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Str_5, LoadFont(#Font_Str_5, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Str_6, LoadFont(#Font_Str_6, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Str_Cible_1, LoadFont(#Font_rep_1, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Str_Cible_2, LoadFont(#Font_rep_2, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Str_Cible_3, LoadFont(#Font_rep_3, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Str_Cible_4, LoadFont(#Font_rep_4, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Str_Cible_5, LoadFont(#Font_rep_5, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Str_Cible_6, LoadFont(#Font_rep_6, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Str_Source_1, LoadFont(#Font_Source_1, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Str_Source_2, LoadFont(#Font_Source_2, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Str_Source_3, LoadFont(#Font_Source_3, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Str_Source_4, LoadFont(#Font_Source_4, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Str_Source_5, LoadFont(#Font_Source_5, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Str_Source_6, LoadFont(#Font_Source_6, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
      SetGadgetFont(#Btn_Valider, LoadFont(#Font_Btn_Valider, "Arial", 12, #PB_Font_Bold|#PB_Font_HighQuality))
    EndIf
EndProcedure

Lire_les_donnees()
OpenWindow_Fenetre_principale()

;- Boucle principale
Repeat
  Event = WaitWindowEvent()
    ; ///////////////////
    If #PB_Event_Gadget And EventType() = #PB_EventType_DragStart
      Select EventGadget()
        Case #Str_Source_1
          Texte$ = GetGadgetText(#Str_Source_1)
          DragText(Texte$)
        Case #Str_Source_2
        Case #Str_Source_3
        Case #Str_Source_4
        Case #Str_Source_5
        Case #Str_Source_6
      EndSelect
    ElseIf Event = #PB_Event_GadgetDrop
      Select EventGadget()
        Case #Str_Cible_1
          Texte$ = Str(SetGadgetText(#Str_Cible_1,GetGadgetText(#Str_Source_1)))
        Case #Str_Cible_2
        Case #Str_Cible_3
        Case #Str_Cible_4
        Case #Str_Cible_5
        Case #Str_Cible_6
      EndSelect    
  EndIf
ForEver

DataSection
  Data.s "Habitude, manière de faire qui se transmet depuis très longtemps","une tradition"
  Data.s "Herbe courte et fine","un gazon"
  Data.s "Long vêtement sans manche que l'on porte sur les épaules","une cape"
  Data.s "Outil à manche en bois et à tête d'acier qui sert à frapper","un marteau"
  Data.s "Repos que l'on prend après le repas de midi","une sieste"
  Data.s "Avantage remporté sur les ennemis dans une guerre","une victoire"
EndDataSection
Dernière modification par Micoute le sam. 13/sept./2014 18:07, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: problème avec drag & drop

Message par PAPIPP »

Bonjour Micoute

Suite à une récente question sur le forum anglais
TI-994A a remarqué que le drag & drop de la bibliothèque de PureBasic ne supporte pas nativement le StringGadget () ou la TextGadget () entièrement.
Alors, il a décidé de créer une fonction pour émuler cette fonction pour ces gadgets. Il prend en charge n'importe quel gadget qui soutiennent le SetGadgetText () et GetGadgetText () , mais il ne fonctionne que dans la même application, et est pour Windows uniquement. La fonction de glisser-déposer ensemble est encapsulé dans une procédure unique, et pourrait facilement être branché dans n'importe quelle application, et tout simplement appelé dans la boucle d'événements principale.

http://www.purebasic.fr/english/viewtop ... +drag+drop+

A+
Dernière modification par PAPIPP le sam. 13/sept./2014 21:43, modifié 1 fois.
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: problème avec drag & drop

Message par Micoute »

Bonsoir PAPIPP,

Comme quoi, il suffisait juste de demander et en plus ça fonctionne très bien, que de mander de plus ?

En tous cas, un énorme merci à TI-994A
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [Résolu] problème avec drag & drop

Message par Ar-S »

Une bonne petite feinte Papipp merci, à noter que ça ne fonctionne que pour du texte.
~~~~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
Répondre