PureBasic

Forums PureBasic
Nous sommes le Lun 23/Sep/2019 12:18

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 
Auteur Message
 Sujet du message: Drag & Drop multi-images
MessagePosté: Ven 10/Mai/2019 13:09 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 2174
Localisation: 50200 Coutances
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:
#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 GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.62, 5.70 LTS
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Drag & Drop multi-images
MessagePosté: Sam 11/Mai/2019 11:13 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 2174
Localisation: 50200 Coutances
Bonjour à tous,

ce que je cherche à faire, c'est un peu comme ça, mais avec des images:
Code:
#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 GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.62, 5.70 LTS
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Drag & Drop multi-images
MessagePosté: Sam 11/Mai/2019 18:59 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 10/Sep/2007 11:13
Messages: 1314
comme ca ca marche ?

Code:
#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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Drag & Drop multi-images
MessagePosté: Dim 12/Mai/2019 8:21 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 2174
Localisation: 50200 Coutances
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 GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.62, 5.70 LTS
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye