Page 1 sur 1

Drag & Drop multi-images

Publié : ven. 10/mai/2019 13:09
par Micoute
Bonjour à tous,

je souhaiterais créer pour mes petits-enfants, un jeu d'éveil ou par exemple il faut qu'il redonne son bébé à chaque maman animal, mais ça peut parfaitement être un autre exemple.

En fait, ce que je souhaite faire, c'est chaque image source ne doit être acceptée qu'à l'image cible prévue à cet effet, hors je ne sais pas comment faire, et c'est pourquoi je viens m'éclairer de votre savoir collégial et je vous en remercie par avance pour l'aide que vous allez m'apporter.

Code : Tout sélectionner

#Fenetre_principale = 0

Enumeration Images
  #ImgSrc_1
  #ImgSrc_2
  #ImgSrc_3
  #ImgSrc_4
  #ImgSrc_5
  #ImgCbl_1
  #ImgCbl_2
  #ImgCbl_3
  #ImgCbl_4
  #ImgCbl_5
EndEnumeration

Enumeration Gadgets
  #ImageSource_1
  #ImageSource_2
  #ImageSource_3
  #ImageSource_4
  #ImageSource_5
  #ImageCible_1
  #ImageCible_2
  #ImageCible_3
  #ImageCible_4
  #ImageCible_5
EndEnumeration

Declare CreerImageSource(ImgSrc, Largeur, Hauteur, IdSrc)
Declare CreerImageCible(ImgCbl, Largeur, Hauteur, IdCble)
Declare Programme_principal()

Programme_principal()

Procedure CreerImageSource(ImgSrc, Largeur, Hauteur, IdSrc)
  CreateImage(ImgSrc, Largeur, Hauteur)
  If StartDrawing(ImageOutput(IdSrc))
    ;Fond de l'image source
    Box(0, 0, Largeur, Hauteur, $FFFFFF)
    For i = 45 To 1 Step -1
      Circle(Largeur / 2, Hauteur/2, i, Random($FFFFFF))
    Next i        
    
    StopDrawing()
  EndIf
EndProcedure

Procedure CreerImageCible(ImgCbl, Largeur, Hauteur, IdCble)
  CreateImage(ImgCbl, Largeur, Hauteur)
  If StartDrawing(ImageOutput(IdCble))
    ;Fond de l'image cible
    Box(0, 0, Largeur, Hauteur, $FFFFFF)
    StopDrawing()
  EndIf
EndProcedure

