Page 1 sur 1

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

Publié : sam. 13/sept./2014 13:09
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

Re: problème avec drag & drop

Publié : sam. 13/sept./2014 16:51
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+

Re: problème avec drag & drop

Publié : sam. 13/sept./2014 18:06
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

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

Publié : dim. 14/sept./2014 8:08
par Ar-S
Une bonne petite feinte Papipp merci, à noter que ça ne fonctionne que pour du texte.