Page 1 sur 1

[résolu] ComboBoxgadget et EventType

Publié : mar. 24/mai/2011 18:05
par Ar-S
Je suis en train de voir que les eventtype() ne sont pas gérés dans un ComboBoxGadget. En tout cas la doc ne l'indique pas et ça ne fonctionne (logiquement) pas.

J'essaye de faire sans mais du coup je me retrouve avec un resultat qui s'affiche 2 fois dans le debug.

Dans l'exemple suivant, sélectionnez "super soft" dans la liste puis réessayez en le dé-sélectionnant puis en le re sélectionnant.
on voit que le debug affiche une fois "super soft" lors de la sélection mais une seconde fois lorsque l'on clique juste après sur "mettre à jour".

Code : Tout sélectionner

; Mise à Jour Rapide

Enumeration
  #LDVM
EndEnumeration

Enumeration
  #ComboList
  #Text_1
  #BT_SUP
  #BT_MAJ
  #AFF_INFO
  #NUMV
EndEnumeration

;> User pref
Global.s Maj_ZIP, Maj_NOM, Maj_NumVer

Maj_NOM="Super Soft"
Maj_NumVer="1.2"

Procedure OpenWindow_LDVM()
  If OpenWindow(#LDVM, 475, 350, 291, 115, "Mise à Jour Facile", #PB_Window_SystemMenu|#PB_Window_TitleBar)
    ComboBoxGadget(#ComboList, 2, 65, 180, 20)
    AddGadgetItem(#ComboList, -1, "> Sélectionner un programme <")
    AddGadgetItem(#ComboList, -1, Maj_NOM)
    SetGadgetState(#ComboList, 0)
    
    TextGadget(#Text_1, 185, 40, 103, 20, "Version actuelle", #PB_Text_Center|#SS_CENTERIMAGE)
    StringGadget(#AFF_INFO, 2, 40, 175, 20, "Choisir le programme à mettre à jour", #PB_String_ReadOnly|#ES_CENTER)
    StringGadget(#NUMV, 200, 65, 80, 20, "", #PB_String_ReadOnly|#ES_CENTER)
    ButtonGadget(#BT_MAJ, 2, 92, 286, 20, "Mettre à jour",#BS_FLAT)
    DisableGadget(#BT_MAJ,1)
  EndIf
EndProcedure

OpenWindow_LDVM()
      
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #ComboList
          Num_Soft=GetGadgetState(#ComboList)
          If Num_Soft <> 0
            
            SetGadgetText(#NUMV,Maj_NumVer)
            SetGadgetText(#AFF_INFO,"Fichier pret à être mis à jour")
            SetGadgetState(#ComboList, Num_Soft)
            DisableGadget(#BT_MAJ,0)
            
          Else
            Num_Soft=0
            SetGadgetText(#NUMV,"")
            SetGadgetText(#AFF_INFO, "Choisir le programme à mettre à jour")
            DisableGadget(#BT_MAJ,1)
            
          EndIf
          Debug GetGadgetItemText(#ComboList,Num_Soft) 
          
      EndSelect
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #LDVM
          CloseWindow(#LDVM)
          Break
      EndSelect
  EndSelect
ForEver
      

Re: ComboBoxgadget et EventType

Publié : mar. 24/mai/2011 18:12
par Le Soldat Inconnu
Voici une solution :

Code : Tout sélectionner

; Mise à Jour Rapide

Enumeration
	#LDVM
EndEnumeration

Enumeration
	#ComboList
	#Text_1
	#BT_SUP
	#BT_MAJ
	#AFF_INFO
	#NUMV
EndEnumeration

;> User pref
Global.s Maj_ZIP, Maj_NOM, Maj_NumVer

Maj_NOM="Super Soft"
Maj_NumVer="1.2"

Procedure OpenWindow_LDVM()
	If OpenWindow(#LDVM, 475, 350, 291, 115, "Mise à Jour Facile", #PB_Window_SystemMenu|#PB_Window_TitleBar)
		ComboBoxGadget(#ComboList, 2, 65, 180, 20)
		AddGadgetItem(#ComboList, -1, "> Sélectionner un programme <")
		AddGadgetItem(#ComboList, -1, Maj_NOM)
		SetGadgetState(#ComboList, 0)
		
		TextGadget(#Text_1, 185, 40, 103, 20, "Version actuelle", #PB_Text_Center|#SS_CENTERIMAGE)
		StringGadget(#AFF_INFO, 2, 40, 175, 20, "Choisir le programme à mettre à jour", #PB_String_ReadOnly|#ES_CENTER)
		StringGadget(#NUMV, 200, 65, 80, 20, "", #PB_String_ReadOnly|#ES_CENTER)
		ButtonGadget(#BT_MAJ, 2, 92, 286, 20, "Mettre à jour",#BS_FLAT)
		DisableGadget(#BT_MAJ,1)
	EndIf
EndProcedure

OpenWindow_LDVM()

Repeat
	Select WaitWindowEvent()
		Case #PB_Event_Gadget
			Select EventGadget()
				Case #ComboList
					Num_Soft=GetGadgetState(#ComboList)
					If Num_Soft <> GetGadgetData(#ComboList)
						If Num_Soft > 0
							
							SetGadgetText(#NUMV,Maj_NumVer)
							SetGadgetText(#AFF_INFO,"Fichier pret à être mis à jour")
							DisableGadget(#BT_MAJ,0)
							
						ElseIf Num_Soft = 0
							Num_Soft=0
							SetGadgetText(#NUMV,"")
							SetGadgetText(#AFF_INFO, "Choisir le programme à mettre à jour")
							DisableGadget(#BT_MAJ,1)
							
						EndIf
						Debug GetGadgetItemText(#ComboList,Num_Soft) 
					EndIf
					SetGadgetData(#ComboList, Num_Soft)
					
			EndSelect
			
		Case #PB_Event_CloseWindow
			Select EventWindow()
				Case #LDVM
					CloseWindow(#LDVM)
					Break
			EndSelect
	EndSelect
ForEver

Re: ComboBoxgadget et EventType

Publié : mar. 24/mai/2011 19:31
par Chris
Le combo supporte les EventType() de windows

Code : Tout sélectionner

        Case #ComboList
          Select EventType()
            Case #CBN_SELCHANGE
              Num_Soft=GetGadgetState(#ComboList)
              If Num_Soft <> 0
                
                SetGadgetText(#NUMV,Maj_NumVer)
                SetGadgetText(#AFF_INFO,"Fichier pret à être mis à jour")
                SetGadgetState(#ComboList, Num_Soft)
                DisableGadget(#BT_MAJ,0)
                
              Else
                Num_Soft=0
                SetGadgetText(#NUMV,"")
                SetGadgetText(#AFF_INFO, "Choisir le programme à mettre à jour")
                DisableGadget(#BT_MAJ,1)
                
              EndIf
              Debug GetGadgetItemText(#ComboList,Num_Soft)
              
          EndSelect


Re: ComboBoxgadget et EventType

Publié : mar. 24/mai/2011 23:13
par Ar-S
Merci pour ces 2 solutions ! J'étais sur cette piste LSI.

Chris, j'ai donc découvert #CBN_SELCHANGE ! Encore une commande qu'il va être dure de ne pas oublier et pourtant bien utile.

De la grosse balle tout ça ! :mrgreen: