Drag & Drop multi-images

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

Drag & Drop multi-images

Message 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
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 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Drag & Drop multi-images

Message 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
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 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
case
Messages : 1527
Inscription : lun. 10/sept./2007 11:13

Re: Drag & Drop multi-images

Message 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
ImageImage
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Drag & Drop multi-images

Message 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.
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 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre