Comment reconnaitre un gadget parmi ses semblables

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

Comment reconnaitre un gadget parmi ses semblables

Message par Micoute »

Bonjour à tous et du coup mes meilleurs vœux pour 2017,

je viens encore vers vous pour solliciter votre savoir et votre aide bienveillante.

Dans le cadre de mes programmes ludiques et éducatifs pour mes petits enfants, je souhaiterais que quand ils cliquent sur le bouton "Vérifier", le système reconnaisse le gadget qui à changé et non le fameux bouton, mais je ne m'en sors pas, peut-être que je n'utilises pas la bonne méthode, je suis ouvert à toutes vos propositions et je vous en remercie par avance.

Code : Tout sélectionner

#Nb_Questions = 1 ;les tableaux commencent à 0

Enumeration Fenetres
  #Fenetre_Principale
EndEnumeration 

Enumeration Gadgets
  #Cmb_0
  #Cmb_1
  #Txt_0
  #Txt_1
  #Btn_Quitter
  #Btn_Verifier
EndEnumeration

; Images incluses
DataSection
  IconeFenetre:
  IncludeBinary "D:\Programmation\Prg Perso\Gfx\icones\Conjugeur.ico"
EndDataSection

; Chargement des décodeurs d'images
UsePNGImageDecoder()

Structure Jeu
  Points.i
  C0.b
  C1.b
EndStructure

Global Dim Question.s(#Nb_Questions), Dim BonneReponse.s(#Nb_Questions), Dim Reponses.s(((#Nb_Questions + 1) * 3) - 1)
Global Evenement, EvenementFenetre, EvenementGadget, NbPoints.Jeu, Verif.Jeu, i, ID

NbPoints\Points = 0

Verif\C0 = 0
Verif\C1 = 0

Procedure AjouterIconeFenetre(WinID, IconID)
  SendMessage_(WinID,#WM_SETICON,#False,IconID)
EndProcedure

Procedure Initialisation()
  Restore Debut
  For i = 0 To #Nb_Questions
    Read.s Question(i)
    Read.s BonneReponse(i)
  Next i 
  
  For i = 0 To ArraySize(Reponses())
    Read.s Reponses(i)
  Next i  
  
EndProcedure

Procedure Verifier()
  ;ID = GadgetID(#Cmb_0)|GadgetID(#Cmb_1)
  ;Select ID
  ;  Case #Cmb_0
  If Verif\C0 = 0
    If GetGadgetText(#Cmb_0) = BonneReponse(0)
      Debug "Félicitations"
      Verif\C0 = 1
    Else
      Debug "Réfléchis encore !"
    EndIf
  EndIf  
  ;  Case #Cmb_1
  If Verif\C1 = 0
    If GetGadgetText(#Cmb_1) = BonneReponse(1)
      Debug "Félicitations"
      Verif\C1 = 1
    Else
      Debug "Réfléchis encore !"
    EndIf
  EndIf
  ;EndSelect
EndProcedure

Procedure Quitter()
  CloseWindow(#Fenetre_Principale)
  End
EndProcedure

Procedure Ouvrir_Fenetre_Principale()
  OpenWindow(#Fenetre_Principale, 420, 100, 350, 175, "Petit QCM", #PB_Window_ScreenCentered)
  AjouterIconeFenetre(WindowID(0), CatchImage(1, ?IconeFenetre) )
  ; Gadgetlist
  TextGadget(#Txt_0, 15, 15, 245, 25, Question(0))
  ComboBoxGadget(#Cmb_0, 255, 8, 71, 25)
  AddGadgetItem(#Cmb_0, 0, Reponses(0))
  AddGadgetItem(#Cmb_0, 1, Reponses(1))
  AddGadgetItem(#Cmb_0, 2, Reponses(2))
  TextGadget(#Txt_1, 15, 45, 245, 25, (Question(1)))
  ComboBoxGadget(#Cmb_1, 255, 38, 71, 25)
  AddGadgetItem(#Cmb_1, 0, Reponses(3))
  AddGadgetItem(#Cmb_1, 1, Reponses(4))
  AddGadgetItem(#Cmb_1, 2, Reponses(5))
  ButtonGadget(#Btn_Verifier, 15, 130, 120, 25, "Vérifier")
  ButtonGadget(#Btn_Quitter, 200, 130, 120, 25, "Quitter")
  
  BindGadgetEvent(#Btn_Verifier, @Verifier())
  BindGadgetEvent(#Btn_Quitter, @Quitter())
  
EndProcedure

Initialisation()
Ouvrir_Fenetre_Principale()

Repeat
  Evenement = WaitWindowEvent()
  Select Evenement
      ; +++++++++++++++++++++++++++++++++++
    Case #PB_Event_Gadget
      EvenementGadget = EventGadget()
      ; Gadget
      If EvenementGadget = #Btn_Verifier
      ElseIf EvenementGadget = #Btn_Quitter
      EndIf ; Fin EvenementGadget
            ; +++++++++++++++++++++++++++++
            ; Fenetres
    Case #PB_Event_CloseWindow
      EvenementFenetre = EventWindow()
      If EvenementFenetre = #Fenetre_Principale
        CloseWindow(#Fenetre_Principale)
        Break
      EndIf ; Fin EvenementFenetre
            ; +++++++++++++++++++++++++++++
  EndSelect
ForEver
End

DataSection
  Debut:
  Data.s "Quelle est la couleur du cheval blanc d'Henri IV ?", "Blanc", "Qu'est-ce qui est plus fort qu'un turc ?", "Deux turcs"
  Data.s "Blanc", "Noir", "Alezan", "Un grec", "Un autre turc", "Deux turcs"
EndDataSection  
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
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Comment reconnaitre un gadget parmi ses semblables

Message par Zorro »

Code : Tout sélectionner


#Nb_Questions = 1 ;les tableaux commencent à 0

Enumeration Fenetres
  #Fenetre_Principale
EndEnumeration

Enumeration Gadgets
  #Cmb_0
  #Cmb_1
  #Txt_0
  #Txt_1
  #Btn_Quitter
  #Btn_Verifier
EndEnumeration

; Images incluses
DataSection
  IconeFenetre:
  ;IncludeBinary "D:\Programmation\Prg Perso\Gfx\icones\Conjugeur.ico"
EndDataSection

; Chargement des décodeurs d'images
UsePNGImageDecoder()

Structure Jeu
  Points.i
  C0.b
  C1.b
  reponse1.s
  reponse2.s
EndStructure

Global Dim Question.s(#Nb_Questions), Dim BonneReponse.s(#Nb_Questions), Dim Reponses.s(((#Nb_Questions + 1) * 3) - 1)
Global Evenement, EvenementFenetre, EvenementGadget, NbPoints.Jeu, Verif.Jeu, i, ID

NbPoints\Points = 0

Verif\C0 = 0
Verif\C1 = 0

Procedure AjouterIconeFenetre(WinID, IconID)
  SendMessage_(WinID,#WM_SETICON,#False,IconID)
EndProcedure

Procedure Initialisation()
  Restore Debut
  For i = 0 To #Nb_Questions
    Read.s Question(i)
    Read.s BonneReponse(i)
  Next i
 
  For i = 0 To ArraySize(Reponses())
    Read.s Reponses(i)
  Next i 
 
EndProcedure

Procedure Verifier()
  ;ID = GadgetID(#Cmb_0)|GadgetID(#Cmb_1)
  ;Select ID
  ;  Case #Cmb_0
  
  
  ; Modifié par zorro
    If Verif\reponse1.s= BonneReponse(0)
      Debug "Félicitations"      
    Else
      Debug "Réfléchis encore !"
    EndIf
	
  ;  Case #Cmb_1
  
    If Verif\reponse2.s = BonneReponse(1)
      Debug "Félicitations"
      
    Else
      Debug "Réfléchis encore !"
    EndIf
	
  
  ;EndSelect
EndProcedure

Procedure Quitter()
  CloseWindow(#Fenetre_Principale)
  End
EndProcedure

Procedure Ouvrir_Fenetre_Principale()
  OpenWindow(#Fenetre_Principale, 420, 100, 350, 175, "Petit QCM", #PB_Window_ScreenCentered)
  AjouterIconeFenetre(WindowID(0), CatchImage(1, ?IconeFenetre) )
  ; Gadgetlist
  TextGadget(#Txt_0, 15, 15, 245, 25, Question(0))
  ComboBoxGadget(#Cmb_0, 255, 8, 71, 25)
  AddGadgetItem(#Cmb_0, 0, Reponses(0))
  AddGadgetItem(#Cmb_0, 1, Reponses(1))
  AddGadgetItem(#Cmb_0, 2, Reponses(2))
  TextGadget(#Txt_1, 15, 45, 245, 25, (Question(1)))
  ComboBoxGadget(#Cmb_1, 255, 38, 71, 25)
  AddGadgetItem(#Cmb_1, 0, Reponses(3))
  AddGadgetItem(#Cmb_1, 1, Reponses(4))
  AddGadgetItem(#Cmb_1, 2, Reponses(5))
  ButtonGadget(#Btn_Verifier, 15, 130, 120, 25, "Vérifier")
  ButtonGadget(#Btn_Quitter, 200, 130, 120, 25, "Quitter")
 
  BindGadgetEvent(#Btn_Verifier, @Verifier())
  BindGadgetEvent(#Btn_Quitter, @Quitter())
 
EndProcedure

Initialisation()
Ouvrir_Fenetre_Principale()

Repeat
  Evenement = WaitWindowEvent()
  Select Evenement
      ; +++++++++++++++++++++++++++++++++++
    Case #PB_Event_Gadget
      select EventGadget() ; modification Zorro
      ; Gadget
		Case #Cmb_0 ; Ajout Zorro
		Verif\reponse1.s=GetGadgetText(#Cmb_0)  ; on viens d'utiliser ce gadget, donc on recupere la reponse
		Case #Cmb_1 ;; Ajout Zorro
		Verif\reponse2.s=GetGadgetText(#Cmb_1) ; on viens d'utiliser ce gadget, donc on recupere la reponse
      case #Btn_Verifier
      case #Btn_Quitter
      EndSelect ; Fin EvenementGadget
            ; +++++++++++++++++++++++++++++
            ; Fenetres
    Case #PB_Event_CloseWindow
      EvenementFenetre = EventWindow()
      If EvenementFenetre = #Fenetre_Principale
        CloseWindow(#Fenetre_Principale)
        Break
      EndIf ; Fin EvenementFenetre
            ; +++++++++++++++++++++++++++++
  EndSelect
ForEver
End

DataSection
  Debut:
  Data.s "Quelle est la couleur du cheval blanc d'Henri IV ?", "Blanc", "Qu'est-ce qui est plus fort qu'un turc ?", "Deux turcs"
  Data.s "Blanc", "Noir", "Alezan", "Un grec", "Un autre turc", "Deux turcs"
EndDataSection  
; Epb
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Comment reconnaitre un gadget parmi ses semblables

Message par microdevweb »

Voici une petit exemple, j'espère que c'est ce que tu cherche

Code : Tout sélectionner

Structure Gadget
  id.l
  txt.s
EndStructure
Global  NewList mesGadgets.Gadget()
Procedure QuelGadget()
  ; Sélectionne l'élément de la liste
  SelectElement(mesGadgets(),GetGadgetData(EventGadget()))
  With mesGadgets()
    Select GadgetType(EventGadget())
      Case #PB_GadgetType_Button
        Debug "Vous avez cliquez sur un bouton"
      Case #PB_GadgetType_String
        Debug "Vous etes dans un champs string"
    EndSelect
    Debug \txt
  EndWith
EndProcedure

OpenWindow(0,0,0,800,600,"Teste",#PB_Window_Maximize|#PB_Window_SystemMenu)
With mesGadgets()
  AddElement(mesGadgets())
  \id=ButtonGadget(#PB_Any,50,50,90,30,"Teste 1")
  \txt="Le bouton 1"
  SetGadgetData(\id,ListIndex(mesGadgets()))
  AddElement(mesGadgets())
  \id=ButtonGadget(#PB_Any,50,100,90,30,"Teste 2")
  \txt="Le bouton 2"
  SetGadgetData(\id,ListIndex(mesGadgets()))
  AddElement(mesGadgets())
  \id=StringGadget(#PB_Any,50,150,90,30,"")
  \txt="Le String 1"
  SetGadgetData(\id,ListIndex(mesGadgets()))
EndWith
BindEvent(#PB_Event_Gadget,@QuelGadget(),0)
Repeat
  Event=WaitWindowEvent()
Until Event=#PB_Event_CloseWindow

Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Comment reconnaitre un gadget parmi ses semblables

Message par Micoute »

Merci microdevweb, je passais par hasard en me disant qu'à cette période de l'année, le forum est très déserté, ce qui allait limité mes chances, mais quelle ne fut pas ma surprise de voir que tu avais réalisé mon vœu, merci encore et meilleurs vœux pour 2017.
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 !
Répondre