Procedure Programme_principal()
  If OpenWindow(#Fenetre_principale, 0, 0, 1020, 310, "Glisser & Déposer", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    
    ; Créer quelques images pour la démonstration de l'image
    ; 
    CreerImageSource(#ImageSource_1, 200, 136, #ImgSrc_1)  
    CreerImageSource(#ImageSource_2, 200, 136, #ImgSrc_2)
    CreerImageSource(#ImageSource_3, 200, 136, #ImgSrc_3)
    CreerImageSource(#ImageSource_4, 200, 136, #ImgSrc_4)
    CreerImageSource(#ImageSource_5, 200, 136, #ImgSrc_5)
    
    CreerImageCible(#ImageCible_1, 200, 136, #ImgCbl_1)
    CreerImageCible(#ImageCible_2, 200, 136, #ImgCbl_2)
    CreerImageCible(#ImageCible_3, 200, 136, #ImgCbl_3)
    CreerImageCible(#ImageCible_4, 200, 136, #ImgCbl_4)
    CreerImageCible(#ImageCible_5, 200, 136, #ImgCbl_5)  
    
    ; Créer et remplir les gadgets sources
    ;  
    ImageGadget(#ImageSource_1, 10, 10, 200, 140, ImageID(#ImgSrc_1))
    ImageGadget(#ImageSource_2, 210, 10, 200, 140, ImageID(#ImgSrc_2))
    ImageGadget(#ImageSource_3, 410, 10, 200, 140, ImageID(#ImgSrc_3))
    ImageGadget(#ImageSource_4, 610, 10, 200, 140, ImageID(#ImgSrc_4))
    ImageGadget(#ImageSource_5, 810, 10, 200, 140, ImageID(#ImgSrc_5))
    
    ; Créer les gadgets cibles
    ;
    ImageGadget(#ImageCible_1, 10, 160, 200, 140, ImageID(#ImgCbl_1))
    ImageGadget(#ImageCible_2, 210, 160, 200, 140, ImageID(#ImgCbl_2))
    ImageGadget(#ImageCible_3, 410, 160, 200, 140, ImageID(#ImgCbl_3))
    ImageGadget(#ImageCible_4, 610, 160, 200, 140, ImageID(#ImgCbl_4))
    ImageGadget(#ImageCible_5, 810, 160, 200, 140, ImageID(#ImgCbl_5))
    
    ; Activez maintenant le transfert sur les gadgets cibles
    ;
    EnableGadgetDrop(#ImageCible_1, #PB_Drop_Image, #PB_Drag_Copy)
    EnableGadgetDrop(#ImageCible_2, #PB_Drop_Image, #PB_Drag_Copy)
    EnableGadgetDrop(#ImageCible_3, #PB_Drop_Image, #PB_Drag_Copy)
    EnableGadgetDrop(#ImageCible_4, #PB_Drop_Image, #PB_Drag_Copy)
    EnableGadgetDrop(#ImageCible_5, #PB_Drop_Image, #PB_Drag_Copy)
    
    Repeat
      Evenement = WaitWindowEvent()
      
      ; Événement DragStart sur les gadgets sources, initie un glisser-déposer
      ;
      If Evenement = #PB_Event_Gadget And EventType() = #PB_EventType_DragStart
        Select EventGadget()
            
          Case #ImageSource_1
            DragImage(ImageID(#ImgSrc_1))
            
          Case #ImageSource_2
            DragImage(ImageID(#ImgSrc_2))
            
          Case #ImageSource_3
            DragImage(ImageID(#ImgSrc_3))
            
          Case #ImageSource_4
            DragImage(ImageID(#ImgSrc_4))
            
          Case #ImageSource_5
            DragImage(ImageID(#ImgSrc_5))
            
        EndSelect
        
        ; Événement d'abandon sur les gadgets cibles, reçoivent les données déposées
        ;
      ElseIf Evenement = #PB_Event_GadgetDrop
        Select EventGadget()
            
          Case #ImageCible_1
            If EventDropImage(#ImgCbl_1)
              SetGadgetState(#ImageCible_1, ImageID(#ImgCbl_1))
            EndIf
            
          Case #ImageCible_2
            If EventDropImage(#ImgCbl_2)
              SetGadgetState(#ImageCible_2, ImageID(#ImgCbl_2))
            EndIf
            
          Case #ImageCible_3
            If EventDropImage(#ImgCbl_3)
              SetGadgetState(#ImageCible_3, ImageID(#ImgCbl_3))
            EndIf
            
          Case #ImageCible_4
            If EventDropImage(#ImgCbl_4)
              SetGadgetState(#ImageCible_4, ImageID(#ImgCbl_4))
            EndIf
            
          Case #ImageCible_5
            If EventDropImage(#ImgCbl_5)
              SetGadgetState(#ImageCible_5, ImageID(#ImgCbl_5))
            EndIf
            
        EndSelect
        
      EndIf
      
    Until Evenement = #PB_Event_CloseWindow
  EndIf
  
  End
  
EndProcedure

Re: Drag & Drop multi-images

Publié : sam. 11/mai/2019 11:13
par Micoute
Bonjour à tous,

ce que je cherche à faire, c'est un peu comme ça, mais avec des images:

Code : Tout sélectionner

#Fenetre_principale = 0

Enumeration Gadgets
  #SourcePrivee
  #CiblePrivee1
  #CiblePrivee2
  #CiblePrivee3
  #CiblePrivee4
  #CiblePrivee5
  #CiblePrivee6
  #CiblePrivee7
  #CiblePrivee8
EndEnumeration

Enumeration Polices
  #Police
EndEnumeration

LoadFont(#Police, "Arial Nova", 12, #PB_Font_Bold)
SetGadgetFont(#PB_Default, FontID(#Police))
	
	If OpenWindow(#Fenetre_principale, 0, 0, 580, 250, "Drag & Drop", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
		
		; Créer et remplir les gadgets sources
		;
		ListIconGadget(#SourcePrivee, 200, 10, 180, 230, "Les bébés animaux", 170)
		
		AddGadgetItem(#SourcePrivee, 1, "Le chaton")
		AddGadgetItem(#SourcePrivee, 2, "Le chiot")
		AddGadgetItem(#SourcePrivee, 3, "Le veau")
		AddGadgetItem(#SourcePrivee, 4, "L'agneau")
		AddGadgetItem(#SourcePrivee, 5, "Le poussin")
		AddGadgetItem(#SourcePrivee, 6, "Le chevreau")
		AddGadgetItem(#SourcePrivee, 7, "Le caneton")
		AddGadgetItem(#SourcePrivee, 8, "Le porcelet")
		
		; Créer les gadgets cibles
		;
		ListIconGadget(#CiblePrivee1, 10, 10, 180, 50, "La chatte", 150)
		ListIconGadget(#CiblePrivee2, 390, 10, 180, 50, "La chienne", 150)
		ListIconGadget(#CiblePrivee3, 10, 70, 180, 50, "La vache", 150)
		ListIconGadget(#CiblePrivee4, 10, 130, 180, 50, "La brebis", 150)
		ListIconGadget(#CiblePrivee5, 390, 70, 180, 50, "La poule", 150)
		ListIconGadget(#CiblePrivee6, 390, 130, 180, 50, "La chèvre", 150)
		ListIconGadget(#CiblePrivee7, 10, 190, 180, 50, "La canne", 150)
		ListIconGadget(#CiblePrivee8, 390, 190, 180, 50, "La truie", 150)
		
		; Activez maintenant le transfert sur les gadgets cibles
		;
		EnableGadgetDrop(#CiblePrivee1, #PB_Drop_Private, #PB_Drag_Copy, 1)
		EnableGadgetDrop(#CiblePrivee2, #PB_Drop_Private, #PB_Drag_Copy, 2)
		EnableGadgetDrop(#CiblePrivee3, #PB_Drop_Private, #PB_Drag_Copy, 3)
		EnableGadgetDrop(#CiblePrivee4, #PB_Drop_Private, #PB_Drag_Copy, 4)
		EnableGadgetDrop(#CiblePrivee5, #PB_Drop_Private, #PB_Drag_Copy, 5)
		EnableGadgetDrop(#CiblePrivee6, #PB_Drop_Private, #PB_Drag_Copy, 6)
		EnableGadgetDrop(#CiblePrivee7, #PB_Drop_Private, #PB_Drag_Copy, 7)
		EnableGadgetDrop(#CiblePrivee8, #PB_Drop_Private, #PB_Drag_Copy, 8)
		
		Repeat
			Evenement = WaitWindowEvent()
			
			; Événement DragStart sur les gadgets sources, initie un glisser-déposer
			;
			If Evenement = #PB_Event_Gadget And EventType() = #PB_EventType_DragStart
				Select EventGadget()
						
						; Les glisser-déposer "privés" ne fonctionnent qu'à l'intérieur du programme, 
						; tout le reste fonctionne aussi avec d'autres applications (Explorer, Word, etc)
						;
						Case #SourcePrivee
						If GetGadgetState(#SourcePrivee) = 0
							DragPrivate(1)
							ElseIf GetGadgetState(#SourcePrivee) = 1
							DragPrivate(2)
							ElseIf GetGadgetState(#SourcePrivee) = 2
							DragPrivate(3)
							ElseIf GetGadgetState(#SourcePrivee) = 3
							DragPrivate(4)
							ElseIf GetGadgetState(#SourcePrivee) = 4
							DragPrivate(5)
							ElseIf GetGadgetState(#SourcePrivee) = 5
							DragPrivate(6)
							ElseIf GetGadgetState(#SourcePrivee) = 6
							DragPrivate(7)
							ElseIf GetGadgetState(#SourcePrivee) = 7
							DragPrivate(8)
							EndIf
							
					EndSelect
					
					; Événement d'abandon sur les gadgets cibles, reçoivent les données déposées
					;
					ElseIf Evenement = #PB_Event_GadgetDrop
					Select EventGadget()
							
							Case #CiblePrivee1
							AddGadgetItem(#CiblePrivee1, -1, "Le chaton")
							
							Case #CiblePrivee2
							AddGadgetItem(#CiblePrivee2, -1, "Le chiot")
							
							Case #CiblePrivee3
							AddGadgetItem(#CiblePrivee3, -1, "Le veau")
							
							Case #CiblePrivee4
							AddGadgetItem(#CiblePrivee4, -1, "L'agneau")
							
							Case #CiblePrivee5
							AddGadgetItem(#CiblePrivee5, -1, "Le poussin")
							
							Case #CiblePrivee6
							AddGadgetItem(#CiblePrivee6, -1, "Le chevreau")
							
							Case #CiblePrivee7
							AddGadgetItem(#CiblePrivee7, -1, "Le caneton")
							
							Case #CiblePrivee8
							AddGadgetItem(#CiblePrivee8, -1, "Le porcelet")
							
					EndSelect
					
					EndIf
					
				Until Evenement = #PB_Event_CloseWindow
				EndIf
				
				End

Re: Drag & Drop multi-images

Publié : sam. 11/mai/2019 18:59
par case
comme ca ca marche ?

Code : Tout sélectionner

#Fenetre_principale = 0

Enumeration Images
  #ImgSrc_1
  #ImgSrc_2
  #ImgSrc_3
  #ImgSrc_4
  #ImgSrc_5
  #ImgCbl_1
  #ImgCbl_2
  #ImgCbl_3
  #ImgCbl_4
  #ImgCbl_5
EndEnumeration

Enumeration Gadgets
  #ImageSource_1
  #ImageSource_2
  #ImageSource_3
  #ImageSource_4
  #ImageSource_5
  #ImageCible_1
  #ImageCible_2
  #ImageCible_3
  #ImageCible_4
  #ImageCible_5
EndEnumeration

Declare CreerImageSource(ImgSrc, Largeur, Hauteur, IdSrc)
Declare CreerImageCible(ImgCbl, Largeur, Hauteur, IdCble)
Declare Programme_principal()

Programme_principal()

Procedure CreerImageSource(ImgSrc, Largeur, Hauteur, IdSrc)
  CreateImage(ImgSrc, Largeur, Hauteur)
  If StartDrawing(ImageOutput(IdSrc))
    ;Fond de l'image source
    Box(0, 0, Largeur, Hauteur, $FFFFFF)
    For i = 45 To 1 Step -1
      Circle(Largeur / 2, Hauteur/2, i, Random($FFFFFF))
    Next i       
   
    StopDrawing()
  EndIf
EndProcedure

Procedure CreerImageCible(ImgCbl, Largeur, Hauteur, IdCble)
  CreateImage(ImgCbl, Largeur, Hauteur)
  If StartDrawing(ImageOutput(IdCble))
    ;Fond de l'image cible
    Box(0, 0, Largeur, Hauteur, $FFFFFF)
    StopDrawing()
  EndIf
EndProcedure

Procedure Programme_principal()
  If OpenWindow(#Fenetre_principale, 0, 0, 1020, 310, "Glisser & Déposer", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
   
    ; Créer quelques images pour la démonstration de l'image
    ;
    CreerImageSource(#ImageSource_1, 200, 136, #ImgSrc_1) 
    CreerImageSource(#ImageSource_2, 200, 136, #ImgSrc_2)
    CreerImageSource(#ImageSource_3, 200, 136, #ImgSrc_3)
    CreerImageSource(#ImageSource_4, 200, 136, #ImgSrc_4)
    CreerImageSource(#ImageSource_5, 200, 136, #ImgSrc_5)
   
    CreerImageCible(#ImageCible_1, 200, 136, #ImgCbl_1)
    CreerImageCible(#ImageCible_2, 200, 136, #ImgCbl_2)
    CreerImageCible(#ImageCible_3, 200, 136, #ImgCbl_3)
    CreerImageCible(#ImageCible_4, 200, 136, #ImgCbl_4)
    CreerImageCible(#ImageCible_5, 200, 136, #ImgCbl_5) 
   
    ; Créer et remplir les gadgets sources
    ; 
    ImageGadget(#ImageSource_1, 10, 10, 200, 140, ImageID(#ImgSrc_1))
    ImageGadget(#ImageSource_2, 210, 10, 200, 140, ImageID(#ImgSrc_2))
    ImageGadget(#ImageSource_3, 410, 10, 200, 140, ImageID(#ImgSrc_3))
    ImageGadget(#ImageSource_4, 610, 10, 200, 140, ImageID(#ImgSrc_4))
    ImageGadget(#ImageSource_5, 810, 10, 200, 140, ImageID(#ImgSrc_5))
   
    ; Créer les gadgets cibles
    ;
    ImageGadget(#ImageCible_1, 10, 160, 200, 140, ImageID(#ImgCbl_1))
    SetGadgetData(#ImageCible_1,4)   ; <-------------------------------------------- indique l'image attendue
    ImageGadget(#ImageCible_2, 210, 160, 200, 140, ImageID(#ImgCbl_2))
    SetGadgetData(#ImageCible_2,5) ; <-------------------------------------------- indique l'image attendue
    ImageGadget(#ImageCible_3, 410, 160, 200, 140, ImageID(#ImgCbl_3))
    SetGadgetData(#ImageCible_3,1    ) ; <-------------------------------------------- indique l'image attendue
    ImageGadget(#ImageCible_4, 610, 160, 200, 140, ImageID(#ImgCbl_4))
    SetGadgetData(#ImageCible_4,3) ; <-------------------------------------------- indique l'image attendue
    ImageGadget(#ImageCible_5, 810, 160, 200, 140, ImageID(#ImgCbl_5))
    SetGadgetData(#ImageCible_5,2) ; <-------------------------------------------- indique l'image attendue
   
    ; Activez maintenant le transfert sur les gadgets cibles
    ;
    EnableGadgetDrop(#ImageCible_1, #PB_Drop_Image, #PB_Drag_Copy)
    EnableGadgetDrop(#ImageCible_2, #PB_Drop_Image, #PB_Drag_Copy)
    EnableGadgetDrop(#ImageCible_3, #PB_Drop_Image, #PB_Drag_Copy)
    EnableGadgetDrop(#ImageCible_4, #PB_Drop_Image, #PB_Drag_Copy)
    EnableGadgetDrop(#ImageCible_5, #PB_Drop_Image, #PB_Drag_Copy)
   
    Repeat
      Evenement = WaitWindowEvent()
     
      ; Événement DragStart sur les gadgets sources, initie un glisser-déposer
      ;
      If Evenement = #PB_Event_Gadget And EventType() = #PB_EventType_DragStart
        
        Select EventGadget()
           
          Case #ImageSource_1
            DragImage(ImageID(#ImgSrc_1))
            src=1 ; <-------------------------------------------- indique la position du drag and drop
          Case #ImageSource_2
            DragImage(ImageID(#ImgSrc_2))
           src=2; <-------------------------------------------- indique la position du drag and drop
          Case #ImageSource_3
            DragImage(ImageID(#ImgSrc_3))
           src=3; <-------------------------------------------- indique la position du drag and drop
          Case #ImageSource_4
            DragImage(ImageID(#ImgSrc_4))
           src=4; <-------------------------------------------- indique la position du drag and drop
          Case #ImageSource_5
            DragImage(ImageID(#ImgSrc_5))
           src=5; <-------------------------------------------- indique la position du drag and drop
        EndSelect
        
        
        
        ; Événement d'abandon sur les gadgets cibles, reçoivent les données déposées
        ;
      ElseIf Evenement = #PB_Event_GadgetDrop
        
        Select EventGadget()
            
          Case #ImageCible_1
            If EventDropImage(#ImgCbl_1) And GetGadgetData(#ImageCible_1)=src ; verifiee que la position source du drag and drop correespond a l image attendue
              SetGadgetState(#ImageCible_1, ImageID(#ImgCbl_1))
            EndIf
           
          Case #ImageCible_2
            If EventDropImage(#ImgCbl_2)And GetGadgetData(#ImageCible_2)=src
              SetGadgetState(#ImageCible_2, ImageID(#ImgCbl_2))
            EndIf
           
          Case #ImageCible_3
            If EventDropImage(#ImgCbl_3)And GetGadgetData(#ImageCible_3)=src
              SetGadgetState(#ImageCible_3, ImageID(#ImgCbl_3))
            EndIf
           
          Case #ImageCible_4
            If EventDropImage(#ImgCbl_4)And GetGadgetData(#ImageCible_4)=src
              SetGadgetState(#ImageCible_4, ImageID(#ImgCbl_4))
            EndIf
           
          Case #ImageCible_5
            If EventDropImage(#ImgCbl_5)And GetGadgetData(#ImageCible_5)=src
              SetGadgetState(#ImageCible_5, ImageID(#ImgCbl_5))
            EndIf
           
        EndSelect
       
      EndIf
     
    Until Evenement = #PB_Event_CloseWindow
  EndIf
 
  End
 
EndProcedure

Re: Drag & Drop multi-images

Publié : dim. 12/mai/2019 8:21
par Micoute
Bonjour à tous et merci beaucoup à case, oui en effet, c'est exactement ça que je souhaitais faire, je m'aperçois que j'ai une méconnaissance du langage PureBasic, et pourtant le fichier d'aide est presque constamment ouvert sur mon deuxième écran, je ne dois pas savoir lire entre les lignes. Je te remercie une nouvelle fois, car je sais que ce bout de code va changer ma vie.