Page 1 sur 1

Support du ComboBoxGadget pour EventType()

Publié : dim. 30/déc./2007 14:57
par Thyphoon
Je viens de découvrir que la fonction EventType() ne supportait pas le Gadget ComboBox. j'avoue ne pas comprendre pourquoi ce n'est pas implémenté ? Qu'est ce qui pose problème ?
Il faudrait peut être rajouter en Gras dans la notice que EventType() ne supporte pas le Gadget ComboBox non ?
Voici un exemple qui m'a torturé toute la matiné ! :P

Code : Tout sélectionner

  Enumeration
  #Combo
  #StringGadget
  EndEnumeration
 
  If OpenWindow(0, 0, 0, 270, 140, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ComboBoxGadget(#Combo, 10, 10, 250, 100, #PB_ComboBox_Editable)
    AddGadgetItem(#Combo, -1, "Liste déroulante éditable...")
    StringGadget(#StringGadget, 10, 40, 250, 100,"")
    For a = 1 To 5 : AddGadgetItem(#Combo, -1,"Elément de liste déroulante " + Str(a)) : Next a
    SetGadgetState(1, 2)    ; sélectionne le troisième élément (la numérotation commence à 0)
    Repeat
      Event=WaitWindowEvent()
      If Event=#PB_Event_Gadget
        Select EventGadget()
          Case #Combo
            If EventType()=#PB_EventType_LostFocus 
              Debug"LostFocus Combo"
            EndIf
          Case #StringGadget
            If EventType()=#PB_EventType_LostFocus 
              Debug"LostFocus StringGadget"
            EndIf
        EndSelect   
      EndIf
    Until Event=#PB_Event_CloseWindow
  EndIf 
:P

Publié : mer. 30/janv./2008 13:36
par Ulix
Je pense qu'il s'agit d'un oubli !

Comme tous les gadgets, la combo répond ou produit (cela dépend de comment on considére les choses) des eventype().
Je me souvient de les avoir testé (sous PB 3,xx) !

J'ai retrouvé un petit bout de code, remis au gout du jours (PB 4) :lol:

Code : Tout sélectionner

Enumeration
#f1
#f1Combo
#f1Liste
#f1Bouton
EndEnumeration
 
If OpenWindow(#f1, 0, 0, 300, 250, "Test les evenements d'une ComboBox", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#f1))
	    ComboBoxGadget(#f1Combo, 	10, 	10, 	280, 	100, 	#PB_ComboBox_Editable)
	    ;AddGadgetItem(#f1Combo, 	-1, 	"Liste déroulante éditable...")
	    ListViewGadget(#f1Liste, 	10, 	40, 	280, 	150)
	    ButtonGadget(#f1Bouton,	 110,  210,    80,   30, 	"Quitter")	
					
	    EndIf

;	    
For aa = 1 To 5 
AddGadgetItem(#f1Combo, -1,"Item n° " + Str(aa))
Next aa
SetGadgetState(#f1Combo, 0)
   

Repeat 
Select WaitWindowEvent(); événement du windows
Case  #PB_Event_Gadget    
					Select EventGadget()          
					Case #f1Combo
          					Select 	EventType()
          					Case 1	:		Debug Str(EventType())+"   Selection d'un Item"
          											Choix$ = GetGadgetItemText(#f1Combo, GetGadgetState(#f1Combo))
          											AddGadgetItem(#f1Liste, -1, Choix$)
          					Case 3	:		Debug Str(EventType())+"   Click sur la zone texte"
          					Case 4	:		Debug Str(EventType())+"   Perte de Focus"
          					Case 5	:		Debug Str(EventType())+"   Edition zone texte"
          					Case 7	:		Debug Str(EventType())+"   Ouverture de la liste"
          					Case 8	:		Debug Str(EventType())+"   Fermeture de la liste"
          					Default
          											Debug Str(EventType())+"   Evenement inconnu - Recommencer"
          					EndSelect
          
          Case #f1Liste
            				;
          Case #f1Bouton
          					Quittef1 = 1
 					EndSelect
 Case #PB_Event_CloseWindow
 					Quittef1 = 1
 EndSelect   
 Until Quittef1 = 1
 EndIf
Je ne connais pas les constantes qui sont utilisé pour ces actions, ça peut-être utile de les connaitres :P

A+

Publié : mer. 30/janv./2008 18:36
par Chris
Les constantes Windows, c'est ça.

Debug #CBN_ERRSPACE ; -1

Debug #CBN_SELCHANGE ; 1
Debug #CBN_DBLCLK ; 2
Debug #CBN_SETFOCUS ; 3
Debug #CBN_KILLFOCUS ; 4
Debug #CBN_EDITCHANGE ; 5
Debug #CBN_EDITUPDATE ; 6
Debug #CBN_DROPDOWN ; 7
Debug #CBN_CLOSEUP ; 8
Debug #CBN_SELENDOK ; 9
Debug #CBN_SELENDCANCEL ; 10

Pour celles de Pure, si il y en a, je ne sais pas.

Par contre, certaines risquent de ne pas fonctionner dans la boucle. Il faut les utiliser dans la callback avec la recuperation du message #WM_COMMAND